データの取得方法
データ処理(数値計算)においてデータを取得することは基本中の基本である。ここではExcelVBAにおいて実用的な3つの方法を紹介する。なお,最初に「1次配列=ベクトル」,「2次配列=行列」であることを断っておく。
方法1 VBAコード中に直接データを入力する。
Sub myprog1() Dim dat As Variant 'バリアント型の変数を宣言 dat = Array(1, 2, 3, 4, 5) '変数datにデータを代入 MsgBox dat(4) '変数datに格納されている値を表示させる End Sub
dat = Array(1, 2, 3, 4, 5) は「datという名前の変数に5つの箱を作り,その中にデータを入れる」という意味である(Table 1を参照)。そして MsgBox dat(4) というコードは「4番目の箱に入っているデータを表示しなさい」という命令である。試しに( )のなかの数字を0〜4までの範囲で色々と変更してみて欲しい。そうすれば何番の箱にどのデータが格納されているかが分かるはずだ。
箱の番号 | 0 | 1 | 2 | 3 | 4 |
箱に入れるデータ | 1 | 2 | 3 | 4 | 5 |
方法2 ワークシートのセルからデータを取得する その1(InputBoxを使用)。
例1) A1:A5に数値データが入力されている場合を考える。
Sub myprog2() Dim R As Range 'データ範囲を格納する変数を宣言 Dim dat As Variant 'データを格納する変数を宣言 Set R = Application.InputBox(prompt:="データ範囲を指定", Title:="メインタイトル", Type:=8) dat = R '指定したセル範囲に入力されているデータを変数datへ代入 MsgBox dat(2, 1) '格納されているデータを表示 End Sub
注意すべき点は dat = R の部分で,ここで変数datは2次配列(行列)の形になっており,1行1列目にA1のデータが,2行1列目にA2のデータといったように格納されている(Table 2を参照)。
[1, 1] = 1 |
[2, 1] = 2 |
[3, 1] = 3 |
[4, 1] = 4 |
[5, 1] = 5 |
例2) A1:E1に数値データが入力されている場合を考える。
Sub myprog2() Dim R As Range Dim dat As Variant Set R = Application.InputBox(prompt:="データ範囲を指定", Title:="メインタイトル", Type:=8) dat = R MsgBox dat(1, 3) End Sub
上記のプログラムコードは例1で示したものとほぼ同じである。唯一,異なる点は MsgBox dat(1, 3) の部分であるが,これは先ほどと違って1行1列目にA1のセルに入力されているデータ,1行2列目にB1のセルに入力されているデータが格納されているためである(Table 3を参照)。
[1, 1] = 1 | [1, 2] = 2 | [1, 3] = 3 | [1, 4] = 4 | [1, 5] = 5 |
方法3 ワークシートのセルからデータを取得する その2(ユーザーフォームのRefEditを使用)
まずは [挿入] -> [ユーザーフォーム] とクリックしていき,下図のようなユーザーフォームを作成する。今回の場合,コマンドボタンが2つあるが各ボタンをダブルクリックすることによって,実際にそのボタンをクリックした時に実行させるプログラムコードを記述することができる。
OKボタン(CommandButton)に記述するコード
Private Sub CommandButton1_Click() Dim myRange As String Dim dat As Variant myRange = RefEdit1.Text dat = Range(myRange) MsgBox dat(1, 1) Unload UserForm1 'ユーザーフォームの終了 End Sub
キャンセルボタン(CommandButton2)に記述するコード
Private Sub CommandButton2_Click() Unload UserForm1 'ユーザーフォームの終了 End Sub
上のOKボタンをクリックしたときに実行されるプログラムコードにおいて, myRange = RefEdit1.Text はmyRangeという変数にRefEditに入力された文字を代入することを意味している。つまり,選択したセル範囲,例えばA1:A5という文字列を代入しているわけである。したがって, dat = Range(myRange) は書き換えれば dat = Range("A1:A5") とすることと同じである。要するにこれは「セル範囲に入力されているデータを2次配列に格納している」ということである。