【初心者向け】動かして学ぶExcel VBA入門(3)

Excel VBA

こんにちは。ECF Tech担当
Michiharu.Tです。

Excel VBA入門の第3回です。

今回はオブジェクトの色々な指定方法を学びたいと思います。特にセルの指定をモノにできるような内容にしたいと思っています。どうぞよろしくお願いします。

本連載の目次は下記よりご覧頂けます。

【初心者向け】動かして学ぶExcel VBA入門
Excel VBAを動かしながら学べる連載をお送りしています。目次第1回Excel VBAとはExcelマクロを動かしてみようExcelマクロの保存第2回セルに値を設定セルの削除オブジェクト、プロパティ、メソッド第3回ワークシートの指定様々...

ワークシートを指定する

まずはワークシートの指定についてです。第2回までは、Excelのワークシートが1つの前提でExcelマクロを記述してきました。

1ワークシート

今回からは、次の手順でもう1枚のシートを追加した状態でExcelマクロの動作を行います。

シート追加01

シート追加02

アクティブシート

では、ここから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の範囲に「りんご」が設定されます(下図)。

Rangeの範囲指定

Cellsによるセル指定

Range以外で、セルを指定する代表的な方法の1つに「Cells」を使う方法があります。プログラム例を示します。

Sub マクロ4()
    Cells(2, 2).Value = "みかん"
End Sub

Cellsを使ってセルを指定する際は、Cells(行番号,列番号)のようにします。それぞれ1から始まります。上のマクロではCells(2, 2)としているため、B2に値が設定されます(下図)。

Cellsの使用

値が入っている範囲を指定

CurrentRegionを使用すると、値が入っている連続範囲(途中空白で途切れない範囲)を指定することができます。

Sub マクロ5()
    Range("A1").CurrentRegion.Value = "バナナ"
End Sub

このマクロを下図左のようなシートの状態で実行すると、下図右のようにA1から値がつながっている範囲だけを対象に値を設定することができます。

複数のセルを指定

連続していない複数のセルを指定する例です。A1C3 のセルに「ぶどう」を設定しています。

Sub マクロ6()
    Range("A1,C3").Value = "ぶどう"
End Sub

,(カンマ)を使っている点がポイントです。カンマは複数の値を指定するために使うもの。と理解しておきましょう。ドットは「の」、カンマは「と」と読み替えると良いでしょう(下図)。

「の」「と」

アクティブセルを指定

アクティブセルとは、下図のように現在選択されているセルのことです。

アクティブセル

アクティブセルを指定して、値を設定する場合はActiveCellの記述を使用し、次のようにします。

Sub マクロ7()
    ActiveCell.Value = "メロン"
End Sub

実行すると、現在選択されているセルに値を設定できます(下図)。

アクティブセル02

行指定

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ステートメント

With Worksheets("Sheet1")End Withの間に、ワークシートSheet1に対する操作を書いていくという意味です。Sheet1に対する操作としては、実際に次の3つを行っています。

  • A1セルに「リンゴ」を設定
  • B3セルに「みかん」を設定
  • E1~E3セルに「バナナ」を設定

赤枠で囲まれた3行の先頭にそれぞれ.がついている点ですが、通常なら下図左のように毎回Worksheets("Sheet1")と書かなければいけない部分が、Withステートメントによって省略できた(下図右)。と考えると良いでしょう。

Withステートメント02

したがって、空のワークシートに対してこのマクロを実行した結果は下のようになります。

マクロ10結果

このようにWithステートメントを使うと、プログラムをより簡略的に書くことができます。

というわけで本日はここまでとさせて頂きたいと思います。最後までお読み頂き、ありがとうございました。次回も様々なプログラムをご紹介したいと思います。ひきつづき、よろしくお願いいたします。

タイトルとURLをコピーしました