Excel VBA質問スレ Part8at TECH
Excel VBA質問スレ Part8 - 暇つぶし2ch708:デフォルトの名無しさん
08/10/29 22:22:44
>>703さん

ありがとうございます!!

A列全部で検索かけたい場合どうすればいいでしょうか?

709:704 706
08/10/29 22:27:40
申し訳ございませんでした。

EXCEL総合相談所で聞いてきます。
マルチになってしまいますが、ご了承ください。

レベルが上がったらこのスレに来たいと思います。


710:デフォルトの名無しさん
08/10/30 12:42:39
>>708
2003だとFindのヘルプにちょうどいい例が載ってるんだが2007では載ってないのか?

711:デフォルトの名無しさん
08/10/30 12:45:03
他のレスと混同してた・・・


712:デフォルトの名無しさん
08/10/30 21:03:32
>>708
cells はセル全部
columns(1) は1列目

ヒントはここまで。

713:デフォルトの名無しさん
08/10/31 03:25:08
>>706
ズリネタとして結構面白かった

714:デフォルトの名無しさん
08/11/02 18:00:44
dim rg as range
rg=activecell
処理
この処理後に、元のアクティブセルに戻る文が書けません。
どんなだったか、教えて。


715:デフォルトの名無しさん
08/11/02 18:07:50
もう一個、よろしく。
処理の中で範囲を指定してコピー、貼付をしている。
application.screenupdating=false を直前に入れても
画面が動くのですが、画面が動かないようにできませんか?


716:y
08/11/02 18:36:29
>>714
rg.Parent.Activate
rg.Avtivate
ついでに言うと、>714の2行目は構文ミスでエラーになるので修正が必要です。

>>715
CopyメソッドのDestinationプロパティに貼り付け先範囲を指定して、
一度にコピー・貼り付けを行うと、動く枠線が出ないようになります。



717:デフォルトの名無しさん
08/11/02 19:37:54
>>716
久しぶりなので、マクロの記録で、終わってましたorz
おかげで、思い出すことが出来ました。
サンクス。

718:デフォルトの名無しさん
08/11/02 20:51:29
>>716
その2行目も・・・

719:デフォルトの名無しさん
08/11/02 20:57:01
プログラム用のVBAコードを記述した非表示ブックから、データ用の任意のブック
を開き、データブックのイベントに対する処理をしています。
Excel2007はウインドウのタイトル右端の×ボタンが「閉じる」に対応している様
です。
Excel2007でも以前のバージョンと同様に「Excelの終了」にする方法を模索中です。
方法をご教授頂けると有難いです。

720:y
08/11/02 22:45:44
>>718
うは ご指摘ありがとうございます。

>>719
×ボタンでBeforeCloseイベントが発生するので、
同イベントプロシージャ内に
Application.Quit
を記述します。


721:デフォルトの名無しさん
08/11/02 23:00:30
range型変数にsetしてないってのは突っ込んじゃいけない所?
最近、微妙な空気が読めなくなってきたよ・・・。

722:719
08/11/02 23:24:17
>>720
自分もそれでExcelが終了すると思っていたのですが、ブックが閉じるだけです。

SnendKeys(Alt+F4)を試したら終了できました。orz

723:719
08/11/03 00:23:33
訂正です。
SendKeys(Alt+F4)でもだめでした。

プログラムブック(A)からデータブック(B)を開いて、Bが変更された場合に
変更を保存するかどうかを確認するダイアログが表示されるので、Alt+F4
を送信するとダイアログが閉じられる事になるのでExcelを終了できません。

724:デフォルトの名無しさん
08/11/03 00:25:16
>>722
application.quit の前にワークブックの close やってる?
後にしてみたらどうなる?2007はわからんけど、、、

725:722
08/11/03 00:44:26
>>724
もう少し具体的に教えて下さいませんか。

2007以外は×ボタンでExcel終了が終了するようになっています。
同じブックを2007の互換モードで動かして×ボタンでExcelを終了
したいのです。
この方法が分からないのです。

726:デフォルトの名無しさん
08/11/03 01:21:12
>>725
あ、ごめん
URLリンク(www.asahi-net.or.jp)
この辺の問題のことだったの。
2007以外ではいけてるなら関係ないね。失礼した

727:y
08/11/03 07:57:50
>>725
2007で試さずに>720を答えてました。2007ではQuitだとうまくいかないんですね?
一応、Shift を押しながら×クリックすれば一発で終了するので、それで用が済むなら。
VBAでのやり方は、後で職場の2007で探してみます。


728:デフォルトの名無しさん
08/11/03 09:09:42
range型ってsetしなくても使えるの?

729:デフォルトの名無しさん
08/11/03 10:14:59
範囲指定をしてコピー等をした後、コピーモードををフォルスにした
後のことです。
範囲指定を解除する方法は、どこかのセルをactivateやselectするしか
方法はありませんか。画面のちらつきを少しでも防止したいので、セル指定を
したくないのですが、何か方法が無いでしょうか?



