0

シナリオ: こんにちは、マクロ プログラミングは初めてです...異なるワークブックの 2 つの列を比較し、一致しない値をワークブックの 1 つにコピーする必要があります。

コード:

For Each y In CompareRange     
         For Each x In Selection       
            If x <> y Then temp = y       
                    intRowPosition = intRowPosition + 1
                      Next x
                      Workbooks("junk").Worksheets("sheet1").Range("C" & CStr(intRowPosition)).Value = temp
                      intRowPosition = intRowPosition - 5                           
              Next y

問題:

上記のコード (x <> y が false の場合) では、次の Y に移動するループが必要です。foreach ループから抜け出す方法を教えてください。

4

3 に答える 3

1

最初のオプション: X ループの後にあるものを実行する場合

For Each y In CompareRange     
    For Each x In Selection       
        If x <> y Then temp = y       
                intRowPosition = intRowPosition + 1
        Else
             Exit For
        End If
    Next x

    Workbooks("junk").Worksheets("sheet1").Range("C" & CStr(intRowPosition)).Value = temp
    intRowPosition = intRowPosition - 5                           
Next y

2 番目のオプション: X ループの後にあるものを実行したくない場合。

Dim CanExecute as Boolean    

For Each y In CompareRange    
    CanExecute = True

    For Each x In Selection       
        If x <> y Then temp = y       
                intRowPosition = intRowPosition + 1
        Else
            CanExecute = False
        End If
    Next x

    If CanExecute Then
        Workbooks("junk").Worksheets("sheet1").Range("C" & CStr(intRowPosition)).Value = temp
        'I'm not sure if this would be inside or outside the if, that's up to you.
        intRowPosition = intRowPosition - 5                           
    End If
Next y
于 2013-06-28T14:46:50.670 に答える
-2

範囲を指定する必要があります。これは一つの方法です。

 For Each y In Workbooks("junk").Worksheets("sheet1").Range("B5:B" & Rows.Count).End(xlUp).Row     
     For Each x In Workbooks("junk").Worksheets("sheet1").Range("C5:C" & Rows.Count).End(xlUp).Row            
        If x <> y Then temp = y       
        intRowPosition = intRowPosition + 1
     Next x
     Workbooks("junk").Worksheets("sheet1").Range("C" & CStr(intRowPosition)).Value = temp
     intRowPosition = intRowPosition - 5                           
  Next y
于 2013-06-26T13:25:28.247 に答える