4

次の構造を書いているマクロにループがあります。

この本には2つのワークシートがあります。生データ(したがって、endpointData変数)およびG / L(総勘定元帳)シート(したがって、endpointGL変数)

forこの関数には3つのループがあります。

(1)最初のループは、生データファイルの各レコードを繰り返し処理します。(2)2番目のループは(正規表現検索)
からの検証済みの一致を繰り返し、 (3)3番目のループはG / Lを通過して対応する一致を見つけ、(:を使用して)そのデータを適切な場所に配置します。REGEXP
PUT_DATA_RANGE

これが私が得ているものの一種です:

擬似コード:

For i = 2 To endpointData

    If SOME_TEST = True Then
        Set MATCHES = REGEXP.EXECUTE()
        For Each myMatch In MATCHES
            For j = 1 To endpointGL
                If myMatch.value = SOME_CONDITION Then
                    PUT_DATA_RANGE
                    Exit For
                ElseIf myMatch.value <> SOME_CONDITION Then
                    MsgBox ("there might be a problem")
                    ' EXIT BOTH LOOPS HERE

                    ' write handler code
            Next
            End If
        Next
    End If
Next i

今、あなたは私が自分自身にいくつかのコメントを持っていることに気付くでしょう。3番目のループでG/Lに一致するものが見つからない場合、コードは現在、ユーザーに通知するために割り込みます。ただし、そのメッセージボックスMsgBox("there might be a problem")は3番目のループとともにループされます。Excelで両方のループを終了し、最初のforループを生データの次の使用可能なレコードに移動するにはどうすればよいですか?

ちなみに、私はそれを終了しようとしましたExit Forが、それは正確には機能していないようです。

4

1 に答える 1

4

2つの選択肢があります。

1)一連のブール値を使用して、外側のループを継続する必要があるかどうかを確認します

2)gotoステートメントを使用して、内部ループを終了し、メインプロシージャに直接戻ります。

この状況では、コードの完全に異なる部分にジャンプしていないため、gotoはそれほど悪くない可能性があります。よく文書化してください...

于 2012-05-10T15:01:25.460 に答える