Excel VBA入門 | 基本形「オブジェクト.プロパティ = 値」の派生形(その3)

Excel VBA入門

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

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

ここではオブジェクト式のうち、「オブジェクト.プロパティ = 値」の派生形について解説します。

※オブジェクト式や基本形「オブジェクト.プロパティ = 値」については「Excel VBA入門 | オブジェクト式とプロパティ、メソッド」をご参照ください。

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

1.「オブジェクト.プロパティ = 値」の派生形

「オブジェクト.プロパティ = 値」の派生形には、次の式があります。

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

【補足】もう一つのオブジェクト式(基本形)である、「オブジェクト.メソッド 引数 := 値」の派生形には、次の式があります。ご参考ください。

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

2.【派生形1-3】 オブジェクト.プロパティ1.プロパティ2 ・・・ .プロパティN = 値

Nは数字を表します。この派生形は、オブジェクトのプロパティを複数設定するケースです。

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

3.使用例

次の例では、ワークシート上のA1セルを起点として、A2からD7までの範囲セルに「サンプル」と入力します。

【VBA実行前】

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

【プログラム】

Sub セルA1を起点としてセルA2からセルD7までの範囲に値を代入する()

Range("A1").Offset(1, 0).Resize(6, 4).Value = "サンプル"  '(1)

End Sub

【VBA実行後】

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

【解説】

(1)Range("A1").Offset(1, 0).Resize(6, 4).Value = "サンプル"
→RangeオブジェクトのOffsetプロパティResizeプロパティ、Valueプロパティを使用して、セルA1を起点として、A2からD7までの範囲セルに「サンプル」と入力します。

派生形「オブジェクト. ( プロパティ1.プロパティ2 ・・・ .プロパティN ) = 値」の典型例になります。

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

プロパティはOffset、Resize、Valueの3種類のプロパティを使用しています。もちろん全てRangeオブジェクトに属するプロパティになります。

Offsetプロパティは、基準となるセルから行方向と列方向に移動したセルを表すプロパティです。Offset(r, c)の形で使用します。rで行方向、cで列方向を設定します。

今回の使用例では、Range("A1").Offset(1, 0)とコーディングしています。これでセルA2を表しています。

簡単に説明すると、基準セルがセルA1、Offset(1, 0)で行方向に1つ下に、列方向に0右に移動したセルを表します。すなわちA2セルになります。

次のResizeプロパティは、セル範囲を設定します。Resize(r, c)の形で使用します。rで行方向、cで列方向を設定します。

今回の使用例では、Range("A1").Offset(1, 0).Resize(6, 4)とコーディングしていますが、Range("A1").Offset(1, 0)はセルA2のことであると説明しました。従ってこのコードは、Range("A2").Resize(6, 4)と同じことを表しています。これでA2からD7までの範囲のセルを表します。

Resize(6, 4)は、基準セルを行方向の下に5つ、列方向の右に3つ広げた範囲を表します。(6, 4)となっているのは、基準セル自身を含めて設定するからです(Offsetプロパティと同じr、cという記号を使用して説明していますが、この点はOffsetプロパティと異なる点です。詳細な説明は割愛します)。

セルA2から下方向に5つ広げるので、A2の2は、2から7までに広がります。また、右方向に3つ広げるので、A2のAは、AからDまでに広がります。従って、A2からD7までの範囲を表すことになります。

Valueプロパティは、。Rangeオブジェクトで表されたセルの値を表しますが、今回は前に2つのプロパティが設定されているため、「Range("A1").Offset(1, 0).Resize(6, 4)」を一つのRangeオブジェクトとして考えます。すなわち「A2からD2までの範囲セルの値」を表します。

以上をまとめると、「Range("A1").Offset(1, 0).Resize(6, 4).Value = "サンプル"」は、左辺の「Range("A1").Offset(1, 0).Resize(6, 4).Value(A2からD7までの範囲のセル)」に右辺の「サンプル」という値を代入する、ということです。