VBAを学んでいると、変数と同じくらいよく登場するのが「オブジェクト変数」という考え方です。
通常の変数は「数値」や「文字列」を入れるために使いますが、オブジェクト変数は「シート」や「ブック」「セル範囲」など、Excelの中の“モノ”を一時的に格納しておくための箱です。
うまく使えるようになると、コードがすっきりしてエラーも減り、実務のマクロがグンと扱いやすくなります。
オブジェクト変数の基本と書き方
オブジェクト変数は、次のような流れで使います。
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("集計")
ws.Range("A1").Value = "テスト"
Dim ws As Worksheet
→「wsという変数に、Worksheet型(シート)を入れます」と宣言Set ws = ThisWorkbook.Worksheets("集計")
→「集計シートを、wsという箱に入れます」ws.Range("A1").Value = "テスト"
→「wsというシートのA1セルに、文字を入力」
通常の変数(数値や文字列)と違い、「Set」を使って代入する点がオブジェクト変数の特徴です。
実務での使い方とメリット
オブジェクト変数は、実務マクロの中でとてもよく使われます。次のような場面では特に便利です。
1. 同じシートやセル範囲を何度も使うとき
Dim rng As Range
Set rng = Worksheets("データ").Range("A1:A100")
If WorksheetFunction.CountBlank(rng) > 0 Then
rng.Interior.Color = RGB(255, 255, 0)
End If
対象範囲を1行でまとめられ、処理の繰り返しがスムーズになります。
2. 処理対象を変えやすいようにしたいとき
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("B1").Value = "完了"
シート名を固定せず、どのシートでも動くように書けます。
3. コードの読みやすさ・修正のしやすさを高めるため
長いコードをそのまま何度も書くのは、保守性(メンテナンス)を下げてしまいます。
オブジェクト変数に入れておけば、1カ所変更するだけで複数の処理に反映されるので、ミスも減ります。
まとめ
オブジェクト変数は、「Excelの中のオブジェクト(シート、セル、ブックなど)」を一時的に保持する変数です。
最初は Set の使い方に戸惑うかもしれませんが、実務での効率やコードの保守性を考えると、使わない理由はありません。
- オブジェクト変数は、Excelの“もの”を一時的に格納するための箱
- 宣言は
Dim 変数名 As 型、代入はSet 変数名 = オブジェクト - 何度も使う、読みやすくしたい、保守性を高めたいときに効果的
小さな処理でもオブジェクト変数を使うクセをつけておくと、あとで複雑な処理を書いたときにとても助かります。まずは ws や rng など、簡単なシート・範囲の変数から取り入れてみましょう。
