値を返すプロシージャ Functionを使う
データベースのイメージ
Functionその1、データベース範囲を一行で二次元配列に格納して返す
データ範囲を一行で配列に格納
Function ArrayMyData() As Variant
Dim max As Integer
‘データベース範囲のデータ行数取得
max = Range(“A11”).CurrentRegion.Rows.Count – 1
‘データの範囲を取得して返却(この場合、要素番号は1から始まる)
ArrayMyData = Range(Cells(12, “A”), Cells(11 + max, “D”)).Value
End Function
Functionその2、データベース範囲をFor~Nextで二次元配列に格納して返す
データ範囲をFor~Nextを使って配列に格納
Function ArrayMyData2() As Variant
Dim gymax As Integer
Dim retmax As Integer
Dim r As Integer
Dim i As Integer
Dim data As Variant
‘データベース範囲のデータ行列数取得
gymax = Range(“A11”).CurrentRegion.Rows.Count – 1
retmax = Range(“A11”).CurrentRegion.Columns.Count
‘配列の大きさを決定(要素番号を1からにする)
ReDim data(1 To gymax, 1 To retmax)
’配列 dataにデータベース範囲を格納
For r = 1 To gymax ’行の繰り返し
For i = 1 To retmax ’列の繰り返し
data(r, i) = Cells(r + 11, i).Value
Next
Next
‘返却
ArrayMyData2 = data
End Function
上記で作った二通りのFunctionプロシージャから値を取得する
データ範囲を一行で格納したFunctionから
’変数宣言(配列ではVariantを指定)
Dim itemgyou As Variant
’データ範囲を一行で格納したFunctionから返却された二次元データを取得
itemgyou = ArrayMyData
データ範囲をFor~Nextで格納したFunctionから
Dim arrydata As Variant
’データ範囲をFor~Nextで格納したFunctionから返却された二次元データを取得
arrydata = ArrayMyData2
Functionプロシージャから取得した二次元配列のデータを展開する
‘リストボックスのアイテムに追加
With ActiveSheet.ListBox1
.Clear
For r = 1 To UBound(itemgyou)
.AddItem “ID=” & itemgyou(r, 1) & ”→” & itemgyou(r, 2)
Next
End With
この部分がリストにItemを追加しているコードになります
.AddItem “ID=” & itemgyou(r, 1) & “→” & itemgyou(r, 2)
配列、itemgyouには下表のイメージでデータが格納されています
Forのrには1から順にデータの総行数まで入るので
文字列「ID=」に続けて配列の1行1列目のデータに更に文字列「→」を挟んで配列の1行2列目のデータが合成されて.AddItemで追加していしています。そしてForで繰り返すたびにr行数を増加した配列値を格納するというイメージになります。
‘—————————————————–
‘コンボボックスのアイテムに追加
’こちらはコンボボックスコンテナーですが基本的にはリストを追加する方法はリストボックスと同様です。
With ActiveSheet.ComboBox1
.Clear
For r = 1 To UBound(arrydata)
.AddItem “ID=” & arrydata(r, 1) & “→“ & arrydata(r, 3)
Next
.Value = .List(ListIndex)
End With
以上今回は二通りのFunctionプロシージャの使用例でした。一つの結果を表現、実現する方法が色々ありますがどのスタイルがいいのかわかりませんが色々やってみるのがいいと思います。
コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
Private Sub Image1_Click() 'テストデータをリストボックス、コンボボックスのアイテムに追加する Dim arrydata As Variant Dim itemgyou As Variant Dim r As Integer Dim i As Integer 'データベースを二次元配列に格納する itemgyou = ArrayMyData arrydata = ArrayMyData2 'リストボックスのアイテムに追加 With ActiveSheet.ListBox1 .Clear For r = 1 To UBound(itemgyou) .AddItem "ID=" & itemgyou(r, 1) & "→" & itemgyou(r, 2) Next End With 'コンボボックスのアイテムに追加 With ActiveSheet.ComboBox1 .Clear For r = 1 To UBound(arrydata) .AddItem "ID=" & arrydata(r, 1) & "→" & arrydata(r, 3) Next ComboBox1.Value = ComboBox1.List(ListIndex) End With End Sub 'データベースを二次元配列に格納して返す Function ArrayMyData() As Variant Dim max As Integer 'データベース範囲のデータ行数取得 max = Range("A11").CurrentRegion.Rows.Count - 1 'データの範囲を取得して返却(この場合、要素番号は1から始まる) ArrayMyData = Range(Cells(12, "A"), Cells(11 + max, "D")).Value End Function 'データベースをFor~Nextで二次元配列に格納して返す Function ArrayMyData2() As Variant Dim gymax As Integer Dim retmax As Integer Dim r As Integer Dim i As Integer Dim data As Variant 'データベース範囲のデータ行列数取得 gymax = Range("A11").CurrentRegion.Rows.Count - 1 retmax = Range("A11").CurrentRegion.Columns.Count '配列の大きさを決定(要素番号を1からにする) ReDim data(1 To gymax, 1 To retmax) For r = 1 To gymax For i = 1 To retmax data(r, i) = Cells(r + 11, i).Value Next Next '返却 ArrayMyData2 = data End Function Private Sub Image2_Click() With ActiveSheet .ListBox1.Clear Range("K13") = "" .ComboBox1.Clear Range("K21") = "" End With End Sub Private Sub ListBox1_Click() Range("K13") = ListBox1.Value End Sub Private Sub ComboBox1_Click() Range("K21") = ComboBox1.Value End Sub |
コメント