VBA

VBAの行コピーが遅い

VBA
スポンサーリンク

一生終わらないレベル。

 とりあえず1行をシート2にコピーペーストして、過去一致する内容があれば何もしない、違うならシート3へコピーペーストを繰り返すマクロが必要になった。全然終わらないのでいろいろと原因を探っていた。一つは総当たりでの一致確認を行っていたため、400000×1000×1000×1000とかいう競プロやっていたとは思えないプレイングによるものだった。とはいえそこは当たりがついていたので総当たりでなく辞書型にしてキーがすでにあるかどうか判定してさて解決になるはずだった。が一向に終わらない。

そもそも行コピーが糞遅い

 目から鱗レベルで驚愕の遅さ。100行コピペで1秒かかるため、40万行コピペしようとおもうと4000秒かかる。つくりやPCが悪いため実際にはさらに時間がかかり、一生終わらないとすら思った。
 行コピぺといいつつ8列コピペすればいいだけなので8列を直接=で結ぶ形にすると一瞬で終わった。本当はこの8行を1度で入力すれば8倍速なのでさらに早いのだが、どうにもうまくいかない。2次元配列での転記も調べたが、直観的でなく二度と使える気がしない。というか本題はここで、ここがあまりにもうまくいかなかったので復習も兼ねている。

Range(cells(1,1),cells(1,100))の形での転記がうまくいかない。

 どこをどうやってもうまくいかない。Range(“A1:ABC1”)のような形であれば可能である。
Range(cells(1,1),cells(1,100))のような形を見かけないのはこの辺に原因がありそうだ。Range(“A1:ABC1”)とやると1行ごとにシフトしながら処理するのができないという先入観があったが、offsetを使うことで可能となり、むしろあっさりと元やりたかったことを達成した。cells()で記載していた部分をRangeに書き直したくなるレベルだった。

コメント

タイトルとURLをコピーしました