オブジェクト型変数
複数のブックやワークシートが開いているときに対象セルを取り扱う場合、必ずセルの前にブック名とワークシート名を付けなければ、どのブックのどのワークシートを選択しているかがわかりません。そのため、以下のように書かなければなりません。
例: WorkBooks(“ブック名”).WorkSheets(“シート名”).Cells(行番号,列番号)
または
WorkBooks(“ブック名”).WorkSheets(“シート名”).Range(セル番地)
これでは1行のプログラムが長くなり、入力の労力が多くなるばかりか、入力ミスが起きやすくなります。そのため、オブジェクト型変数を使うことによってプログラムを見やすくします。
オブジェクト型変数とは、ワークブック、ワークシート、セルなど、操作対象になるオブジェクトを扱う場合に容易にしたものです。
Setステートメント
一般的に変数には、数値・文字列・論理値・配列・オブジェクトなどに値を代入できます。変数に値を代入するには「 = 」(イコール記号)を使いますが、オブジェクトを入れるオブジェクト型変数では
Set 変数名 = 値
のようにSetを前に付けなければなりません。
【書式】
Set 変数名 = オブジェクト名
では、書いてみましょう。
Worksheets("Sheet1").Range("A1")と必要なところに何度も書かなくてはなりませんが
Set Ws = Worksheets("Sheet1")
として、その後は
Ws.Range("A1")
と短く書くことができるので便利です。
言うまでもありませんが、定数に定数名、変数に変数名、オブジェクトにオブジェクト名を付けます。もちろん、オブジェクト変数も変数と同じように使う前にDimで宣言しておかなければいけません。
データ型は、ワークシートではWorkSheet、ワークブックではWorkBook、セルはRangeです。
(注) オブジェクト定義だけはSetが必須です。
【使用例】
- Dim Wb as WorkBook
- Dim Ws as WorkSheet
- Workbooks.Open (ThisWorkbook.Path & "\Book1.xlsx")
- Set Wb = Workbooks(“Book1.xlsx”)
- Set Ws = Worksheets("Sheet1")
必要がなくなったらオブジェクト変数を解放しておきましょう。メモリーを解放してリソースを有効活用するためです。
【使用例】
- Set Ws = Nothing
【練習問題4】
Setステートメントを使ってサンプルデータbooks-list.xlsx「図書目録」を開いて「MsgBox関数」を使って、ワークシート「図書」のセルA1の内容を表示して閉じてみましょう。
尚、その際、Closeメソッドもオブジェクト変数を使いましょう。練習問題3よりプログラムが見やすくなったでしょう。
セルを参照するのが今回は1カ所でしたが、実務では複数回、多い時には十数回と出てきますので、Setステートメントを使って見やすくしましょう。
【解答例】
- Sub 練習問題4() 'Setステートメントを使ったセルの指定
- Dim Wb As Workbook
- Dim Ws As Worksheet
- Dim str As String
- Workbooks.Open (ThisWorkbook.Path & "\books-list.xlsx"), ReadOnly:=True
- Set Wb = Workbooks("books-list.xlsx")
- Set Ws = Wb.Worksheets("図書")
- str = Ws.Range("A1").Text
- MsgBox str
- Wb.Close
- set Wb = Nothing
- set Ws = Nothing
- End Sub