配列(一次元/二次元)

一次元配列をシートに反映する処理をパーツ化【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■受け取った一次元配列を指定したシートへ貼り付けする処理(縦に貼付)
Public Function call_ArrayToPasteVertical(rng As Range, arr As Variant)
    Dim MaxRow As Long: MaxRow = UBound(arr) - LBound(arr) + 1
  
    rng.Resize(MaxRow, 1).Value = WorksheetFunction.Transpose(arr)
End Function
'■受け取った一次元配列を指定したシートへ貼り付けする処理(横に貼付)
Public Function call_ArrayToPasteHorizontal(rng As Range, arr As Variant)
    Dim MaxCol As Long: MaxCol = UBound(arr) - LBound(arr) + 1
  
    rng.Resize(1, MaxCol).Value = arr
End Function

高速化のため配列で計算することは多いと思います。
最終的に結果をワークシートへ貼り付ける処理も多く、
今回パーツ化したのでコピペでそのまま使用可能です。

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Public Sub sample()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4, 5)
    
    '■縦に貼付
    Call call_ArrayToPasteVertical(Range("A1"), arr)
    'セルA1=1
    'セルA2=2
    'セルA3=3
    'セルA4=4
    'セルA5=5
    
    '■横に貼付
    Call call_ArrayToPasteHorizontal(Range("A10"), arr)
    'セルA10=1
    'セルB10=2
    'セルC10=3
    'セルD10=4
    'セルE10=5
    
End Sub

結果イメージ

1次元配列が指定したシートに貼り付けされます。
1次元配列の場合は、2次元配列の反映と異なり、縦に反映したい場合と、横に反映したい場合がありますので使い分けます。

注意点

  • 縦に貼り付ける場合はWorksheetFunction.Transpose(arr)とTransposeで入れ替える必要があります。
    ※入れ替えない場合はすべて、arrの最小値の要素で反映されます。
    ※上記の場合だとセルA1~A5まで1で反映される。

関連記事

コメント

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