Categories: VBA基礎

EXCEL VBA オブジェクト変数の利用方法(Setステートメント WorkSheet WorkBook Range)

 

EXCEL VBA オブジェクト変数の利用方法(Setステートメント)

 

 

●はじめに
EXCELのセル範囲やシート・ブック・オブジェクトなどを変数に格納する事ができます。その時に使用するのが、Setステートメントです。Setステートメントを利用する事により、ある範囲のセルをセットする事で、何度もセル範囲を指定することなく使用する事ができます。シートも事前にSetステートメントを利用する事で、シート間のデータ移行などのプログラム記述が容易になります。

 

 

●書式の説明 【Setステートメント】

【オブジェクト変数の利用方法】

Dim オブジェクト変数名 As オブジェクト型名
Set オブジェクト変数名 = オブジェクト

Setステートメントを利用する際は、まずDimオブジェクトで変数を宣言する必要があります。その後、Setオブジェクトをセットします。

 

 

種類オブジェクト名使用例説明
アプリケーションApplicationDim MyApp As Application
Set MyApp = Excel.Application
EXCELアプリケーションをセットする。
ワークブックWorkBookDim MyBook As WorkBook
Set MyBook = Workbooks("Test.xlsm")
ワークブックをセットする(ファイル名)
ワークシートWorkSheetDim MySheet As WorkSheet
Set MySheet = Worksheets("テスト")
ワークシートをセットします。(シート名)
セルRangeDim MyRange As Range
Set MyRange = Range(A1:E10)
セル範囲をセットします。
オブジェクトObjectDim MyObj As Object
Set MyObj = YourObj
オブジェクトをセットします。

 

ワークシート名(WorkSheet)をオブジェクト変数にセット

 

●プログラム説明 サンプルプログラム①

下記のサンプルプログラムは、WorkSheetオブジェクトを変数にセットするサンプルプログラムになります。WorkSheet(ワークシート名)を事前に登録していると、シート間でのセル操作を行う場合に、とても便利です。それでは、順番に説明いたします。

【事前準備】
シートに「東京支店」・「大阪支店」・「名古屋支店」を登録します。

 

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

 

●実行前~実行後 ※プログラム実行後、「東京支店」・「大阪支店」・「名古屋支店」各シートのセルA1に「●●支店データ」と各シートに文字か入力されました。
(画面クリックして拡大)

 

 

ワークシート名(WorkSheet)+セル範囲(Range)をオブジェクト変数にセット

 

 

●プログラム説明 サンプルプログラム②

下記のサンプルプログラムは、WorkSheetオブジェクトとRangeオブジェクトを変数にセットした利用方法のサンプルプログラムになります。上記のサンプルプログラム①は、WorkSheet(ワークシート名)を登録した利用方法でしたが、今回は、そのワークシートとセル範囲を変数として登録して利用する方法の説明になります。セル範囲を事前にセットする事で、繰り返し同一セル範囲を指定する時は、とても便利です。それでは、順番に説明いたします。

【事前準備】
シートに「東京支店」・「大阪支店」・「名古屋支店」を登録します。(今回も同じシートを利用します。)

 

 

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ステートメント】変数のクリア・解放

【オブジェクト変数のクリア方法】

Set オブジェクト変数名 = Nothing

Setステートメントを利用して変数として利用しますが、オブジェクト変数に「Nothing」を代入する事で、変数として設定したオブジェクト変数をクリアーする事が出来ます。

※オブジェクト変数は、メモリーを使用しますので、使用後オフジェクト変数をクリヤーする事により、使用していたメモリーも解放されるので、使い終わったらクリアーした方が動作の効率が良いと言われています。

 

●プログラム説明 サンプルプログラム③

下記のサンプルプログラムは、「合計」・「今月小計」・「先月小計」と3つのシートをオブジェクト変数にセットして、「今月小計」と「先月小計」のシートデータを「合計」シートに転記して、最後に、3つのシートを変数として設定していたオブジェクト変数をクリア―するプログラムです。

 

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に関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA