VBA開発

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

ExcelマクロこんなコードはNGです

マクロ初級者の方、下記のような記載をしてませんか?
マクロの使用が一度限りであれば特に問題ありませんが、
今後運用していくマクロだとメンテンナンス面でお勧めしません。

    '■ワークブック名を毎度入力していてコードが長い。
    Workbooks("Book1.xlsx").Close
    
    '■ワークブック名が省略されているので、どのブックかすぐに判断できない。
    ActiveSheet.Cells(1, 1) = 1
    
    '■ワークブック名もシート名も省略されているので、どのブックのどのシートかすぐに判断できない。
    Cells(1, 1) = 1
    
    '■わざわざActivateしている
    Workbooks("Book1.xlsx").Worksheets(1).Activate
    Cells(1, 1) = 1

NG理由

  • 単純に一行のコードが増えて、見にくい。
  • 同じ内容を何度も使う場合、無駄に入力が増え作業効率が悪い。
  • ブック名やシート名を修正するだけで、すべてのコードを見直さないといけない。

このコードを書けば便利

    Dim wb As Workbook

    '■'Book1.xlsxをwbに入れる
    Set wb = Workbooks("Book1.xlsx")

    '■長い記載をしなくても、省略形で記載が出来るようになった
    wb.Save
    wb.Close

注意点

ワークブック変数に入れるときには必ず「Set」を記載しましょう。
WorkBook変数はオブジェクト型の変数なのでSetがないとエラーが出ます。

オブジェクト変数とは?

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

 

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

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

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

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

その他

ワークシートも同様に変数に格納して省略形で記載をしましょう。
マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する
基本的にはCellsやRangeで値を代入する場合はWorkbookやWorkSheetは指定するようにしましょう。
指定する事でコードは長くなりますが、可読性が上がります。

コメント

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