こんにちは。ECF Tech担当
Michiharu.Tです。
Excel VBA入門の第3回です。
今回はオブジェクトの色々な指定方法を学びたいと思います。特にセルの指定をモノにできるような内容にしたいと思っています。どうぞよろしくお願いします。
本連載の目次は下記よりご覧頂けます。
ワークシートを指定する
まずはワークシートの指定についてです。第2回までは、Excelのワークシートが1つの前提でExcelマクロを記述してきました。
今回からは、次の手順でもう1枚のシートを追加した状態でExcelマクロの動作を行います。
アクティブシート
では、ここからExcelマクロを書いてみましょう。標準モジュールを必要に応じて追加し、次のようにExcelマクロを書きます。
Sub マクロ1() Range("A1").Value = "こんにちは" End Sub
シンプルにA1に値を設定するマクロです。このマクロを実行すると2つのワークシートのどちらに「こんにちは」が設定されるのでしょうか。
正解は、現在操作対象になっているワークシートです。これを「アクティブシート」と言います。下図のようにSheet1が選択されている状態で上のマクロを実行すると、「Sheet1」のA1セルに「こんにちは」が設定されます。
ワークシートを指定する
それではここで、ワークシートを指定してセルを操作する方法をご紹介します。次のようなExcelマクロを作成します。
Sub マクロ2() Worksheets("Sheet2").Range("A2").Value = "Hello!" End Sub
Worksheets("Sheet2")
の部分がSheet2のワークシートを指定する部分です。Worksheets("シート名")
と書くことでワークシートを指定できます。実行するとSheet2のA2セルに「Hello!」が設定されます。アクティブシートがどちらであるかに関わらず、必ずSheet2のセルに値が設定されます。
オブジェクトをドットでつなげる
マクロ2で示したプログラムにおいてWorksheets("Sheet2")
やRange("A2")
はオブジェクトです。オブジェクトは.
(ドット)でつなげていくことができます。ドットは「の」と読むと良いでしょう。下図のようにSheet2
の A2セル
の Value
といった感じです。
様々なセル指定
ここから様々なセル指定の方法についてご紹介します。プログラムの見やすさを考慮し、ワークシートの指定は省略しています(アクティブシートに値が設定されます)。
Rangeによる範囲指定
次のように記述することで、セル範囲に対してまとめて操作ができます。
Sub マクロ3() Range("A1:B3").Value = "りんご" End Sub
プログラムを実行すると、A1~B3の範囲に「りんご」が設定されます(下図)。
Cellsによるセル指定
Range以外で、セルを指定する代表的な方法の1つに「Cells」を使う方法があります。プログラム例を示します。
Sub マクロ4() Cells(2, 2).Value = "みかん" End Sub
Cellsを使ってセルを指定する際は、Cells(行番号,列番号)
のようにします。それぞれ1
から始まります。上のマクロではCells(2, 2)
としているため、B2に値が設定されます(下図)。
値が入っている範囲を指定
CurrentRegion
を使用すると、値が入っている連続範囲(途中空白で途切れない範囲)を指定することができます。
Sub マクロ5() Range("A1").CurrentRegion.Value = "バナナ" End Sub
このマクロを下図左のようなシートの状態で実行すると、下図右のようにA1から値がつながっている範囲だけを対象に値を設定することができます。
複数のセルを指定
連続していない複数のセルを指定する例です。A1 と C3 のセルに「ぶどう」を設定しています。
Sub マクロ6() Range("A1,C3").Value = "ぶどう" End Sub
,
(カンマ)を使っている点がポイントです。カンマは複数の値を指定するために使うもの。と理解しておきましょう。ドットは「の」、カンマは「と」と読み替えると良いでしょう(下図)。
アクティブセルを指定
アクティブセルとは、下図のように現在選択されているセルのことです。
アクティブセルを指定して、値を設定する場合はActiveCell
の記述を使用し、次のようにします。
Sub マクロ7() ActiveCell.Value = "メロン" End Sub
実行すると、現在選択されているセルに値を設定できます(下図)。
行指定
1行まるごと指定するような操作につかえる行指定のプログラムをご紹介します。行削除や行追加に役立ちます。
次のプログラムはワークシートの先頭に行を追加します。
Sub マクロ8() Range("A1").EntireRow.Insert End Sub
EntireRow
は行全体を表すプロパティです。Range("A1").EntireRow
とすることで1行目全体を表すことができます。Insert
はセル範囲を追加するメソッドです。
実行すると下図のように、先頭に1行追加されます。
列指定
行指定と同様に列指定も行うことができます。次のプログラムはC列に新たな列を追加します。
Sub マクロ9() Range("C1").EntireColumn.Insert End Sub
EntireColumn
は行全体を表すプロパティです。Range("C1").EntireColumn
とすることでC列全体を表すことができます。
実行すると下図のように、C列に1列追加されます。
Withステートメントで操作をまとめる
本章の最後に、Withステートメントを使用してワークシートへの操作をまとめる方法をご紹介します。
ステートメントは日本語訳すると「文」です。Excel VBAにおけるステートメントとは、特定の処理をする命令文のことです。Withステートメントは次のような文法で、特定のオブジェクトに対する複数の操作をまとめて書くことができます。
With オブジェクト 'この部分にオブジェクトに対する様々な操作を書いていく End With
実際のプログラムでイメージをつかみましょう。
Sub マクロ10() With Worksheets("Sheet1") .Range("A1") = "リンゴ" .Range("B3") = "みかん" .Range("E1:E3") = "バナナ" End With End Sub
このプログラムは、下図のように見ると良いでしょう。
With Worksheets("Sheet1")
~End With
の間に、ワークシートSheet1
に対する操作を書いていくという意味です。Sheet1
に対する操作としては、実際に次の3つを行っています。
- A1セルに「リンゴ」を設定
- B3セルに「みかん」を設定
- E1~E3セルに「バナナ」を設定
赤枠で囲まれた3行の先頭にそれぞれ.
がついている点ですが、通常なら下図左のように毎回Worksheets("Sheet1")
と書かなければいけない部分が、Withステートメントによって省略できた(下図右)。と考えると良いでしょう。
したがって、空のワークシートに対してこのマクロを実行した結果は下のようになります。
このようにWithステートメントを使うと、プログラムをより簡略的に書くことができます。
というわけで本日はここまでとさせて頂きたいと思います。最後までお読み頂き、ありがとうございました。次回も様々なプログラムをご紹介したいと思います。ひきつづき、よろしくお願いいたします。