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がないとエラーが出ます。
オブジェクト変数とは?
オブジェクトへ参照する形、オブジェクトの位置情報(アドレス)を変数に入れて参照して使います。

なぜアドレスを入れるの?



コメント