アンケート一覧ページでアンケートを探す

回答受付が終了しました

VBAについて質問があります。

新機能 AI回答テストを実施中! テスト対象カテゴリ:歴史・悩み相談 ※回答がつかない場合は、画面のリロードをお試しください

回答(4件)

他回答通り操作をしながらマクロを実行が普通じゃないですが 無理やりやる方法を紹介してみます 「On Error Resume Next」VBAエラーが発生しても無視して続行で本来は入れるべきでは無いですが 私の環境だと無いと何か操作したときにたまに400番エラーでマクロが強制終了します Application.Waitだと待機中操作できないのでsleepとDoEventsを使います あと以下だと6CSV処理中は操作できないので1CSVに2秒待機とかに分散させたほうがいいです それでも1CSV処理中は操作できないのでCSV処理はなるべく高速化したい 配列を使うと100倍くらい高速化したりします --- 'sleep使用のための宣言 #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long) #End If Sub main() On Error Resume Next Dim d As Date Do While True d = Now() + TimeValue("00:00:10") Do While Now() < d DoEvents Sleep 1 Loop 'CSV処理 Loop End Sub

NEW! この回答はいかがでしたか? リアクションしてみよう

よく考えたらsleepはいらないかもしれない 操作がスムーズになるかも 代償としてsleep無くすとCPU使用率が増えます --- Sub main() On Error Resume Next Dim d As Date Do While True d = Now() + TimeValue("00:00:10") Do While Now() < d DoEvents Loop 'CSV処理 Loop End Sub

この程度の作業を「CSV->配列ー>指定のエクセルファイルオープンー>指定されたシートへ貼り付け」の手順で行えば数秒で終了するはずです。 そうでないとしたらVBAの作りが性能を考慮しない作り方になっていると思われます。そこを改善すべきでしょう。 <要件> 外部のCSVのファイルを読み、指定のエクセルファイルの決められたシートの書き出すというのをCSVのファイルの数だけ繰り返す(6回程度)プログラム(エクセルにして300行×6列ほどのデータを6ファイル分)

>エクセルで操作をしながらマクロを実行し続けています。 これが一番の問題だと思います。 マクロはあくまでも、自動化するための道具。 手動操作と、同時進行は想定されていません。 マクロ動作中にあなたが何かエクセル上で操作すると ・マクロ処理中 ・あなたの操作でマクロが一時停止し ・あなたの操作を優先する ・操作を辞めると、一時停止していた場所から続きを処理 という様には毎回必ずなるとは限りません。 質問のプルグラムの場合だと 10秒停止している最中は、あなたの操作も受け付けないはず。

処理が重いかどうかの判断は """ 外部のCSVのファイルを読み、指定のエクセルファイルの決められたシートの書き出すというのをCSVのファイルの数だけ繰り返す(6回程度)プログラム(エクセルにして300行×6列ほどのデータを6ファイル分) ””” でどのような処理をしているかによりますのでコードが掲示されていない以上回答を得ることはできません。 掲示されているコードだけでみるとDo While True だと無限ループになりますのでDo~Loop間にループを抜けるコード(Exit Do等)が書かれていないと処理が終了することはありません。処理が重いのではなく無限ループにハマっているのではないでしょうか?