2次元配列の値をRangeオブジェクトに突っ込むときの配列はVariantでなくても良い(Excel)

2次元配列の値をRangeオブジェクトに突っ込むときの配列はVariantでなくても良い

初歩的過ぎますか?

2次元配列の値を一気にRangeオブジェクトに書き込む処理は、Variant型の変数を使う例が多かったので、全然気づいていませんでした。

実験

シートモジュールに、次のようなコードを書いてみた。

リスト1 シートモジュール
Private Property Get TestArea() As Range
  Set TestArea = Me.Range("$D$1:$G$6")
End Property

Private Sub write2DimensionArray( _
              ByVal targetRange As Range)
  With targetRange
    Dim rowSize As Long
    rowSize = .Rows.Count
    Dim colSize As Long
    colSize = .Columns.Count
  End With
  Dim arr() As String
  ReDim arr(1 To rowSize, 1 To colSize)
  Dim r As Long
  Dim c As Long
  For r = 1 To rowSize
    For c = 1 To colSize
      arr(r, c) = "ち~んw"
    Next
  Next
  targetRange.Value = arr
End Sub

シートにTestAreaというプロパティを設置。さらに、引数として渡したRangeオブジェクトの各セルに「ち~んw」という文字列を書き込むwrite2DimensionArrayというメソッドを作ってみた。

String型の2次元配列を作り、その値を書き込む、という処理。

実験

次のコードで、引数にTestAreaプロパティが返すRangeオブジェクトを指定してwrite2DimensionArrayメソッドを実行してみる。

スト2
Private Sub testWrite2DimensionArray()
  Call write2DimensionArray(TestArea)
End Sub

こいつを、シート上のコマンドボタンに登録して呼び出してみる。

f:id:akashi_keirin:20190702222635g:plain

フツーに書き込めている。

おわりに

まあ、考えたら当り前のことなのだが、「2次元配列からの転記のときはVariant」という先入観に囚われていた。