730:デフォルトの名無しさん
08/11/03 10:51:57
久々にExcelのVBA触って改めて思ったけど、本当にVBAっていうかVBって糞言語だな。

>>725
724は具体的に言ってるでしょ。
ダイアログが出るために終了できないのならダイアログが出ないようにすれば?
どうしてダイアログが出るの?
ブックが変更されてるのに保存されてないからでしょ?
だったら保存したら?
こんなのパソコン初めて一週間のオッサンでも最初に覚えることの一つじゃないか。

>>729
全体的に何がいいたいのかよくわからない気がする。

731:デフォルトの名無しさん
08/11/03 10:54:12
どうしてもわからないので
教えていただきたいのですが、

Book1を起動して
Book1のマクロで
Book2を開くことはできたのですが

Book2の内容をコピーして
Book1に貼り付けすることができません

よろしくお願いします。



732:デフォルトの名無しさん
08/11/03 10:59:28
>>729
ググってもすぐ見つかるし
マクロの記録でもすぐ解るようなことを何故聞く?
そのものズバリの解除法が簡単に見つかるのに

>>731
Bool2を開くと、戻り値としてBool2のオブジェクトが返る
あとは好きなようにコピーなりなんなりすれば良い

733:725
08/11/03 11:12:00
>>730
保存するかどうかはユーザーが決める事で、プログラム側で決められる
のは、×ボタンが押されたらWindows2007以外と同様な動作なんだけど。
説明不足?それとも...

734:725
08/11/03 11:17:49
>>730
719に記述した通りなんだけど...

735:デフォルトの名無しさん
08/11/03 11:25:31
>>734
だから?
ついでに言えば、お前さんの言っている現象はExcel2007に特有の現象でもなんでもないはずだ。
お前さんが検証もせずそう思い込んでいるだけにすぎない。

全く同じ条件であれば、2003以前のエクセルでも全く同じことが起こるはずだよ。

736:デフォルトの名無しさん
08/11/03 11:43:21
>>735
確かに、Excel2000と2007で同じブックを動作した検証で違いが出た
だけですが...

737:デフォルトの名無しさん
08/11/03 14:48:40
API

738:デフォルトの名無しさん
08/11/03 20:06:15
もしかして、.saved や displayalerts の値はいじらずに、
組み込みダイアログをそのまま使ってるのかな?>>733
組み込みダイアログ出た後の動作が 2007 とその他で異なる可能性あるし、
ユーザに選ばせるなら自前でやった方が確実かも

739:デフォルトの名無しさん
08/11/05 00:23:48
>665
たとえば、セル(4, 3)に '=A1+A2が記入してあり
その式をセル(5, 1)に書き込む場合
  Cells(5, 1) = Mid$(Cells(4, 3), 1)
でどうでしょう?

740:デフォルトの名無しさん
08/11/05 01:33:08
いつの話だよ

741:デフォルトの名無しさん
08/11/05 10:16:29
? ActiveSheet.UsedRange.Rows.Count
これを実行後するとワークシート上のUndo(元に戻す)が無効になっていまいます。
これって、仕様ですか?

742:デフォルトの名無しさん
08/11/05 11:06:19
>>741
イミディエイトウィンドウでやるとVBA動かしたの時と同じでUndoできなくなる
?1+1とかでも同じ
でもウォッチ式として使えば問題ない

743:742
08/11/05 11:11:33
今試したらウォッチ式でもだめだった orz

744:741
08/11/05 15:12:16
セルの選択範囲が変更になったとき、最終行を調べたいのですが
? ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
だと、保護されたシートの時エラーになってしまう。
他にUndoを生かしたまま最終行を求める方法あります?

745:デフォルトの名無しさん
08/11/05 16:17:36
>>744
?WorksheetFunction.Max(ActiveSheet.Cells(65536, 1).End(xlUp).Row,ActiveSheet.Cells(65536, 2).End(xlUp).Row,ActiveSheet.Cells(65536, 3).End(xlUp).Row)
もしくは
Dim lg(2) As Long
lg(0) = ActiveSheet.Cells(65536, 1).End(xlUp).Row
lg(1) = ActiveSheet.Cells(65536, 2).End(xlUp).Row
lg(2) = ActiveSheet.Cells(65536, 3).End(xlUp).Row
Debug.Print WorksheetFunction.Max(lg())
でどう?

746:デフォルトの名無しさん
08/11/05 16:42:43
>>745
有難うございます。
? activesheet.cells(activesheet.cells.rows.count,1).end(xlup).row
で出来たのですが、列を特定しないと駄目なのですよね。

自分も気付いたのですが、
保護されているかどうかでUsedRangeとSpecialCellsを使い分けるという方法
もありますね。

747:デフォルトの名無しさん
08/11/06 01:26:47
超初心者なのですが、グラフ作成のところで詰まってしまいました。
B2を起点とするデータ
B21を起点とするデータ
この二つのデータのグラフを作成しようと以下のマクロを作ったのですが、
Set muSouce2 = Range("B21").CurrentRegion
のところでエラーがでてしまいました。
この場合どうすればエラーが取れるのでしょうか?



