VBAが妙な挙動をしたので困った時
仕事で26万件くらいのデータを加工しないといけなくなったのでVBAでやってみた。
ステップインでは動くのに、いざ実行すると途中5千件くらいでエラーになってしまった。
プログラム書くのが苦手なのでシートをアクティブにして、そのシートの操作をしているところでいつも止まってしまうことに気づいた。(ちゃんと書けばいいのは分かってます。withで書けばいいのにめんどくさがったせい。)
以下のコードを止まるところの前に追加してみたところ動くようになった。
Application.Wait [Now()] + 0.5 / 86400
件数が多いので1秒では待ち時間が長いためこちらのサイトを参考にした。
https://www.higashisalary.com/entry/vba-wait-ms
26万件動かしてみたら今度は20万件くらいでまた別のエラーで止まってしまった。
しかもいくつかの行が非表示になっている。
Rows.Hiddenなんでどこにも書いていないのに!
データの件数が多すぎたのか?ということで以下を追加したら動いた。
'画面表示の更新を一時的に止めて
Application.ScreenUpdating = False
'この間にやりたい処理を書き、
'画面表示の更新を再開
Application.ScreenUpdating = True
こちらのサイトを参考にしました。
https://teratail.com/questions/171969
半分に分けて処理すれば良かったのかと気づいた時は処理が終わってた。
行き当たりばったり…
本業がプログラム書く人はすごいなぁ。