実現したいこと
エクセルマクロVBAについてです。
AA列に入っている数字(10000)
の時、AB列に「A」を入力するという」簡単なプログラムですが、
15000行以上とかなりのLoop処理をすることしかできず
処理がとても遅くなってしまいます。
できるだけ早い処理でできるよう改善したいです。
前提
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
VBA
1Sub 自動A入力() 2' 3' 自動A入力 Macro 4' 自動A入力 5' 6 7Dim i As Long 8i = 2 9 10Do While i < 15000 11 12 If Cells(i, 27) = 10000 Then 13 14 Cells(i, 28) = "A" 15 16 Else 17 18 Cells(i, 28) = "" 19 20 End If 21 i = i + 1 22 Loop 23 24End Sub
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
VBAでやらずに、「シートに数式を書いておく」手段のほうが良さそうにも思えるのですが、その方法は使えないのでしょうか?
その後のややこしい処理があるため、数式が使えないのでVBAでやろうとしています。
この処理を高々 15000 程度でそんなに遅くなりますかね。
遅いのだとしたら、二次元配列で作って一括で貼り付ければ瞬時に終わると思います。
私の環境で実行すると1~2秒で終わりました。
1~2秒は遅いでしょうか。
あなたの環境ではおよそ何秒かかっているのでしょうか。
他の行、列にもデータが入っているので、容量が大きくなっており、処理速度も遅くなっています。
他の行や列の容量は関係ないでしょう。
とりあえずその二列を二次元配列に入れ、処理してから戻してみましょう。
Range を二次元配列に代入し、またそれを Range に代入することでそれができます。
回答1件