Sub Graph1()
Dim mySouce As Range
Set mySouce = Range("B2").CurrentRegion
Charts.Add
ActiveChart.SetSourceData Source:=mySouce, PlotBy:=xlColumns
ActiveChart.ChartType = xlLine

Dim mySouce2 As Range
Set mySouce2 = Range("B21").CurrentRegion
Charts.Add
ActiveChart.SetSourceData Source:=mySouce2, PlotBy:=xlColumns
ActiveChart.ChartType = xlLine
End Sub

748:デフォルトの名無しさん
08/11/06 02:13:25
>>747
set mySouce = の時は、データの入ってるワークシートが
アクティブになっててその書き方で行けるんだけど、
set mySouce2 = の時は先に作ったグラフシートがアクティブになってるから、
range("B21") がどこにあるのかわからんってさ

749:デフォルトの名無しさん
08/11/06 02:51:43
>>748
なるほど!!明快な説明ありがとうございます。
つまり、set mySouce2 = の前に、
データが格納されているシートをセレクトすればよかったのですね。

対処だけでなく原因が分かりためになりました!

750:デフォルトの名無しさん
08/11/06 10:11:14
>>749
そそ、それでOK。加えるなら、せっかく range型変数を2つ用意してるんだから、
最初にまとめて下準備しちゃえば効率がいいよね
selectせずに rangeを取得するやり方もあるけど、少しずつ覚えればいい

751:デフォルトの名無しさん
08/11/06 18:01:30
ある値xをアクティブセルの持つ書式に変換した値を取得したいのですが
Dim rng as Range
Set rng = ActiveCell
rng.Value = x
この方法だとアクティブセルの値が変更される為変更前の値の保持が必要になります。
もう少しましな方法を教えて頂けるとありがたいです。

752:デフォルトの名無しさん
08/11/06 18:14:58
>>751
Format(x, ActiveCell.NumberFormatLocal)
セルの書式によってはバグるかも試練がw


753:デフォルトの名無しさん
08/11/06 18:35:33
そうなんです
[G/標準]とかでエラーになる為、セル代入を考えたのですが...

754:デフォルトの名無しさん
08/11/06 18:50:58
「セルの書式に合わせた文字列に変換」でいいのね
? worksheetfunction.text(x, iif(activecell.numberformatlocal="G/標準","General",activecell.numberformatlocal))
とかは?

755:デフォルトの名無しさん
08/11/06 19:12:31
TEXT関数か・・・ならば
worksheetfunction.text(x, activecell.numberformat)
これでどうかな?

756:デフォルトの名無しさん
08/11/06 19:20:37
>>755
書式に和暦や曜日が指定されてるとヘンになるよ
そういうの無視でいいならいいんだけど

757:デフォルトの名無しさん
08/11/06 19:35:05
しつこいようだけど、頼む。
セルについて指定無しの状態にするすることは可能ですか?
set rg = nothing とか試してみたけどだめだったorz

758:デフォルトの名無しさん
08/11/06 19:44:51
>>757
ほんとしつこいなぁ、、、って誰?w
というか、質問の意味がわからない

>>756
自己レス
曜日は関係なかった。組み込みの日付書式で和暦を選んだ時にヘンになる

759:デフォルトの名無しさん
08/11/06 19:50:15
>>757
以前やってみようとした事があったけど見つからなかった
本当に出来るのかどうかも不明

>>758
お前頭悪そうだな

760:デフォルトの名無しさん
08/11/06 19:56:56
>>759
質問の仕方が悪いのに、慮って答えてやるだけが能じゃないよ

761:デフォルトの名無しさん
08/11/06 20:01:11
質問スレで分かってて答えないのは只の無能だと思われてもしょうがない。

762:デフォルトの名無しさん
08/11/06 20:10:08
>>761
そう思いたい奴は思えばいいよ。回答者としてのスタンスは人それぞれだろ
質問スレでいちいち他の回答者をくさすのが有能とも思わないぞ

763:デフォルトの名無しさん
08/11/06 20:46:09
喧嘩は他所でスレ立ててやれよ
目障り

764:デフォルトの名無しさん
08/11/06 21:18:48
自己紹介乙

765:デフォルトの名無しさん
08/11/06 21:53:02
>>763
おまえは引っ込んでろ!
このカス。

766:デフォルトの名無しさん
08/11/07 04:10:27
俺も >>757 の質問がよくわからないし
つか、前に質問したなら名前欄にレス番とか入れてくれ


767:569
08/11/07 06:17:38
フォルダの中を検索して特定のExcelファイル(○○.xls)を見つけたいのだが
フォルダを作る側が適当で(ここの部分は立場上どうしようもないです・・・)

Aフォルダ
Bフォルダ
○○.xls
というパターンもあれば
Aフォルダ/Cフォルダ/○○.xls
Bフォルダ/○○.xls
というパターンもあり、○○.xlsが無いことも2個あることも5個あることもある。ただ幸い○○.xlsの名前は固定です。
このフォルダ内から存在する全ての○○.xlsを開いて中身から数字を
取り出す機能を持ったVBAを作ろうとしています。

