今回は複数セル範囲に配列を直接入れる方法を備忘録も兼ねて残しておきたいと思います。
やろうとしていること
以下のようなシートを使って説明します。A列に北海道と東北地方名が入っています。
![やろうとしていること](https://masashi-blog418.com/wp-content/uploads/2023/03/image-38-1024x482.png)
どういった処理をするかというと、A列のデータを配列に入れ、配列の中身を関東地方にして、それをC列に突っ込む、みたいな感じです。
とりあえずシートに関数は入れずに、あくまでマクロ上で処理させることにします(明らかに手間)
複数セル範囲に配列の中身をまとめて入れる方法
コードの紹介
以下サンプルコードになります。該当シートのコードエディタに貼り付けて実行してみてください。
Sub haribona_Prefecture()
Dim ary_Prefecture As Variant
'A列を取得
ary_Prefecture = Range("A2:A8").Value
'配列の中身をそれぞれ編集
ary_Prefecture(1, 1) = "茨城県"
ary_Prefecture(2, 1) = "栃木県"
ary_Prefecture(3, 1) = "群馬県"
ary_Prefecture(4, 1) = "埼玉県"
ary_Prefecture(5, 1) = "千葉県"
ary_Prefecture(6, 1) = "東京都"
ary_Prefecture(7, 1) = "神奈川県"
'配列をC列に突っ込む
Range("C2:C8") = ary_Prefecture
End Sub
実行すると、C列に編集した配列の中身がそれぞれ格納されます。
![複数セル範囲に配列の中身をまとめて入れる方法_1](https://masashi-blog418.com/wp-content/uploads/2023/03/image-39-1024x541.png)
コードの説明
次にコードについてざっくり説明します。
初めにA列の中身を格納する為の変数を用意します。今回はary_Prefectureとしました。
Dim ary_Prefecture As Variant
ここで「Variantってなんだ?」ってなる方もいると思うので簡単に説明すると「どんなデータ型でも入る型」という認識でOKです。
次にA列の中身をary_Prefectureに格納します。今回はA8セルまでデータが入っているので、Range(“A2:A8”)とします。
ary_Prefecture = Range("A2:A8").Value
次に配列の中身をそれぞれ編集します。配列ですが2次元配列で格納されているので各要素をary_Prefecture(n,n)で指定するようにしましょう。
ary_Prefecture(1, 1) = "茨城県"
ary_Prefecture(2, 1) = "栃木県"
ary_Prefecture(3, 1) = "群馬県"
ary_Prefecture(4, 1) = "埼玉県"
ary_Prefecture(5, 1) = "千葉県"
ary_Prefecture(6, 1) = "東京都"
ary_Prefecture(7, 1) = "神奈川県"
最後に配列の中身をC列に突っ込みます。
Range("C2:C8") = ary_Prefecture
以上がコードの簡単な説明になります。
複数セル範囲に配列の中身をまとめて入れる時の注意点
セル範囲に配列の中身をまとめて入れる際に注意しておくことが2点あります。
1次元配列だと入らない
1つ目が1次元配列だとデータが入らないということです。厳密には2次元配列と同じようにセル範囲に配列をまとめて格納することができない、という感じです。
実際にコードを用意しました。処理自体は2次元配列→1次元配列に変更しただけになります。
Sub haribona_Prefecture()
Dim ary_Prefecture() As Variant
ReDim ary_Prefecture(1 To 7)
ary_Prefecture(1) = "茨城県"
ary_Prefecture(2) = "栃木県"
ary_Prefecture(3) = "群馬県"
ary_Prefecture(4) = "埼玉県"
ary_Prefecture(5) = "千葉県"
ary_Prefecture(6) = "東京都"
ary_Prefecture(7) = "神奈川県"
'配列をC列に突っ込む
Range("C2:C8") = ary_Prefecture
End Sub
実行結果を見てみるとary_Prefecture(1)の茨城県しか入っていないのが分かるかと思います。
![複数セル範囲に配列の中身をまとめて入れる時の注意点_1次元配列だと入らない_1](https://masashi-blog418.com/wp-content/uploads/2023/03/image-40-1024x475.png)
なので、セル範囲に配列を格納したい時は2次元配列で格納するか、For文を使って格納するようにしましょう。
セル範囲と配列の要素数を同じにする
2つ目がセル範囲と配列の要素数を同じにする必要がある点です。
実際にサンプルコードをいじってみると分かるのですが、セル範囲と配列の要素数が異なるとデータが上手く入らなくなります。
要素数がセル範囲より大きい場合、配列のデータが入らなくなります。
'セル範囲:6 配列の要素数:7
Range("C2:C7") = ary_Prefecture
![複数セル範囲に配列の中身をまとめて入れる時の注意点_セル範囲と配列の要素数を同じにする_1](https://masashi-blog418.com/wp-content/uploads/2023/03/image-42-1024x478.png)
逆にセル範囲が要素数より大きい場合、残りのセルに「#N/A」が入ります。
'セル範囲:8 配列の要素数:7
Range("C2:C9") = ary_Prefecture
![複数セル範囲に配列の中身をまとめて入れる時の注意点_セル範囲と配列の要素数を同じにする_2](https://masashi-blog418.com/wp-content/uploads/2023/03/image-43-1024x526.png)
このようにデータが入らなかったり、思わぬデータが入力されてしまう為、セル範囲と配列の要素数は同じにするようにしましょう。
まとめ
今回は複数セル範囲に配列を直接入れる方法を紹介しました。
配列を直接入れる場合は以下3点に注意して入れるようにしましょう。
- 2次元配列を指定する。
- 1次元配列を入れたい場合はFor文等の繰り返し処理を活用する。
- セル範囲と配列の要素数を一致させる。
またこの他にもVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント