<<目次へ


データの取得方法



 データ処理(数値計算)においてデータを取得することは基本中の基本である。ここでは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までの範囲で色々と変更してみて欲しい。そうすれば何番の箱にどのデータが格納されているかが分かるはずだ。

Table 1
箱の番号 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を参照)。

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を参照)。

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次配列に格納している」ということである。