パーツ化とは
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で反映される。



コメント