For Each実行時に「この配列は固定されているか、または一時的にロックされています。」と表示される場合の対象方法のメモ

再現プログラム
セルの1列目~3列目の10行目までのデータを習得し、各列ごとに終了行のセル(数値の99が入ったセル)の直前までのデータを出力するプログラム。
以下のプラグラムを実行すると、2回目の「For」で実行される「For Each」でエラーが発生する。
Sub Macro1()
'イミディエイトウィンドウに各列のセル内容を出力する。
Dim cellData As Variant
Dim eachData As Variant
Dim i As Integer
cellData = Range(Cells(1, 1), Cells(10, 3))
For i = 1 To UBound(cellData, 2)
For Each eachData In WorksheetFunction.Index(WorksheetFunction.Transpose(cellData), i)
If eachData = 99 Then GoTo EndData '終了行の場合は次の列へ移動
Debug.Print "Data" & i & ":" & eachData '数値を出力
Next
EndData:
Next
End Sub
使用データ

実行結果
Data1:1
Data1:2
Data1:3
Data1:4
Data1:5
'2列目以降でエラー発生
対処方法
For Eachを抜ける際に「GoTo文」を使わないようにする。
今回のプログラムの場合は、太字の箇所を 「GoTo文」 から「Exit For(Forループを抜ける命令)」に変更することでエラーを解消できた。
Sub Macro1()
'イミディエイトウィンドウに各列のセル内容を出力する。
Dim cellData As Variant
Dim eachData As Variant
Dim i As Integer
cellData = Range(Cells(1, 1), Cells(10, 3))
For i = 1 To UBound(cellData, 2)
For Each eachData In WorksheetFunction.Index(WorksheetFunction.Transpose(cellData), i)
If eachData = 99 Then Exit For '終了行の場合は次の列へ移動
Debug.Print "Data" & i & ":" & eachData '数値を出力
Next
EndData:
Next
End Sub
使用データ

実行結果
Data1:1
Data1:2
Data1:3
Data1:4
Data1:5
Data2:9
Data2:10
Data2:11
Data2:12
Data2:13
Data2:14
Data2:15
Data2:16
Data2:17
Data3:50
Data3:51
Data3:52
Data3:53