2015-05-13 15 views
0

我試圖跨工作表比較數據。在工作表1.a和工作表1.b中,我有從C14C19的值。我試圖使用for each loop從工作表1.b中列C中的單元格中減去工作表1.a中列C中的單元格,並在工作表1.c中填充列C中的結果。我正在嘗試爲這個過程使用循環,因爲我有50個帶有a和b版本的工作表。下面的vba代碼用結果填充前兩個工作表#.c,但在所有其他工作表#.c中都失敗。任何建議,非常感謝。循環播放兩組工作表,執行計算並填充第三組工作表

這裏是代碼的結構:

Sub DataSubtract() 
Application.ScreenUpdating = False 
    Dim sheet_name As Range 
    Dim sheet_name2 As Range 
    Dim sheet_name3 As Range 
    Set sheet_name2 = Sheets("WS_QA").Range("B:B") 
    Set sheet_name3 = Sheets("WS_QA").Range("C:C") 

    'Counter 1 
    Dim counter As Long 
    counter = 1 
    'Counter 2 for sheet_name3 
    Dim counter2 As Long 
    counter2 = 1 

    'Row 
    Dim r As Long 

    For Each sheet_name In Sheets("WS_QA").Range("A:A") 
     If sheet_name.Value = "" Then 
      Exit For 
     Else 
      With Sheets(sheet_name.Value) 
      'Column C 
       For r = 14 To 39 
       .Cells(r, 3).Value = Sheets(sheet_name2(counter, 1).Value).Cells(r, 3).Value - Sheets(sheet_name3(counter2, 1).Value).Cells(r, 3).Value 
       counter = counter + 1 
       counter2 = counter2 + 1 
       Next r 
      End With 
     End If 
    Next sheet_name 
Application.ScreenUpdating = True 
End Sub 

最好的問候,

+0

現在'counter'和'counter2'做的是完全一樣的東西。 'counter2'應該在for循環之外嗎?我猜你想將每張紙上的計數器重置爲1 – chancea

+0

是的,猜測我根本不需要第二個計數器。 – user3242245

回答

0

移動的counter初始化到for each循環中,使得它得到每次你到一個新的工作表復位。因爲你不需要它,所以也擺脫第二個櫃檯。

Sub DataSubtract() 
    Application.ScreenUpdating = False 
    Dim sheet_name As Range 
    Dim sheet_name2 As Range 
    Dim sheet_name3 As Range 
    Set sheet_name2 = Sheets("WS_QA").Range("B:B") 
    Set sheet_name3 = Sheets("WS_QA").Range("C:C") 

    'Counter 1 
    Dim counter As Long 

    For Each sheet_name In Sheets("WS_QA").Range("A:A") 
     counter = 1 
     If sheet_name.Value = "" Then 
      Exit For 
     Else 
      With Sheets(sheet_name.Value) 
      'Column C 
       For r = 14 To 39 
       .Cells(r, 3).Value = Sheets(sheet_name2(counter, 1).Value).Cells(r, 3).Value - Sheets(sheet_name3(counter, 1).Value).Cells(r, 3).Value 
       counter = counter + 1 
       Next r 
      End With 
     End If 
    Next sheet_name 
    Application.ScreenUpdating = True 
End Sub 
+0

完美,謝謝。 – user3242245