【Excel VBA】For Eachで「この配列は固定されているか、または一時的にロックされています。」と表示される場合の対処方法

スポンサーリンク

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

タイトルとURLをコピーしました