ここでは、配列変数とセル範囲の関係の説明なので、「静的配列」で説明します。
対象は、この章の始めに説明している題材です。面倒ですが、マクロ内で配列変数にあらかじめ値をセットしておいて、一気に「Sheet2」に転記させてみます。
'***************************************************************************************************
' 配列変数からセル範囲への転記サンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'04/02/11(1.00)新規作成
'16/11/19(1.10)*.xlsm化
'20/01/17(1.11)記述整理等
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsSh2 As String = "Sheet2"
'***************************************************************************************************
' ■■■ シート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :TEST8
'* 機能 :配列変数からセル範囲への転記①
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年02月11日
'* 作成者 :井上 治
'* 更新日 :2020年01月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:ブックを明示していないのでアクティブなブックに対して作用します
'***************************************************************************************************
Sub TEST8()
'-----------------------------------------------------------------------------------------------
Dim objSh2 As Worksheet ' Sheet2
Dim tblVal(1 To 3, 1 To 4) As String ' 3×4の2次元配列
Set objSh2 = Worksheets("Sheet2")
' 2次元配列に値をセット(1つずつ原始的に!)
tblVal(1, 1) = "A1"
tblVal(1, 2) = "B1"
tblVal(1, 3) = "C1"
tblVal(1, 4) = "D1"
tblVal(2, 1) = "A2"
tblVal(2, 2) = "B2"
tblVal(2, 3) = "C2"
tblVal(2, 4) = "D2"
tblVal(3, 1) = "A3"
tblVal(3, 2) = "B3"
tblVal(3, 3) = "C3"
tblVal(3, 4) = "D3"
' 配列を一気にセル範囲に転記
objSh2.Cells(1, 1).Resize(3, 4).Value = tblVal
End Sub
この説明では、配列変数に値が入っていることが前提なので、値を入れる記述が長くなりますが、転記そのものは最後の1行だけです。
処理結果はこのようになりました。
上のサンプルでは、配列を解りやすいように、縦を1~3、横を1~4としています。
ですが、VBAのデフォルトでは、配列の要素番号はゼロから始まるので、次の書き方でもOKです。
'***************************************************************************************************
'* 処理名 :TEST8_2
'* 機能 :配列変数からセル範囲への転記②
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年02月11日
'* 作成者 :井上 治
'* 更新日 :2020年01月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:ブックを明示していないのでアクティブなブックに対して作用します
'***************************************************************************************************
Sub TEST8_2()
'-----------------------------------------------------------------------------------------------
Dim objSh2 As Worksheet ' Sheet2
Dim tblVal(2, 3) As String ' 3×4の2次元配列
Set objSh2 = Worksheets("Sheet2")
' 2次元配列に値をセット(1つずつ原始的に!)
tblVal(0, 0) = "A1"
tblVal(0, 1) = "B1"
tblVal(0, 2) = "C1"
tblVal(0, 3) = "D1"
tblVal(1, 0) = "A2"
tblVal(1, 1) = "B2"
tblVal(1, 2) = "C2"
tblVal(1, 3) = "D2"
tblVal(2, 0) = "A3"
tblVal(2, 1) = "B3"
tblVal(2, 2) = "C3"
tblVal(2, 3) = "D3"
' 配列を一気にセル範囲に転記
objSh2.Cells(1, 1).Resize(3, 4).Value = tblVal
End Sub
※なお、セル範囲が1行のみの場合のみ、1次元配列でも転記可能です。