社内SEの話

日々起きたことの記録用

VBAでセルの範囲選択したときにたまにエラーが発生する

VBAで所定の範囲をコピーしたり書式設定をしたりと何かと用事があると思います。
VBAで範囲選択をするときは教科書的なコードは下記になると思います。

Range("A1:B2").select

ACCESSSや他のExcelファイルを操作する場合はWorkbook Worksheetから宣言します。
同じファイル内であれば上記の方法でエラーは発生しないと思います。
固定値であればこの方法で対応は可能だと思いますが、動的に選択したい場合はこの方法ではやりにくいです。
カラムの文字を無理やり割り当てればなんとかできますが、現実的ではありません。
そこでRange()内を開始セルと終了セルをCellsで指定する方法があります。

’ こんな書き方
Worksheet.Range(cells(1,1),cells(2,2)).select

この方法であれば動的に選択することは可能です。
予測変換で引数が表示されるので簡単に書くことができると思います。

ここで落とし穴がある

実行するとエラーが発生なく終了すると思いますが、何回か実行しているとエラーが発生します。
上記のコードだと動作が安定しません。

Worksheet.Range(Worksheet.cells(1,1),Worksheet.cells(2,2)).select

cellsに対して必ずworksheetのプロパティであることを明確にしてあげる。
VBAのおせっかい機能である程度予測でして実行していますが、唐突にエラーが発生します。
エラーを回避するためにもcellsの使用する時は必ずWorksheetをつけて使用しましょう。

参考URL
2 回目のコード実行時に Excel のオートメーションが失敗する
ここの解決方法に書いてある方法を適用している