Excel VBA入門 | オブジェクト式とプロパティ、メソッド

Excel VBA入門

更新日:2018年1月8日 公開日:2017年12月29日

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

ここでは基本構文の1つであるオブジェクト式について解説します。

1.オブジェクト式とは

オブジェクト式とは、オブジェクトを操作する場合に使用する、Excel VBAの基本構文の1つです。

オブジェクトとは、Excel VBAで、様子や状態を表す対象、又は操作する対象のことをいいます。代表的なオブジェクトは、ブック、ワークシート、セルなどです。

2.基本形

大きく分けると次の2つに分類されます。

(1) オブジェクト.プロパティ = 値
(2) オブジェクト.メソッド 引数 := 値

これらの式は基本形であり、基本形から派生した式も複数存在します。

(1)の式では、左辺の「オブジェクト.プロパティ」に右辺の「値」を代入します。

(2)の式では、「オブジェクト.メソッド」の操作をします。引数 : = 値は、「オブジェクト.メソッド」の操作をする場合のオプション設定になります。

【補足】オブジェクト式の派生形

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

上述の2つの基本形に対する派生形は次の通りです。

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

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

詳細は各ページをご参照ください。

3.プロパティ

プロパティとは、オブジェクトの様子や状態のことをいいます。代表的なプロパティとして、WorksheetオブジェクトのNameプロパティがあります。

設定できるプロパティの種類はオブジェクト毎に異なります。

4.メソッド

メソッドとは、オブジェクトを操作するために使用する命令のことをいいます。代表的なメソッドとして、RangeオブジェクトのDeleteメソッドがあります。

設定できるメソッドの種類はオブジェクト毎に異なります。

5.引数

引数(ひきすう)とは、メソッドを使用する場合にオプションとして指定できるものをいいます。

引数は、パラメータとも呼ばれます。

設定できる引数はメソッド毎に異なります。また、省略可能である引数もあれば、必須の引数もあります。さらに省略した場合には既定値が動作するような引数も存在します。

引数は複数設定することも可能です。例えば、3種類の引数を設定する場合には基本形は「オブジェクト.メソッド 引数1 := 値1 , 引数2 := 値2 , 引数3 := 値3」と、各引数の間はカンマ(,)で区切ります。この基本形であれば、複数設定の場合のコードを書く順番は自由です。しかし、基本形でない書き方をすると決まった順番通りに記述しないといけません(後述の「補足」を参照)。

6.使用例

次の例では、新規ブックのワークシート名を変更します。またセルA2を削除し、影響を受けるセルを左方向にシフトします。

【VBA実行前】

Excel VBA オブジェクト式 Excel VBA オブジェクト式

【プログラム】

Sub ワークシート名の変更とセルA2の削除して左方向にシフト()

Worksheets(1).Name = "サンプル"           '(1)
Range("A2").Delete Shift:=xlShiftToLeft   '(2)

End Sub

【VBA実行後】

Excel VBA オブジェクト式 Excel VBA オブジェクト式

【解説】

(1)Worksheets(1).Name = "サンプル"
WorksheetオブジェクトNameプロパティを使用して、1番目のワークシート名に「サンプル」と名付けています。

基本形「オブジェクト.プロパティ = 値」の典型例になります。

新規ブックを開いた場合には最初のワークシートには「Sheet1」と名付けられています。それをこのプログラムによって「サンプル」に変更しています。

WorksheetオブジェクトのNameプロパティは、ワークシートの名前を表します。

Worksheets(1)は、Worksheet(i)で、iにはワークシートの番号を入れます。今回は1番目のワークシートであるので、iに1を代入しています。

以上から、「Worksheets(1).Name = "サンプル"」とは、1番目のワークシート(「Sheet1」)の名前に「サンプル」を代入するコード、ということです。

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

基本形「オブジェクト.メソッド 引数 := 値」の典型例になります。

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

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

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

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

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

【補足1】引数の設定方法について

「引数 := 値」という書き方ではなく、引数を省略した書き方でも引数を設定することができます。

今回の例では、次の通り(2)のコードを書き換えても同じく動作します

Worksheets("サンプル").Copy , Worksheets("サンプル") '(2)

このようにカンマ(,)を使用してコーディングします。

書き方のルールですが、引数はメソッド毎に順番が決まっています。今回のWorksheetオブジェクトのCopyメソッドであれば、「Before , After」という順番であり、最初にBeforeを、2番目にAfterを設定します。すなわち、

Worksheets("サンプル").Copy ( Beforeの設定 ) , ( Afterの設定 )

ということです。

CopyメソッドのBeforeは省略可能であり、今回の例ではAfterを使用するため、( Beforeの設定 )は削除します。従って、

Worksheets("サンプル").Copy , ( Afterの設定 )

となり、( Afterの設定 )はWorksheets("サンプル")を設定することから

Worksheets("サンプル").Copy , Worksheets("サンプル")

となります。

もし、「サンプル」の前にコピーを持ってきたい場合には、次の通りになります。

Worksheets("サンプル").Copy Worksheets("サンプル")

この場合には、2番目の引数であるAfterは使用しないため、カンマ(,)は付しません。

なお、「引数 := 」の部分を省略する場合には、引数の順番通りにコーディングしないといけませんが、「引数 :=」部分をきっちりと記述するのであれば、上述「5.引数」で解説した通り、順番通りにコーディングする必要はありません。

【補足2】オブジェクト、プロパティ、メソッド、引数の調べ方

Microsoftのサイトである「Excel VBAリファレンス」で調べることができます。検索欄やサイドメニューの「オブジェクトモデル」から検索します。