フォルダのパスはFOを使って配列に入れてそれを
全てのフォルダパターンを使って○○.xlsを探そうとしています。
そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか?

階層固定のフォルダ抽出、Excelファイルは問題ないのですが
階層実固定のフォルダ抽出で詰まっています。

例えば手抜きですが↓みたいな流れでうまく出来そうですかね?
Private Sub AAA()
今のパスを配列に格納
  if フォルダが有る時 then
call AAA
end if
End AAA


768:デフォルトの名無しさん
08/11/07 06:18:18
すんません。上のやつ>>569さんじゃないです・・・。名前に入っちゃいました。

769:デフォルトの名無しさん
08/11/07 08:44:46
>>767
>そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか?
試した?
試してもいないのに質問しに来てない?

770:751
08/11/07 09:34:48
>>754
>>755
>>758
ありがとうございます.orz
754さんの方法でグーですね。

771:751
08/11/07 09:47:36
ついでにもう1つ教えてください。
xの値が「=AAA」とかだったりするとエラーになってしまうのですが、これを判別
するにはどうしたらよいのでしょうか?
? Application.WorksheetFunction.IsError(x)
だとエラーにならないのですが...

772:デフォルトの名無しさん
08/11/07 10:00:12
どういうエラーでそのxが何か分からないと答えられない
セル(Range)なのか数値や文字なのか

773:デフォルトの名無しさん
08/11/07 10:09:03
>>767
「Excel VBA 再帰」でぐぐれば見本がゾロゾロ出てくるよ

774:771
08/11/07 10:50:19
入力したテキストxでAutoFilterの設定・解除をしています。
(フィールドはアクティブセルの列)
この時、xの書式をアクティブセルの書式への変換は
>>751
さんに教えて頂き実現できましたが、テキストがエラーかどうかの判定に
Set rng = ActiveCell: rng.Value = x
if WorksheetFunction.Iserror(rng)
とすると、アクティブセルの保存が必要になってしまう為もう少しましな
方法を模索中なのです。


775:デフォルトの名無しさん
08/11/07 12:54:09
>>769
ちょっと試せない状態だったのでとりあえず聞きました。

>>773
ありがとうございます。ぐぐり方が悪かったのかExcel VBA 再帰で入れたらちゃんと出てきました。
お騒がせしました。

776:デフォルトの名無しさん
08/11/07 13:14:43
初歩的な質問なんですが、
intの変数にアクティブセルのアドレスを代入していますが、一つ目の変数にしか代入できません。
二つ目の変数に別のアクティブセルを代入するとerror13が現れます。
どなたかご教授願えないでしょうか?

777:デフォルトの名無しさん
08/11/07 13:47:26
>>776
アクティブセルは1つしかないはずなのに「別のアクティブセル」って何?

778:デフォルトの名無しさん
08/11/07 15:38:15
>>776
Error 13は「型が一致しません。」だから
単純にint型に文字列(スペース含む)を代入しようとしてるとか?
セルが空なら0が入るし

779:デフォルトの名無しさん
08/11/07 18:04:36
膨大な量じゃないならコード貼ってどこでエラーがでたか書いてくれよ

780:デフォルトの名無しさん
08/11/07 18:10:46
>>774
x = "=AAA" の時に、Criteria1:="=" & x でオートフィルタかけてもエラー出ないよ?
いつどこで出るエラーのことを言ってるんだ?具体的にコード貼ってくれないかな

781:デフォルトの名無しさん
08/11/07 18:27:19
説明が下手な奴大杉

782:デフォルトの名無しさん
08/11/07 19:31:54
説明もまともに出来ない不出来な頭だから、問題も自分で解決できずにここに質問に来るんだよ

もちろん、本当に難易度の高いことをやっていて、行き詰まって来る奴も居ないわけではないが
殆どが能無しどころか脳無し(調べる考えるという知能的行為そのものが出来ない奴)なんだから
ここに居座る(質問者としてではなく)ならそのことは覚悟しなくちゃならない

783:デフォルトの名無しさん
08/11/07 19:45:31
>>782
よく分からない論理だな。

784:デフォルトの名無しさん
08/11/07 21:12:21
わからんではないが、そこまで言い放つことでもない
甘え放題も困るが委縮させ過ぎるのもよくない
意味不明な質問を差し戻したり、時々愚痴るぐらいで丁度いい

785:デフォルトの名無しさん
08/11/08 07:17:57
ヒマだからスレ読み返してたらわかったw
>>757=>>729だね。たぶん>>715も同じ人っぽい

screenupdating = false をやっててもちらつくのは、おそらく on / off のタイミングが悪い
たびたび on / off すると、on になった一瞬のスキも見逃さずに画面更新するからちらつく
off にしたらしっぱなしになる位置でやらないと

範囲指定を解除(セルが select されていない状態に)する方法だけど、
高さ・幅 0のイメージを用意してそれを select すれば、
selection が range でない状態にすることはできる
activecell の参照は直前のまま保持されるけど、シート上の囲み枠は出ない

でもさ、解除ができても、指定/解除を繰り返せばどのみちチラチラするよ
ちらつき防止なら、screenupdating のタイミングを確認するのがいいと思う

786:デフォルトの名無しさん
08/11/08 17:49:36
>>785
ベリー、ベリー、サンクス
お見込みのとおり、その3つは折れです。
展望が開けました。
サンクス。


787:デフォルトの名無しさん
08/11/09 08:43:30
Enumとして宣言さている列挙型のmember名をStringとして取得できますか?

788:デフォルトの名無しさん
08/11/09 11:32:30
販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。

・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述
・実行ボタンを押す
・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す


789:デフォルトの名無しさん
08/11/09 11:34:07
だれのための、どういう報告なの?

790:788
08/11/09 11:36:43
販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。

・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述
・実行ボタンを押す
・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す

そんなマクロなんだけど、毎日販売管理ソフトから吐き出されたxlsファイルをBook1.xlsと同じ階層にコピーして、ファイル名を記述しないといけないのだけど、
xlsファイルをxlsファイルにドラッグアンドドロップとかでファイル名を取得して実行できるようにする方法ってありますかね?

791:デフォルトの名無しさん
08/11/09 11:53:23
>>787
スレ違い
それはVBAではなくVB言語の質問だ

>>790
あるけど、それはWindowsの設定の問題だ

792:デフォルトの名無しさん
08/11/09 12:30:57
windows弄ったら出来るのかー。

ほんと言うとVisualStudioでEXE形式にできたらいいんだけどね。

VisualStudioからEXCELのコントロールわからんしな;;

793:デフォルトの名無しさん
08/11/09 14:49:50
できないだろ
無理にやると普通に開けなくなるだろ
バッチファイルかWSHにドロップして
引数を環境変数に設定して
xlsファイルを開き
環境変数を見る

794:デフォルトの名無しさん
08/11/09 15:43:56
いつもそんなことやってるの?

795:デフォルトの名無しさん
08/11/09 19:34:55
>>790
普通にアドインを作れば解決するケースに思えるけど。

796:デフォルトの名無しさん
08/11/09 21:03:05
アドイン??

797:デフォルトの名無しさん
08/11/09 21:16:11
>>795
教えてくれ

798:デフォルトの名無しさん
08/11/09 21:31:57
「Excel アドイン」でググってトップのところに詳しい説明があるから
それを読んだ方がいいよ。

VBAのコードが普通に書ける人ならすぐに理解できると思う。

799:788
08/11/09 21:34:13
>>795
>>798
まさにこれだ!!!
ありがとう!!!

800:655
08/11/10 00:15:33
>>655
If Weekday(Date) = 7 And (Day(Date) + 7) \ 7 = 3 Then
Range("A1").Value = "明日は第三週の日曜日"
End If
正直な話、説明がさっぱり理解できてませんでしたが、がんばったらできました。

801:デフォルトの名無しさん
08/11/10 10:07:40
>>786
書いて良かった。誰?とか言ってゴメンなw

>>790
処理対象ファイルが自動的に特定できれば一番ラクそうだけど、
人間が見ないと特定できないの?
あるフォルダ内でタイムスタンプが今日付けの .xls とかでも無理?
正直、アドインにする利点がピンと来ない、、、

802:デフォルトの名無しさん
08/11/10 11:51:04
>>801
販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。
たとえは今日なら20081110.xlsって手打ちで名前をつけてね。
それをこのマクロの入ったBook1.xlsから呼び出すんだ。

それを、アドインにしておけば、xlsを吐き出すことなく、読み込むcsvの名前をつけて保存すればよくなるだけだなと思ったら、これはいいアイディアだと思う。

803:デフォルトの名無しさん
08/11/10 12:55:12
>>802
>販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。
保存する前の段階でBook1.xls開いてマクロ動かせばいいだけじゃね?
一々保存してからマクロ動かさないといけない理由でもあるのか?

804:デフォルトの名無しさん
08/11/10 12:58:20
>>802
なるほど理解した。けど単にツールバーにマクロ登録でいいような、、、

805:デフォルトの名無しさん
08/11/10 13:33:50
今までが無駄過ぎただけだな。

806:デフォルトの名無しさん
08/11/10 14:03:48
>>803
保存しないとファイル名がないから別のブックからコントロール奪えないと思ってたorz

807:デフォルトの名無しさん
08/11/10 14:05:19
>>804

それがアドインかと思ってたorz orz

808:デフォルトの名無しさん
08/11/10 19:24:04
>>804
そのブックは「販売管理ソフト」が吐き出しすものだって言ってるじゃん。

809:デフォルトの名無しさん
08/11/10 19:26:46
>>808
ツールバーにマクロ登録すると
その販売管理ソフトが吐き出したブックをExcelで開いたときにマクロを動かせます。

810:デフォルトの名無しさん
08/11/10 19:30:27
うーんだからマクロっていうのはだなあ.....ってところから説明しないとダメ?

811:デフォルトの名無しさん
08/11/10 19:40:33
マクロが記述してあるだけのブックを用意して
そのマクロをツールバーに登録するんだよ
ネットワーク越しでも大丈夫だし

