今回は次のようなワークシートを先に用意してください。
面倒であれば罫線などはいらないので、とにかく「セル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 を書き込みます。
エクセルや数学に関するコメントをお寄せください