VBA開発

マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する

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がないとエラーが出ます。

オブジェクト変数とは?

オブジェクトへ参照する形、オブジェクトの位置情報(アドレス)を変数に入れて参照して使います。

 

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

・オブジェクトはLong型の数字1といった、単なる値ではありません。

・オブジェクトは複数の情報(プロパティやメソッドを含んでいる)為、単純に値ではありません。

・値ではないので、変数に単純にそのまま代入できないからです。

その他

ワークブックも同様に変数に格納して省略形で記載をしましょう。
省略したWorkSheetオブジェクトでブックも閉じる事が可能です。
WorkSheetオブジェクトからブックを閉じる(Parentプロパティ)

コメント

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