セル範囲から配列変数へ転記

今度はセル範囲を配列変数に一気に格納します。

セル範囲から配列変数に格納するのは若干問題があります。
前ページのサンプルの逆ですから、

Option Explicit

Sub TEST9()
    Dim S1 As Worksheet
    Dim A(1 To 3, 1 To 4) As String

    Set S1 = Worksheets("Sheet1")
    ' セル範囲を一気に配列に転記
    A = S1.Cells(1, 1).Resize(3, 4).Value
    ' 処理結果をメッセージ表示
    MsgBox "A(1, 1) = " & A(1, 1) & vbCr & _
           "A(1, 2) = " & A(1, 2) & vbCr & _
           "A(1, 3) = " & A(1, 3) & vbCr & _
           "A(1, 4) = " & A(1, 4) & vbCr & _
           "A(2, 1) = " & A(2, 1) & vbCr & _
           "A(2, 2) = " & A(2, 2) & vbCr & _
           "A(2, 3) = " & A(2, 3) & vbCr & _
           "A(2, 4) = " & A(2, 4) & vbCr & _
           "A(3, 1) = " & A(3, 1) & vbCr & _
           "A(3, 2) = " & A(3, 2) & vbCr & _
           "A(3, 3) = " & A(3, 3) & vbCr & _
           "A(3, 4) = " & A(3, 4)
End Sub
このようになるのですが、これだと、
セル範囲から配列変数に格納する(コンパイルエラー)
コンパイルエラーになってしまいます。

そこで、宣言での配列はあきらめてArray関数と同じようにセルからの転記まかせにしてみます。
Option Explicit
Sub TEST9()
    Dim S1 As Worksheet
    Dim A As Variant    ' 配列で宣言するとエラーになる

    Set S1 = Worksheets("Sheet1")
    ' セル範囲を一気に配列に転記
    A = S1.Cells(1, 1).Resize(3, 4).Value
    ' 処理結果をメッセージ表示
    MsgBox "A(1, 1) = " & A(1, 1) & vbCr & _
           "A(1, 2) = " & A(1, 2) & vbCr & _
           "A(1, 3) = " & A(1, 3) & vbCr & _
           "A(1, 4) = " & A(1, 4) & vbCr & _
           "A(2, 1) = " & A(2, 1) & vbCr & _
           "A(2, 2) = " & A(2, 2) & vbCr & _
           "A(2, 3) = " & A(2, 3) & vbCr & _
           "A(2, 4) = " & A(2, 4) & vbCr & _
           "A(3, 1) = " & A(3, 1) & vbCr & _
           "A(3, 2) = " & A(3, 2) & vbCr & _
           "A(3, 3) = " & A(3, 3) & vbCr & _
           "A(3, 4) = " & A(3, 4)
End Sub
これだと、コンパイルエラーも発生せず、
セル範囲から配列変数に格納する(処理結果)
このように処理されます。

※なお、通常のArray関数と違い、セル範囲から配列格納した場合は、配列要素は行列ともに「1」から始まります。