配列からの値貼り付けに関する覚書 ① Transpose関数とIndex関数は極力使用しない

ここ一週間ほど、(私にとっての)大規模マクロを作成していて、泥沼に
はまっている(絶賛継続中)。

そこから抜け出そうとして得た教訓を一つ二つ、覚書として残しておこう。
f:id:Infoment:20210228085112p:plain

例えば、こんなテーブル。
f:id:Infoment:20210228090824p:plain

これについて「品名列をF2~F4に転記したい」とする。その際、各品名の頭に
「品名:」を追加したい。↓ 完成形は、こんな感じだ。
f:id:Infoment:20210228090906p:plain
今までは、Index関数を用いて配列をスライスし、編集して貼り付けていた。

Sub Test()
    Dim Tb As Excel.ListObject
    Set Tb = ActiveSheet.ListObjects(1)
    
    Dim SourceArray As Variant
        SourceArray = Tb.DataBodyRange
        
    Dim arr As Variant
        arr = WorksheetFunction.Index(SourceArray, 0, 1)
    
    Dim i As Long
        For i = 1 To UBound(arr)
            arr(i, 1) = "品名:" & arr(i, 1)
        Next
        
        Range("F2").Resize(UBound(arr)) = arr
End Sub

ところがレコード数が増えていくうち、何かの都合でIndex関数がエラーを
起こすようになった。
※実際問題が発生したのは、1万行×100列ほどのテーブル。

しかも、昨日までは正常に動いていたのに、何切っ掛けでそうなったか
分からない。

ということで、安定的な動作を目的として、エラー時の原因が特定しにくい
関数は使用しないこととした。

Sub Test()
    Dim Tb As Excel.ListObject
    Set Tb = ActiveSheet.ListObjects(1)
    
    Dim SourceArray As Variant
        SourceArray = Tb.DataBodyRange
        
    Dim arr() As Variant
    ReDim arr(1 To UBound(SourceArray), 1 To 1)
    
    Dim i As Long
        For i = 1 To UBound(arr)
            arr(i, 1) = "品名:" & _
                        SourceArray(i, Tb.ListColumns("品名").Index)
        Next
        
        Range("F2").Resize(UBound(arr)) = arr
End Sub

1列しかないのに複数行1列の二次元配列にしたのも、Index関数と同じ理由。
1次元配列を縦に貼り付ける際は、Transpose関数で縦横の入れ替えを行って
いたのだが、この関数もどうやらIndex関数と同じ原因でエラーとなるようだ。

以上はあくまで、「自分ルール」。
どこかで躓いたとき、思い出して頂けたら幸いです。

参考まで。