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がないとエラーが出ます。
オブジェクト変数とは?
オブジェクトへ参照する形、オブジェクトの位置情報(アドレス)を変数に入れて参照して使います。
なぜアドレスを入れるの?
その他
ワークシートも同様に変数に格納して省略形で記載をしましょう。
マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する
マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する
基本的にはCellsやRangeで値を代入する場合はWorkbookやWorkSheetは指定するようにしましょう。
指定する事でコードは長くなりますが、可読性が上がります。
コメント