812:デフォルトの名無しさん
08/11/10 23:38:11
初心者なので、丸投げでお願いします。

application on timeを使って、
開始したら、
a時に処理1をやって、その20秒後に処理2をやって、その8秒後に処理3を
やって、終わる。
というものです。
どうにも、最近、頭が回らなくなって困ってます (~.~)


813:デフォルトの名無しさん
08/11/10 23:48:19
はい次の話題

814:デフォルトの名無しさん
08/11/11 00:02:20
812の追記
処理1は、マクロ1。処理2はマクロ2。処理3はマクロ3と
いうことでお願いします。



815:デフォルトの名無しさん
08/11/11 01:31:29
A1に「08/11/11」と入力されているのをB1に「20081111」と変換させるマクロを作りたいと考えています。

Cで書くと下記みたいな流れになるかなと思うんですが・・・(間違ってるかもしれませんが)

abc ="08/11/11";
sscanf(abc,"%d/%d/%d",&a,&,b,&c);
printf("20%02d%02d%02d",a,b,c);

VBAで書くにはどんな関数使えばいいのでしょう。

816:812
08/11/11 01:45:58
自己解決できましたので、
>>812 814はスルーでよろっ。


817:815
08/11/11 02:02:40
文字列操作でこうやってみた

                tmpdate_y = CStr(Left(Sheet1.Range("A" & i).Value, 2))
                tmpdate_m = CStr(Mid(Sheet1.Range("A" & i).Value, 4, 2))
                tmpdate_d = CStr(Right(Sheet1.Range("A" & i).Value, 2))
                tmpdate = "20" & tmpdate_y & tmpdate_m & tmpdate_d

スマートじゃねえよなーorz

818:デフォルトの名無しさん
08/11/11 02:09:50
>>815
いったん日付型にしてから書式変換するとラクだと思う
文字列→日付型への変換は cdate()
日付型→書式付文字列変換は format()
詳しくはヘルプ読んでね

819:デフォルトの名無しさん
08/11/11 19:44:30
すいません質問です
エクセルのマクロで
module1内にコード書くのと
sheet1内にコード書くのとでは
動作にどんな違いがありますか?
sheet1から他のシートを対象としたselectionメソッドが失敗するようなのですが・・・


820:デフォルトの名無しさん
08/11/11 19:50:39
訂正)Selection→Select

821:デフォルトの名無しさん
08/11/11 20:51:01
>>445で解決しましたすいません

822:デフォルトの名無しさん
08/11/11 21:15:30
こんばんは
複数のセルの値を一度に比較することってできますか?
Sheet1のA1:B5とSheet2のA1:B5のValueが
同じであるかどうか、が分かるだけでokなのですが。

823:デフォルトの名無しさん
08/11/12 00:20:52
各シートは配列のようにアクセスできるが

824:デフォルトの名無しさん
08/11/12 01:57:12
>>822
配列数式でできるよ

825:デフォルトの名無しさん
08/11/12 05:52:03
Excel2003を使っています。
羅線の太さを調節する方法ってありますか?
できるだけ細くしたいのです。


826:デフォルトの名無しさん
08/11/12 06:21:13
>>825
マクロの記録使って保存すればおk

単純に細くするだけの質問ならスレチ


827:デフォルトの名無しさん
08/11/12 12:48:05
Excel2000:WindowsXP/Pentium4(1.8GHz)/RAM512

セルA1とA2を結合したシートに対して
下記のコードの実行時間は
1回目:13秒
2回目以降:54秒 (Pasteに変更すると29秒)

1回目と2回目以降の違いの理由は何なのでしょうか?

rows(1).select
selection.copy
selection.offset(1).resize(20000).select
selection.insert shift:=xlDown
selection.mergecells = false
selection.delete shift:=xlUp
range("A1").Select

どうやったら速度アップできるか知りたいのですが...


828:デフォルトの名無しさん
08/11/12 12:52:09
羅線ってなんだ?
らせん?

829:デフォルトの名無しさん
08/11/12 13:26:01
螺旋
罫線
新羅
確かに間違える人は居るかも

830:827
08/11/12 14:59:51
やりたい事は
シート・アクティブ時にコピー挿入し編集
シート・ディアクティブ時に挿入データを削除(元の状態に戻す)
なのです。

831:デフォルトの名無しさん
08/11/12 15:02:57
> 1回目:13秒
> 2回目以降:54秒 (Pasteに変更すると29秒)

単位、「秒」じゃなくて「㍉秒」の間違いだよね?

832:デフォルトの名無しさん
08/11/12 15:15:35
秒です。

833:デフォルトの名無しさん
08/11/12 15:17:38
セルを結合していなければ1秒未満です。

834:デフォルトの名無しさん
08/11/12 15:20:33
いや、結合していても㍉秒でしょ

835:デフォルトの名無しさん
08/11/12 15:34:39
結合云々は関係なく1秒かからんな
データは何かあるのか?

とりあえず高速化のために
Application.ScreenUpdating=False
はやってるよな?

