エクセルの関数・マクロ・VBAが無料で分かる。
HOMEエクセル VBA > VBAの構成

VBAの概要

VBAでは、オブジェクト、プロパティ、メソッドなどを使用して実行する処理を記述します。したがって、これらの用語を理解することは VBAを使う上で非常に重要になります。Excelでは、ブック、シート、セルなどが捜査対象であり、VBAでは、これらを「オブジェクト」と呼びます。 オブジェクトは、階層構造で管理されており、オブジェクトを指定する時に階層構造を利用します。
ここでは、オブジェクト、プロパティ、メソッド、コレクション、オブジェクトの階層構造などVBAでプログラミングをする上で重要となる構成要素について 説明します。


VBAの基本構文
オブジェクト.プロパティ ⇒ (例) Worksheets(1).Name

オブジェクト.メソッド   ⇒ (例) Range("A1").Delete

オブジェクトとコレクション
オブジェクトとコレクション


オブジェクトの階層構造
オブジェクトの階層構造



VBAの構文

VBAは、オブジェクト、メソッド、プロパティなどを使用してコードを記述します。ここでは、これらの用語とVBAの構文について説明します。


オブジェクト

VBAでは、「何をどうする」とか、「何がどんな状態だ」というような記述の仕方をします。「何が」にあたる部分を「オブジェクト」といい、 Excelで操作対象となるブック、ワークシート、セルなどがVBAで頻繁に使用されるオブジェクトになります。Excelの主な要素と対応するオブジェクト名 の一覧は以下のとおりです。

Excelの主な構成要素 オブジェクト名
アプリケーション Application
ブック Workbook
ワークシート Worksheet
セル Range


プロパティ

「プロパティ」は、オブジェクトの特性(属性)を表します。たとえば、「セルA1の文字のサイズが12ポイント」とか、「1つ目のワークシート名が 『成績一覧表』」というように、オブジェクトがどんな状態なのかを表す時は、プロパティを使用します。プロパティを使用すると、オブジェクトの 状態を取得したり、設定したりすることができます。構文は以下のようになります。


◆基本構文

[取得]  オブジェクトプロパティ

 <例>   Worksheets(1).Name

 <意味>  1つ目のワークシートシート名を取得する



[設定]  オブジェクトプロパティ=

 <例>   Range("A1")Font.Size=14

 <意味>  セルA1文字サイズ14ポイントに設定する



値の設定ができないプロパティもある
プロパティの中には、値の取得だけで、設定ができないものもあります。たとえば、RangeオブジェクトのHeightプロパティは、 セルの高さの取得はできますが、設定はできません。

取得したプロパティの値を利用する
取得したプロパティの値は、下の例のように変数に代入したり、他のプロパティの値に代入したりして利用します。

■変数に代入する例
x = Worksheets(1).Name
変数「x」に1つ目のワークシートのシート名を代入する

■ほかのプロパティの値に代入する例
Range("A1").Value=Worksheets(1).Name
セルA1のValueプロパティに1つ目のワークシートのシート名を代入する



メソッド

「ワークシートを追加する」とか、「セルA1を削除する」というように、オブジェクトがどのような動作をするのかを指示するには、「メソッド」を 使用します。構文は以下のようになります。


◆基本構文

  オブジェクトメソッド

 <例>   Range("A1").Delete

 <意味>  セルA1削除する



■詳細を指定する引数
「ワークシートを3番目のシートの後ろに2枚追加する」というように、メソッドで実行する動作をどのようにするのかという詳細を指定するには、 引数を指定します。引数を指定する時は、メソッドの次に半角1文字空けて、「引数名:=」と記述します。これを「名前付き引数」といいます。 たとえば、Addメソッドでは、指定できる引数が下のように4つあります。指定しない場合は、その引数を省略することができます。


◆引数の指定方法  オブジェクト.メソッド 引数名:=引数1,引数名:=引数2・・・

◆省略できる引数  Add [Before],[After],[Count],[Type]

  ※[]で囲まれた引数は省略することもできる

 <例>   Worksheets.Add Before:=Worksheets(1),Count:=2

 <意味>  ワークシート1つ目のシートの前2枚追加する


■引数名を省略する
引数名は、省略することができます。その場合、引数の区切りのカンマは省略できません。下の例で、1つ目の引数[Before]を省略する場合、 区切りのカンマだけを記述し、2つ目の引数[After]に対応する引数がWorksheets(1)であることが分かるようにします。続けてカンマを記述し、 [Count]に対応する引数を2と指定します。ココまでの指定で終了する場合は、それ以降のカンマは必要ありません。


 <例>   Worksheets.Add,Worksheets(1),2
       ※引数名を省略した場合は、引数の区切りのカンマを入力する

 <意味>  ワークシートを1つ目のシートの後ろに 2枚追加する





コレクション

コレクションとは、オブジェクトの集まりのことをいいます。たとえば、シートにはワークシートやグラフシートがあります。 コレクションは、1つのオブジェクトだけを表すのではなく、同じ種類のオブジェクト全体を参照するオブジェクトになります。 コレクションは、Workbooksとか、Worksheetsのようにオブジェクトを複数形で記述します。


コレクション

