EXCEL VBA オブジェクト変数の利用方法(Setステートメント WorkSheet WorkBook Range)
EXCEL VBA オブジェクト変数の利用方法(Setステートメント)
【オブジェクト変数の利用方法】
Dim オブジェクト変数名 As オブジェクト型名
Set オブジェクト変数名 = オブジェクト
Setステートメントを利用する際は、まずDimオブジェクトで変数を宣言する必要があります。その後、Setオブジェクトをセットします。
種類 | オブジェクト名 | 使用例 | 説明 |
---|---|---|---|
アプリケーション | Application | Dim MyApp As Application Set MyApp = Excel.Application | EXCELアプリケーションをセットする。 |
ワークブック | WorkBook | Dim MyBook As WorkBook Set MyBook = Workbooks("Test.xlsm") | ワークブックをセットする(ファイル名) |
ワークシート | WorkSheet | Dim MySheet As WorkSheet Set MySheet = Worksheets("テスト") | ワークシートをセットします。(シート名) |
セル | Range | Dim MyRange As Range Set MyRange = Range(A1:E10) | セル範囲をセットします。 |
オブジェクト | Object | Dim MyObj As Object Set MyObj = YourObj | オブジェクトをセットします。 |
ワークシート名(WorkSheet)をオブジェクト変数にセット
下記のサンプルプログラムは、WorkSheetオブジェクトを変数にセットするサンプルプログラムになります。WorkSheet(ワークシート名)を事前に登録していると、シート間でのセル操作を行う場合に、とても便利です。それでは、順番に説明いたします。
【事前準備】
シートに「東京支店」・「大阪支店」・「名古屋支店」を登録します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Worksheets01() Dim ws01, ws02, ws03 As Worksheet '変数を宣言します。ws01 ws02 ws03 Set ws01 = Worksheets("東京支店") 'ワークシート(東京支店)を⇒ ws01にセット(格納)します。 Set ws02 = Worksheets("大阪支店") 'ワークシート(大阪支店)を⇒ ws02にセット(格納)します。 Set ws03 = Worksheets("名古屋支店") 'ワークシート(名古屋支店)を⇒ ws03にセット(格納)します。 ws01.Activate 'ワークシート「東京支店」に切り替える ws01.Range("A1") = "東京支店データ" 'ワークシート(東京支店)のセルA1に「東京支店データ」を代入します。 ws02.Activate 'ワークシート「大阪支店」に切り替える ws02.Range("A1") = "大阪支店データ" 'ワークシート(大阪支店)のセルA1に「大阪支店データ」を代入します。 ws03.Activate 'ワークシート「名古屋支店」に切り替える ws03.Range("A1") = "名古屋支店データ" 'ワークシート(名古屋支店)のセルA1に「名古屋支店データ」を代入します。 End Sub |
(画面クリックして拡大)
ワークシート名(WorkSheet)+セル範囲(Range)をオブジェクト変数にセット
下記のサンプルプログラムは、WorkSheetオブジェクトとRangeオブジェクトを変数にセットした利用方法のサンプルプログラムになります。上記のサンプルプログラム①は、WorkSheet(ワークシート名)を登録した利用方法でしたが、今回は、そのワークシートとセル範囲を変数として登録して利用する方法の説明になります。セル範囲を事前にセットする事で、繰り返し同一セル範囲を指定する時は、とても便利です。それでは、順番に説明いたします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Worksheets02() Dim ws01, ws02, ws03 As Worksheet '変数を宣言します。ws01 ws02 ws03 Dim SetRange As Range '変数を宣言します。 Set ws01 = Worksheets("東京支店") 'ワークシート(東京支店)を⇒ ws01にセット(格納)します。 Set ws02 = Worksheets("大阪支店") 'ワークシート(大阪支店)を⇒ ws02にセット(格納)します。 Set ws03 = Worksheets("名古屋支店") 'ワークシート(名古屋支店)を⇒ ws03にセット(格納)します。 Set SetRange = ws01.Range("A1:D5") 'ワークシート(東京支店)のセル範囲(A1~D5)をSetRangeにセット(格納)します。 ws01.Activate 'アクティブシート(東京支店) SetRange = "データ" & ws01.Name '指定したセル範囲に「データ」&「シート名」を表示させる。 Set SetRange = ws02.Range("A1:D5") 'ワークシート(大阪支店)のセル範囲(A1~D5)をSetRangeにセット(格納)します。 ws02.Activate 'アクティブシート(大阪支店) SetRange = "データ" & ws02.Name '指定したセル範囲に「データ」&「シート名」を表示させる。 Set SetRange = ws03.Range("A1:D5") 'ワークシート(名古屋支店)のセル範囲(A1~D5)をSetRangeにセット(格納)します。 ws03.Activate 'アクティブシート(名古屋支店) SetRange = "データ" & ws03.Name '指定したセル範囲に「データ」&「シート名」を表示させる。 End Sub |
変数として設定したオブジェクト変数をクリア(解放・参照クリア)
【オブジェクト変数のクリア方法】
Set オブジェクト変数名 = Nothing
Setステートメントを利用して変数として利用しますが、オブジェクト変数に「Nothing」を代入する事で、変数として設定したオブジェクト変数をクリアーする事が出来ます。
※オブジェクト変数は、メモリーを使用しますので、使用後オフジェクト変数をクリヤーする事により、使用していたメモリーも解放されるので、使い終わったらクリアーした方が動作の効率が良いと言われています。
下記のサンプルプログラムは、「合計」・「今月小計」・「先月小計」と3つのシートをオブジェクト変数にセットして、「今月小計」と「先月小計」のシートデータを「合計」シートに転記して、最後に、3つのシートを変数として設定していたオブジェクト変数をクリア―するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Worksheets04() Dim ws01, ws02, ws03 As Worksheet '変数を宣言します。ws01 ws02 ws03 Dim I As Integer Set ws01 = Worksheets("合計") 'ワークシート(小計)を⇒ ws01にセット(格納)します。 Set ws02 = Worksheets("先月小計") 'ワークシート(先月小計)を⇒ ws02にセット(格納)します。 Set ws03 = Worksheets("今月小計") 'ワークシート(今月小計)を⇒ ws03にセット(格納)します。 For I = 2 To 6 '2行目~6行目まで繰り返す ws01.Cells(I, "B") = ws03.Cells(I, "B") '今月小計⇒合計へデータを代入 ws01.Cells(I, "C") = ws02.Cells(I, "B") '先月小計⇒合計へデータを代入 Next I Set ws01 = Nothing '変数をクリアー(解放)Worksheets("合計") Set ws02 = Nothing '変数をクリアー(解放)Worksheets("先月小計") Set ws03 = Nothing '変数をクリアー(解放)("今月小計") End Sub |
(クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。