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