836:デフォルトの名無しさん
08/11/12 15:54:59
新規ブックでセルをマージし、>>827のコードを走らせただけです。
ScreenUpdating, EnableEvent, Calculation等もやってみています。

マシン・スペック(5年前)の問題でしょうか?

837:デフォルトの名無しさん
08/11/12 16:15:36
スペックは漏れのマシンのほうが悪いくらいのはずw
計測方法の問題じゃないか?

838:デフォルトの名無しさん
08/11/12 16:54:32
すまん、Mobile Pentium4の間違いだったorz

839:デフォルトの名無しさん
08/11/12 17:23:09
Mobile Celeron(1200MHz)512MB RAM
Mobile云々は置いといてこっちは1.2GHzなんだよw
OSが2kだからってここまで差は出ないよな?
体感でも1秒以上かかってるのか?

840:デフォルトの名無しさん
08/11/12 17:38:52
excel2003:WindowsXP/Pentium4(2.8GHz)/RAM512
でセルA1とB1を結合して走らせてみたら
1回目:9秒
2回目:40秒

体感で1秒未満は、セル結合無しの場合だけ

841:デフォルトの名無しさん
08/11/12 17:53:33
あぁA1とB1を結合かw
それなら確かに遅くなるな

842:827
08/11/12 18:00:26
>>827のA1とA2はA1とB1の結合に訂正願います orz

843:デフォルトの名無しさん
08/11/12 18:03:34
俺の古典的環境だと1回目20秒、2回目1分40秒w
遅過ぎワロタw

844:デフォルトの名無しさん
08/11/12 22:23:38
>>830
どこまでが編集前でどこからが編集後?
編集は .mergecells = false の前?後?

845:デフォルトの名無しさん
08/11/13 09:30:46
*)シート(A1とB1結合)アクティブ時の処理
rows(1).select
selection.copy
selection.offset(1).resize(20000).select
selection.insert shift:=xlDown
'コピー挿入した行に名前を付ける(後で削除の為)

*)コピー挿入したデータへの編集

*)シートディアクティブ時の処理(アクティブ時点の状態に戻す)
'実際にはSelectionでは無く名前で削除
selection.mergecells = false '<- これ無しだと遅くなる為
selection.delete shift:=xlUp
range("A1").Select


846:デフォルトの名無しさん
08/11/13 09:40:02
メモリ1ギガとか積んでいる人だと1回目と2回目の差が無いなんて事ないですか?

847:デフォルトの名無しさん
08/11/13 12:31:54
>>845
了解

多数の結合セルを含む範囲で挿入/削除を続けてやると、後でやる方の処理が遅くなる感じ
メモリ上のシート情報がややこしくなるのかな?1回目をやった後ブックを閉じて開き直すか、
シートコピーでリフレッシュすれば2回目が遅くならないけど、イベント拾うならキツイよね

オレなりに試してみた限りでは、

挿入時: .insert を使わず、2行目以降にデータがあった場合は 20000行ずらした位置へ
      コピーし、狭間へ 1行目を 20000行分コピー
削除時: 最初にシートコピーでバックアップを取っておいて、.cells.copy でコピーし戻す
      ( .mergecells = false もいらない)

ってなやり方が一番早かった。1回目は大差ないけど 2回目が 1回目より早くなる

848:845
08/11/13 13:26:06
>>847
有難うございます

挿入処理は、
insertを使わない方法(Paste)は、定義されている名前がある場合面倒そうです

削除処理は、
ご指摘のシートコピーを戻す方式を実際の処理に組み込んでテストしてみます

849:デフォルトの名無しさん
08/11/13 17:21:48
>>848
名前か。それは厄介だ
挿入に insert 使ってコピー書き戻すと名前付き範囲の内容書き変わるし
insert だけでも 2回目は遅くなるし

後は、編集時にシートコピーしたシートを使っといて、deactivate されたら
シートごと削除とかかなあ。イベントあるからいろいろめんどくなるんだよな、、、

850:デフォルトの名無しさん
08/11/13 17:26:26
シートのコピーから戻す方式を試したら更に時間が掛かる様になってしまった

851:デフォルトの名無しさん
08/11/13 18:16:20
>>850
データ量や数式、書式設定その他によってかなり違うだろうね
オレのはあくまで>>827の条件で試しただけだし

852:デフォルトの名無しさん
08/11/13 21:52:40
>>847の処理における名前付き範囲は、挿入時に
range("namedarea").offset(20000).name = "namedarea"
コピーバックの後に .offset(-20000) で、わりと簡単に対応できた
画期的なやり方は見つからんね。構成とか見直すしかないかも、、、

853:851
08/11/14 00:13:24
とりあえず、A2:Z3000 をテキトーな数式で埋めて試して見たけど、
やっぱ>>847のが早かった。calculation 切れば数式なしの時とあんま変わんない
とにかく insert (特に 2回目)が遅いんで、insert とコピーバックの組み合わせでは
効果ないかも

854:デフォルトの名無しさん
08/11/14 21:41:28
はじめまして、こんばんは。
今日はじめて本屋にて VBA の存在を知りました。
初心者質問ですみません、例えば、、、これができるようになるとなにができるようになるのですか?
詳しいかた教えてください。


