2015-05-13 7 views
0

Я пытаюсь сравнить данные по рабочим листам. У меня есть значения от C14 до C19 на листе 1.a и листа 1.b. Я пытаюсь использовать for each loop для вычитания ячеек в столбце C на листе 1.a из ячеек в столбце C на листе 1.b и заполнять результаты в столбце C на листе 1.c. Я пытаюсь использовать циклы для этого процесса, потому что у меня есть 50 листов с версиями a и b. Следующий код vba заполняет первые два листа # .c с результатами, но не работает на всех других листах # .c. Любые предложения приветствуются.цикл над 2 наборами рабочих листов, выполнить вычисления и заполнить 3-й набор рабочих листов

Вот структура кода:

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

Смежные вопросы