コレクション名 参照先
Workbooksコレクション 開いているすべてのブックを参照します。
Sheetsコレクション ブックのすべてのシートを参照します。
Worksheetsコレクション ブックのすべてのワークシートを参照します。Worksheetsコレクションは、ワークシート全体を参照するので、Worksheetsとした場合は、 グラフシートを参照することはできません。
Chartsコレクション ブックのすべてのグラフシートを参照します。


コレクション内の各オブジェクトについて
コレクションに含まれるオブジェクトのことを「メンバ」といいます。たとえば、「Sheet1」は、Worksheetsコレクションのメンバでもあり、 Sheetsコレクションのメンバでもあります。


インデックス番号とは
インデックス番号は、コレクションの要素に付けられる番号のことです。たとえば、シートのインデックス番号は、同じ種類のシートに対して、 シート見出しの左から順番に「1、2、3・・・」と付けられます。


コレクション内の特定のオブジェクトを参照するには
コレクションに含まれるオブジェクトは、コレクション名の後ろの()に、名前または数値を指定して識別することができます。 たとえば、「Graph1」シートのように、Sheetsコレクションにも、Chartsコレクションにも含まれるオブジェクトは、「Sheets("Graph1")」 または「Charts("Graph1")」のように()内にシート名を記述します。 また、()内に数値を指定すると、シートの左から何番目という番号(インデックス番号)で指定できます。たとえば、左ページの ブックの画面で左から4番目、Chartsコレクションの中で左から1番目なので、「Sheets(4)」または「Charts(1)」と記述することができます。


コレクションとプロパティ

コレクション内の1つのオブジェクトであるメンバを参照するには、「Workbooks(1)」とか、「Worksheets("Sheets1")」のように記述します。 ここで使用する「Workbooks」や「Worksheets」は、コレクション名と同じですが、この場合はプロパティになります。WorkbooksプロパティやWorksheets プロパティの後ろの「()」内に引数としてブック名やインデックス番号を指定し、1つのオブジェクトを参照します。


コレクションとプロパティ



プロパティを使用してコレクションやオブジェクトを参照する
コレクション名とコレクションやオブジェクトを参照するプロパティについて注意してください。たとえば、「Worksheets」には、コレクション名と プロパティの2つの意味があります。コードを記述するときは、Worksheetsプロパティを使用してWorksheetsコレクションやWorksheetsオブジェクトを 参照しています。たとえば、「Worksheets.Add」はWorksheetsプロパティを使用してWorksheetsコレクションを参照しています。また、 「Worksheets(1).Delete」はWorksheetsプロパティと引数を使用して、1つ目のWorksheetオブジェクトを参照しています。


オブジェクトの階層構造

VBAで操作の対象となるオブジェクトには、Workbook、Worksheet、Rangeなどがあります。これらのオブジェクトは、階層構造で管理されています。 オブジェクトの階層構造は、オブジェクトモデル図で確認できます。オブジェクトの階層構造を理解することは、オブジェクトを指定する上で重要なことです。 主なオブジェクトの階層構造は、下の図のようになります。オブジェクトモデル図の詳細は、ヘルプで調べることができます。

オブジェクトの階層構造

オブジェクトの最上位は「Application」で、その下に「Workbooks」、「Worksheets」、「Range」と続きます。オブジェクトを参照する時は、 階層構造を利用してそのオブジェクトを指定します。このとき、通常「Application」は省略します。たとえば、「集計」ブックの「1月」シートの セルA1を参照したい時は、下のように記述します。

  Workbooks("集計.xls").Worksheets("1月").Range("A1")

また、上位にある階層を省略し、「Range("A1")」と記述した場合は「現在表示しているブックで表示しているワークシート」が 上位のオブジェクトとみなされます。


親オブジェクトであるコンテナ
オブジェクトは階層構造になっていますが、あるオブジェクトからみて上の階層にあるオブジェクト(親オブジェクト)のことをコンテナといいます。 たとえば、RangeオブジェクトのコンテナはWorksheetオブジェクトであり、WorksheetsオブジェクトのコンテナはWorkbookオブジェクトになります。


オブジェクトモデル図を表示する

オブジェクトモデル図は、VBEのヘルプから表示することができます。なお、ヘルプの利用方法については、「ヘルプを利用するには」で詳しく説明しています。 @[ツール]メニューの[マクロ]−[Visual Basic Editor]をクリック

Visual Basic Editorの起動

VBEが起動しました

A[ヘルプ]をクリック

B[Microsoft Visual Basic ヘルプ]をクリック

C[Microsoft Excel Visual Basicリファレンス]をクリック

D表示された一覧から[Microsoft Office Excelオブジェクトモデル]をクリック


Excel2000、2002でオブジェクトモデル図を表示するには
Excel2000の場合は、VBEの[ヘルプ]メニューの[Microsoft Visual Basicヘルプ]を選択し、[Microsoft Visual Basicのヘルプ]ウィンドウを表示 します。[質問]タブで「Excelオブジェクトの階層構造」と入力し、[検索]ボタンをクリックします。Excel2000の場合は、表示されるトピックの 中から[Excelオブジェクトの階層構造]をクリックします。Excel2002の場合は、表示されるトピックの中から[Microsoft Excelのオブジェクト] をクリックしてください。