失敗談の失敗再現を失敗していた話(失敗談)
以前、失敗談としてこんな話を書いた。
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
なるほど確かに、実行すれば ↓ このようなメッセージがでる。
ところが実は、このコードはTransposeの限界ではなく、Rept関数の限界を
示していた訳で。
では、本当に知りたかった限界はどこなのか?ということで、こんな風に
コードを変えて再挑戦。今回文字の長さは、&で継ぎ足してみた。
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個に当たりをつけ、そこまで来たときのデバッグプリントに
ブレークポイントを設けてみた。
結果、「あ」を32768個並べることはできたが、Transpose関数で
ひっくり返そうとしてエラーが発生。奇しくも(?)Rept関数と
同じ結果になった。
しかし、導出過程が誤りなら、それは正答とは言えませんね。
お詫びと訂正まで。