Excelの自動化とVBA入門(3)

Excel-VBAによるプログラム(変数、配列、ワークシートとプログラムの関係)

1. 繰返しプログラムと配列化

2回目の解説では、1個の三角形の面積の計算でした。これを10個の三角形に拡張します。変数を配列化して、ワークシートを配列のように取り扱い、繰り返し構文(ここでは、For~Next文)の中に三角形の面積を求める式を書けば完成します。

▶ 配列変数

10個の三角形の計算のために、変数を配列変数化します。例えば、変数mensekiは、配列変数menseki(0)~(9)に変え10個の変数を用意します。()内の番号(添字)を変えれば、目的の三角形を指定することができるようになり、繰返しプログラムで添字を変えながら計算すればいいわけです。添字は0から始まります。そうすると、三角形1の添字が0になり、直観的でなくなるので、menseki(10)とし、11個の変数を用意して(0)は使用せず、(1)~(10)を使用したいと思います。

▶ セルを配列的に認識する

例えば、ワークシート全体をオブジェクトにした場合、A2セルの選択には、「Range(“A2”).Select」と「Cells(2,1).Select」があることは、1回目の解説で紹介しました。後者が配列的認識です(「的」を付けています)。ワークシートをCells(i,j)の2次元配列的に取扱うことで、プログラムの中に組込むことができます。添字の始まりは「1」です。シート全体がオブジェクトの場合、「A1セル」がCells(1,1)になります。ただし、常にA1セルがCells(1,1)というわけではなく、オブジェクトの範囲によってCells(1,1)の位置は変わります。

2. 実行制御

実行制御とは、プログラムの流れを制御する命令です。10個の三角形の面積を計算するので、10回計算を繰返す実行制御命令が必要です。今回の説明では繰返しの制御文として「For~Next文」のみを扱いました。他に、条件判定の「If~Then~Else文」、判定付きの繰返し「While~Wend文」等いくつかの制御文があります。制御文は他の言語と同じような使い方になること、使い方の説明をすると長くなることの理由から割愛しました。「For~Next」と「IF~Then~Else」を使えれば、他の命令も使えるようになると思います。

3. 配列と実行制御を使ったプログラム(10個の三角形の計算プログラム)

▶ プログラムに関する説明

  1. 変数の宣言(Dim)が配列の変数になっています。(namae(10)等)
  2. 繰返「For i=1 to 10 ~ Next i」文の意味は「変数iを1から10まで、1ずつ変化させ、iが10になったら繰り返しを終了する」です。
  3. 計算前のシートでは、上から2行は表示に使っているので、実際の入力は3行目となり入力の行番号は「i+2」となります。つまり、Cells(i+2,j)となります。
  4. 変数名(i)=Cells(i+2,j).Valueで変数に三角形のデータ(セルの値)を入れます。
  5. 計算後 


▶ 問題点

三角形の添字が「i」の時、必要なセルはCells(i+2,j)になっています。上記例では、ワークシート全体にi,jが固定されているので、必要な入力行を指定するために「i+2」という、その場しのぎのような対応をしています。もっときれいに、三角形1はi=1にしたいものです。

4. Cellsの(i,j)の指定法

▶ オブジェクトを適切に選び、Cells(I,j)の添字が適切な値をとるようにする

1回目で、Cells(1,1)は、オブジェクトの範囲で位置が変化すると書きました。オブジェクトの始まりのセルが(1,1)の添字になります。例えば、前記の10個の三角形計算では、「B3」と「F3」をオブジェクトにすれば、三角形1のデータはCells(1,1)~Cells(1,3)になります。下に示す「sample3」を見てください。オブジェクトを「Range(“B3”)」にすることで、セルB3が、Cells(1,1)になりますので、三角形1のデータ名前、底辺、高さはCells(1,1)、Cells(1,2)、Cells(1,3)に相当するようになります。こうすれば、「三角形1」の時に「i=1」になり、三角形の番号と「i」を一致させてプログラムが書けるようになります。なお、計算結果を表示する側では、「F3」をオブジェクトにしています。

▶ 同じオブジェクトを書くことを省略する(With~End with)

上記では、Range(“B3”)、Range(“F3”)が何度も書かれているので、もっと簡単に記述するため「With~End with」を使います。下の例をみてください。With Range("B3")~End Withと書いて、Range("B3")を何回も書くことを省略しています。「.Cells」でドットから始まることに注意してください。さらに、F3側では、もう少し改良して、「Range("F3").Select」、「With Selection」としました。「With Selection」は「今選択されているもの」という意味で、直前の「.Select」で選択しています。この方が、きれいと思います。

5. まとめ

以上で、変数の配列変数、ワークシートの配列的な取り扱い、Cells(i,j)に関する知識の習得は終了しました。次は、最後の例として、他のエクセルブックを開け、データを収集して計算するプログラムの作成を行います。


4回目解説へのリンク:プログラム(複数ファイルの読込、値の収集と計算)