2.オブジェクトとプロパティ/メソッド

2-1.VBAの基本文法

VBAのコードの基本文法は、”オブジェクト.プロパティ/メソッド” です。
オブジェクトが処理対象、プロパティ/メソッドが処理内容であり、処理対象を指定してから処理内容を記述する文法になっています。

2-2.オブジェクトについて

オブジェクトには、ブックやシート、セルなどがあり、VBAではそれぞれのオブジェクトを識別する固有のコードが設定されています。

処理対象コード
アプリケーションApplication
ブックWorkbook(s)
シートWorksheet(s)
セルRange
図 オブジェクトの例

オブジェクトは階層構造となっており、適切な処理対象を指定するために、適切な階層を指定する必要があります。

例えば、特定のブックの特定のシートのA1セルを処理対象とする場合は、
Workbooks(“ブック名”) .Worksheets(“シート名”) .Range(“A1”) というように、
処理したいブック.処理したいシート.処理したいセル の形でコードを記述する必要があります。

なお、ブックやシートは省略できますが、その場合は、アクティブなブック、アクティブなシートが処理対象となります。

図 オブジェクトの階層構造(例)

<オブジェクトの指定>
オブジェクトを指定する方法はいくつかありますが、
代表的なのは名前での指定か、インデックスでの指定です。

名前での指定は、Workbooks(“ブック名”)やWorksheets(“シート名”)の形です。
インデックスでの指定は、Workbooks(1)やWorksheets(1)のように、数字で指定します。

ブックのインデックスは、開いた順(最初に開いたファイルが1番)、
シートのインデックスは、シートの並び順で左から1番2番…となります。

<コレクション>
コレクションとは、同一のオブジェクトの集合体のことです。
例えば、Workbookオブジェクトの集合がWorkbooksコレクション
    Worksheetオブジェクトの集合がWorksheetsコレクションです。

特定のブックやシートを対象に処理する場合は、1つのオブジェクトを指定して処理しますが、
ブック全体やシート全体に処理する場合は、コレクションを指定して処理します。

例えば、シート全体の数(シート枚数)を数えるときは、
 Worksheets.count という風に、処理対象にシートコレクションを指定します。

図 Workbooksコレクションのイメージ
図 Worksheetsコレクションのイメージ

2-3.プロパティとメソッド

プロパティとメソッドは、オブジェクトに対する処理内容のことです。
プロパティは、オブジェクトの属性に関する処理
メソッドは、オブジェクトの動作に関する処理 という違いがあります。

<プロパティ>
プロパティは、オブジェクトの属性情報の取得または設定ができます。
例えば、セルオブジェクトのプロパティ Valueの場合、
 Range(“A1”).Value でA1セルの値を取得
 Range(“A1”).Value = ”A1” でA1セルの値を”A1”にする(設定) という形になります。
 なお、設定の場合は、= で記述します。

<メソッド>
メソッドは、オブジェクトの動作を指定できます。
例えば、セルオブジェクトのメソッド Selectの場合は、
 Range(“A1”).Select でA1セルを選択します

<メソッドの引数>
メソッドの場合は、引数を指定することで動作の条件等を設定することができます。
引数を設定する場合は、:= で記述します。
 Range(“A1”).Delete Shift:=xlShiftUp では、A1セルを削除しますが、
 引数 Shift に xlShiftUp を指定することで、削除後にセル位置を上に削除するようにしています。

<引数の記述>
引数を記述する際、通常はメソッドと引数の間に半角スペースを入力しますが、
1つの文(ステートメント)でメソッドを複数記述する場合や、Withステートメントを使用する場合などにおいて、メソッド(引数)の形式で記述する場合があります。

以下のコード例では、①、②-1、②-2はすべて同じ処理結果となりますが、引数の記述が異なっています。

Sub 引数の記述()
    'シートを追加+シート名の設定
    '①半角スペースでの記述
    Worksheets.Add Before:=Worksheets(1) '1枚目にシートを追加
    Worksheets(1).Name = "Sheet1" ' 上記で追加した1枚目のシートの名前を変更
    
    'メソッド(引数)の形式で記述
  '②-1 1つの文で記述
    Worksheets.Add(Before:=Worksheets(1)).Name = "Sheet1"
    '②-2Withステートメントを使用した記述
    With Worksheets.Add(Before:=Worksheets(1))
        .Name = "Sheet1"
    End With
    
End Sub

プロパティとメソッドの違いは、普段あまり意識する必要はないと思います。
ただし、=か:=なのかややこしいので、プロパティの設定は”=”、メソッドなど引数の設定は”:=”と区別すると間違いにくいと思います。

コメント