【VBA】Cellsプロパティ

 今回は次のようなワークシートを先に用意してください。

 VBA合計値マクロシート

 面倒であれば罫線などはいらないので、とにかくセルB2 から B6 に何か値を入れておきます。今回はこの入力された値の合計値を求めるマクロを作ってみます。

【VBA】Cellsプロパティ

 セルB2 から B6 に入力された数値を全て足し合わせるマクロです。

'[VBA] Cellsプロパティのテストコード

Sub Total_Cell()

  Dim s As Double, y As Double

  For y = 2 To 6
    s = s + Cells(y, 2).Value
  Next y

  Cells(7, 2).Value = s

End Sub

 Total_Cell() を実行するとセル B7 に「 34 」という値が出力されます。今回はセルを指定するのに Rangeプロパティではなく、Cells プロパティを用いています。Range プロパティでセルB5(というオブジェクト)を取得するときは

Range("B5")

のように書きます。普段ワークシートを操作するときに扱うセル番地を “” で囲んで指定しているので分かりやすいですね。一方、Cells プロパティはセル B2 を

Cells(5,2)

という記述で取得します。アルファベットで表されていた列番号 B を 2 という数値に変えて、しかも列と行の順序が入れ替わっています。もう少し一般的に書くと

Cells(行,列)

という形式になっています。Cells に渡す引数は行、次に列の順であることに注意します。普段のエクセルにおける操作とは感覚が逆になってしまうのでちょっと厄介なのですが、

Cells(y,x)

の形だと覚えやすいです。数学では y は縦軸、x は横軸という感覚が身についていますし、y と x を変数名としてそのまま使うことができます。たとえば

Cells(10,3)

という記述を見たときに、ワークシートを思い浮かべながら「縦に 10 下りて、右に 3 動いて」と考えます。ところで、なぜわざわざ Cellsプロパティを用いるのかといえば、ループ処理の中で引数に色々な値を代入したいからなのです。Rangeプロパティは見た目が分かりやすいのですが、引数を変数にすることはできません。ですから、セルを For…Next などで繰り返し処理するときは、基本的にはこの Cellsプロパティを用いることになります。
 
 For…Nextステートメントによるループ処理の最初のステップで。Cells(y,2) に y = 2 を入れて

s = s + Cells(2, 2).Value

という処理を行なっていますが、これは

s にセルB2 の値を加えたものを新たに s とする

という意味です。最初の段階では変数 s には何も入っていないので、s にセルB2 の値がそのまま入ります。そして次の処理が行われるまで s の値は保持されて、

s = s + Cells(3, 2).Value

という処理で、さらにセルB3 の値が加えられて s の値が書き換えられます。同じことを y = 6 になるまで繰り返して合計値を得るのです。そして最後に

Cells(7, 2).Value = s

と記述してセルB7 に合計値 s を書き込みます。

【おすすめ記事】 ≫ VBA で罫線を引く方法

 

エクセルや数学に関するコメントをお寄せください