以下のようなコードがあり、エクセルシートのA列とB列の値を結合したものを配列に格納したいのですが
型の不一致のエラーが出てしまいます。。。。。
&
は文字列結合演算子なので、&
で結合すると文字列になります。
オブジェクト型でない値にはSetは不要。
vba
1Function mk_cd_arr_1() As Variant()
2
3 '行数を定義
4 Dim cd_amnt As Long
5 cd_amnt = 10
6
7 '列1と列2を結合したものを配列に格納
8 Dim cd_arr() As Variant
9 ReDim cd_arr(cd_amnt) As Variant
10
11 Dim i As Integer
12 For i = 1 To cd_amnt
13 cd_arr(i - 1) = Worksheets(3).Cells(i + 1, 1) & Worksheets(3).Cells(i + 1, 2)
14 Next i
15
16 mk_cd_arr_1 = cd_arr()
17
18End Function
1列だけでうまくいくのは、セル(Rangeオブジェクト)が代入されるからです。
型を指定すると呼び出し先でエラーになってしまいます。
引用テキスト
Dim cd_arr_1() As Variant
cd_arr_1() = mk_cd_arr_1()←型が一致しません。
上記の関数ならそのコードでエラーになりません。
提示の関数は戻り値がバリアント型の配列になってますので、受ける変数もバリアント型の配列でOKです。
&
で結合するなら文字列になるので、String型の配列を戻り値にした方がいいかもしれません。
その場合は、下記のようになります。
結果を代入する変数もString型の配列にします。
vba
1Function mk_cd_arr_1() As String()
2
3 '行数を定義
4 Dim cd_amnt As Long
5 cd_amnt = 10
6
7 '列1と列2を結合したものを配列に格納
8 Dim cd_arr() As String
9 ReDim cd_arr(cd_amnt)
10
11 Dim i As Integer
12 For i = 1 To cd_amnt
13 cd_arr(i - 1) = Worksheets(1).Cells(i + 1, 1) & Worksheets(1).Cells(i + 1, 2)
14 Next i
15
16 mk_cd_arr_1 = cd_arr
17
18End Function
19
20Public Sub test()
21 Dim cd_arr_1() As String
22 cd_arr_1 = mk_cd_arr_1()
23
24 Debug.Print cd_arr_1(1)
25End Sub