ExcelマクロこんなコードはNGです
マクロ初級者の方、下記のようなコード記載をしてませんか?
マクロの使用が一度限りであれば特に問題ありませんが、今後運用していくマクロだと大変です。
'■Cellsでの指定の場合 WorkBooks(“Book1.xlsx”).WorkSheets(“Sheet1”).Cells(1,1)=1 '■Rangeでの指定の場合 WorkBooks(“Book1.xlsx”).WorkSheets(“Sheet1”).Range("A1")=2
NG理由
- 単純に一行のコードが増えて、見にくい。
- 同じ内容を何度も使う場合、無駄に入力が増え作業効率が悪い。
- ブック名やシート名を修正するだけで、すべてのコードを見直さないといけない。
- ActiveSheetの場合、ユーザーの操作によって想定した動きにならなくなる。
このコードを書けば便利
Dim ws as WorkSheet '■'Book1.xlsxのSheet1をwsに入れる Set ws = WorkBooks(“Book1.xlsx”).WorkSheets(“Sheet1”) '■長い記載をしなくても、省略形で記載が出来るようになった ws.cells(1,1)=1 ws.range("A1")=2
こんな使い方も
Dim ws as WorkSheet '■マクロ実行ファイルのSheet1をwsに入れる Set ws = ThisWorkbook.WorkSheets(“Sheet1”) '■マクロ実行ファイルのアクティブシートをwsに入れる Set ws = ThisWorkbook.ActiveSheet '■アクティブブックのアクティブシートをwsに入れる Set ws = ActiveWorkbook.ActiveSheet '■単純にこれでもいいが、後でコードを見返すときに '■どのブック参照してるのかわからないので、お勧めしない Set ws = ActiveSheet
注意点
ワークシート変数に入れるときには必ず「Set」を記載しましょう。
WorkSheet変数はオブジェクト型の変数なのでSetがないとエラーが出ます。
オブジェクト変数とは?
オブジェクトへ参照する形、オブジェクトの位置情報(アドレス)を変数に入れて参照して使います。
なぜアドレスを入れるの?
コメント