失敗談の失敗再現を失敗していた話(失敗談)

以前、失敗談としてこんな話を書いた。
Transpose関数には、行列入れ替えの上限があるらしい、という話だ。
infoment.hatenablog.com

ところがよくよく調べてみると、失敗談として紹介したかった内容を、
正しく再現できていないことに気づいた(偶然)。

当時掲載したコードがこちら。

Sub Test()
    Dim arr(1, 1) As Variant
    Dim i As Long
    Dim temp As Variant
    
        On Error Resume Next
        Do
            i = i + 1
            arr(0, 0) = WorksheetFunction.Rept("あ", i)
            temp = WorksheetFunction.Transpose(arr)
        Loop While Err.Number = 0
        
        MsgBox i - 1 & " 個が限界です"
End Sub

なるほど確かに、実行すれば ↓ このようなメッセージがでる。
f:id:Infoment:20210222231444p:plain

ところが実は、このコードはTransposeの限界ではなく、Rept関数の限界を
示していた訳で。
f:id:Infoment:20210222232314p:plain

では、本当に知りたかった限界はどこなのか?ということで、こんな風に
コードを変えて再挑戦。今回文字の長さは、&で継ぎ足してみた。

Sub Test()
    Dim arr(1, 1) As Variant
    Dim i As Long
    Dim temp As Variant
        
        On Error Resume Next
        Do
            i = i + 1
            If i = 32767 Then
                Debug.Print "!"
            End If
            
            arr(0, 0) = arr(0, 0) & "あ"
            temp = WorksheetFunction.Transpose(arr)
            On Error GoTo 0
            
        Loop While Err.Number = 0
        
        MsgBox i - 1 & " 個が限界です"
End Sub

32767個に当たりをつけ、そこまで来たときのデバッグプリントに
ブレークポイントを設けてみた。
f:id:Infoment:20210222232851g:plain

結果、「あ」を32768個並べることはできたが、Transpose関数で
ひっくり返そうとしてエラーが発生。奇しくも(?)Rept関数と
同じ結果になった。

しかし、導出過程が誤りなら、それは正答とは言えませんね。

お詫びと訂正まで。