VBAの部品: シートに配列を一括入力する

いろいろな処理から呼び出す部品として使用している関数を紹介します。

指定したセルを開始位置として2次元配列の値を一括入力するものです。

シート上の範囲と配列との入力の仕組み

'範囲の値を2次元配列に格納
myArray = Worksheets(1).UsedRange.Value
'2次元配列の値を範囲に一括入力
myRange.Value = myArray

Excel VBAでは、2次元配列と範囲を上記のように “=” でつなぐだけで値の格納や入力ができます。For文での繰り返しは不要ですし、For文よりも格段に高速です。

この方法での格納や入力には、1行・1列のデータであっても2次元配列を用いる必要があります。1次元配列を使いたい場合はFor文で格納し直すなどの処理が必要です。
Value でやり取りするため、数式入力には対応していません

範囲に配列を一発入力する関数

'シートに2次元配列を入力する
'引数:
' CL 入力開始セル
' ARY 2次元配列
'戻り値: エラー時はFalse
Function f_ArrayToSheet(CL As Range, ARY As Variant) As Boolean
    Dim r As Long, c As Long

    On Error GoTo OnERR
    ' 要素数(行・列数)を取得
    r = UBound(ARY, 1) - LBound(ARY, 1) + 1
    c = UBound(ARY, 2) - LBound(ARY, 2) + 1
    '開始セルから範囲を拡張して貼り付け
    CL.Resize(r, c).Value = ARY
    f_ArrayToSheet = True
    Exit Function
OnERR:
End Function

入力先の始点のセル(CL)と2次元配列(ARY)を指定して呼び出す関数です。2次元配列でないものが指定された場合など、エラー時にはFalseを返します。

入力範囲の行数と列数を UBoundLBound の差分から求めています。UBoundは正確には要素数ではなく最大数だからです。筆者もケースバイケースでLBound0だったり1だったりするので、どちらでも対応できるようにしています。このあたりを毎回気にしないで済むようにしたかったのが汎用部品化している理由でもあります。

後は、指定された始点セルから範囲を拡大して、配列をセットするだけです。

タイトルとURLをコピーしました