855:デフォルトの名無しさん
08/11/14 22:05:58
>>854
例えば野球データベース
選手名を入力すればその選手のプロでの全成績が一覧表示されるとか

インベーダーゲーム作ってる人もいるよ

とにかくExcelをVBAプログラムで自在に操れるって事

856:デフォルトの名無しさん
08/11/15 19:22:40
>>854
業務で言うと、データベースをexcelに展開して、
色んなチェックプログラムを掛けて品質保証したりとか。
ワークシートで使える関数を作って会社内に配布したり。

excel上に検索エンジン作ってる人もいるし、まぁ、何でもあり。


857:無職カス
08/11/16 02:50:07
みなさん、こんばんは、 >>854 です。
>>855
>>856  さん      返答ありがとうございます。かなり使える機能ですね。
 最近アルバイトをやめました。時間はたっぷりありますのでそこそこ使えるレベルまでもっていきます。
これからVBAを勉強していきます。

多々質問すると思いますが、みなさんよろしくおねがいします。

858:デフォルトの名無しさん
08/11/16 03:45:10
下に全員の成績表があって、
そこから各部門のトップ5を上の小さい表に抽出したいんだけど、
ランクとは違う気がするし行き詰っています。
どなたかご教授願えますでしょうか?

859:デフォルトの名無しさん
08/11/16 05:08:38
officexpのマクロと関数の処理順(と思われる事項)で知恵を貸していただきたく書き込みいたします。

セルAの値によってセルBの値が変わるよう関数を設定しているの状況で、
セルBの書式が自身の値によって変わるようにマクロを組もうとしています。
(書式は4種類以上なので条件付き書式は使えません)

worksheet_changeで書式変更を自動実行するようにしたのですが、
マクロを実行してみるとAの値を変えてもBの書式が変わりません(Bの値は通常通り変わります)
その状況で、まったく関係ないセルCの値を変更するとBの書式が変わったので、
マクロ自体には問題はないようです。

おそらく、A変更→マクロ自動実行→関数でBの値変更、という内部処理があるために
マクロによる変化が見られない状況であると思っています。
(違っているなら根本から考え直さないといけないかもしれませんが)
このような構成の場合、関数による値の変更が反映された後で
書式変更などのマクロが実行されるようにすることはできないのでしょうか?

ご教示お願い申し上げます。

860:デフォルトの名無しさん
08/11/16 10:11:55
Calculate

861:デフォルトの名無しさん
08/11/16 10:51:08
>>860
ご回答ありがとうございます。
5分前にcalculate使えばいいと気づいて、自己解決した旨書きにきたら
既にお答えくださっていたのですね。

初歩的な事でお手を煩わせてしまい、申し訳ございませんでした。

862:デフォルトの名無しさん
08/11/16 19:13:30
>>857
基礎を勉強するには独学でも全然問題ないけど、
プログラム未経験で、かつ仕事に就いてないとなると、
プログラムの基本的な事を理解するまでに半年か1年かはかかると思う。

んで、そこから先は明確な目標が無いと無理。
やれる事が多いんだけど、ぶっちゃけた話、特化したプログラムには敵わない。
例えば>>855でゲームの話が出てたけど、確かに作る事は出来る。

けど、VBAからAPI呼び出してるに過ぎないし、更に言えば
タイムラインって概念がある&ドローツールのFlashなんかには到底及ばない。

ExcelVBAはあくまでExcelの処理系統のプログラムだと俺は考えてる。
Excel上での処理に関してはVBAがぶっちぎり。当然だけどね。

何か目標持った方が良いよ。

863:デフォルトの名無しさん
08/11/16 19:15:00
>>859
calculate使う理由が分からん・・・。
VBAで処理してるなら、VBAでBの値も弾き出せば良いんじゃないか?


864:独り言(ちら裏)
08/11/17 01:24:05
というか、条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
問題ありかと...
それがExcelのポリシーというのであれば、そういうアプリめいたものを
Excelで作ることが間違いだったということになるか...

865:デフォルトの名無しさん
08/11/17 10:16:53
> 条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
> 問題ありかと...
という意見が多いので、2007で設定数が 3 から 無制限 に、
優先順位も設定を書き直さずに変更できるようになった。

866:デフォルトの名無しさん
08/11/17 14:02:59
ということで、Excel2007以降の購入をお勧め

867:デフォルトの名無しさん
08/11/17 15:07:26
てゆーか、条件によって変化するセルの書式の種類は3つに留めておく
というのが無難かと

868:デフォルトの名無しさん
08/11/18 00:50:10
>>864
selection changeイベントで好きなだけ設定しろ。
おまいのVBAは飾りもんか?

869:デフォルトの名無しさん
08/11/18 17:07:45
これのFSO(FileSystemObject)使ってテキストデータの読み込みすると文字化けします。
URLリンク(www.asahi-net.or.jp)
strRECをUTF-8→SJISにエンコードするには、どう記述したらいいですか?



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch