Excel VBA入門 | 基本形「オブジェクト.メソッド 引数 := 値」の派生形(その2)

Excel VBA入門

更新日:2018年1月7日 公開日:2018年1月6日

Excel VBAを学ぶ上で、文法の基本を学ぶことは言うまでもなく重要です。

ここではオブジェクト式のうち、「オブジェクト.メソッド 引数 := 値」の派生形について解説します。

※オブジェクト式や基本形「オブジェクト.メソッド 引数 := 値」については「Excel VBA入門 | オブジェクト式とプロパティ、メソッド」をご参照ください。引数の設定方法などについても解説しています。

【注意事項】オブジェクト式の派生形について
サイト管理者の実務経験から帰納的に派生形としてまとめています。従って当サイト独自の考え方に基づくものです。また実務経験に基づくものであるため、不定期に更新する可能性があります。この点をご理解頂いたうえでお読みください。

1.「オブジェクト.メソッド 引数 := 値」の派生形

「オブジェクト.メソッド 引数 := 値」の派生形には、次の式があります。

【派生形2-1】 オブジェクト.メソッド 引数1 := 値1 , 引数2 := 値2 ・・・ , 引数N := 値N
今回解説→【派生形2-2】 オブジェクト1.オブジェクト2 ・・・ .オブジェクトN .メソッド 引数 := 値
【派生形2-3】 オブジェクト.メソッド 引数 := オブジェクト

【補足】もう一つのオブジェクト式(基本形)である、「オブジェクト.プロパティ = 値」の派生形には、次の式があります。ご参考ください。

【派生形1-1】 オブジェクト1.プロパティ1 = オブジェクト2.プロパティ2
【派生形1-2】 オブジェクト1.オブジェクト2・・・.オブジェクトN.プロパティ = 値
【派生形1-3】 オブジェクト.プロパティ1.プロパティ2 ・・・ .プロパティN = 値
【派生形1-4】 オブジェクト.プロパティ = 関数( 引数1,引数2,・・・引数N )

2.【派生形2-2】 オブジェクト1.オブジェクト2 ・・・ .オブジェクトN .メソッド 引数 := 値

Nは数字を表します。

この派生形はオブジェクトを複数設定するケースです。

この派生形で使用される代表的なオブジェクトとして、ActiveSheetオブジェクトとRangeオブジェクトが存在します。

3.使用例

次の例では、ワークシート上のA2セルの値を削除して削除後の他のセルは左にシフトします。

【VBA実行前】

Excel VBA オブジェクト式の派生形

【プログラム】

Sub セルA2の値を削除して左方向にシフトする()

Activesheet.Range("A2").Delete Shift:=xlShiftToLeft   '(1)

End Sub

【VBA実行後】

Excel VBA オブジェクト式の派生形

【解説】

(1)Activesheet.Range("A2").Delete Shift:=xlShiftToLeft '(1)
→RangeオブジェクトのDeleteメソッドを使用して、A2セルの値を削除します。削除の影響を受けたセルは左方向にシフトします。ActiveSheetオブジェクトはRangeオブジェクトの上位オブジェクト(ワークシートを表すオブジェクト)です。

派生形「オブジェクト1.オブジェクト2 ・・・ .オブジェクトN .メソッド 引数 := 値」の典型例になります。

Rangeオブジェクトは、「Range("セル")」でワークシート上のセルを表します。「"セル"」の部分には「"A2"」のように、「"(ダブルクォーテーション)」でセル記号を囲みます。

DeleteメソッドはRangeオブジェクトで指定したセルを削除します。

セルを削除するということはセル自体の存在をなくす、ということです。従って、セルA2を削除した後、セルA2は何も存在しない状態になるので、削除の影響を受けるセル(ここでは、2行目のB列以降の全てのセル。又はA列の3行目以降の全てのセル)が何もないA2セルを埋めるようにシフトします。

シフトの方法は上にシフトする方法と左にシフトする方法がありますが、今回の使用例では左にシフトする方法にしました。

左方向へのシフトを設定する場合には、Deleteメソッドの引数Shiftで、「Shift:=xlShiftToLeft」とします。これで、2行目のB列以降の全てのセルが左にシフトします。上述の使用例を見れば、VBA実行前には「サンプル」と入力されていたのはセルC2でしたが、VBA実行後にB2に移動していることが分かります。

ActiveSheetオブジェクトは、現在開いているワークシートを表す、Rangeオブジェクトの上位に位置するオブジェクトです。

例えば、複数のワークシートのセルに値を入力する場合には、「Range("A2").Value = "サンプル"」だけでは、VBAは「どのワークシートのセルなのか」を理解することができません。

従って、「ActiveSheet.」「Worksheet("Sheet1").」といったようにワークシートを表すオブジェクトを追加で記述しておく必要があります。

さらに、複数のExcelブックを操作するようなVBAコードを記述する場合には、ブックを表すオブジェクトも追加する必要があり、3種類のオブジェクトを記述しなければいけません。

その他、引数のコーディング(記述)ですが、「引数 := 」の部分は省略して記述することも可能です。その他引数に関するコーディングについては、「Excel VBA入門 | オブジェクト式とプロパティ、メソッド」をご参照ください。