VBA вложенный if-do- while для суммирования значений

Что я пытаюсь сделать:

Прокрутите 2 листа (одну и ту же книгу), сравнив 2 критерия (ферма и партия). Если критерии совпадают, суммируйте значения в поле «Нет». «Образцов» и вставьте их в «Всего образцов».

Что происходит на самом деле:

Если оба критерия соблюдены, первые две строки значений суммируются и вставляются в правильную ячейку. Но только первые 2 ряда. Таким образом, «Делай пока» — это не… «делай пока». Или же у него есть причина пропустить ячейки или досрочно выйти из цикла. Я подозреваю, что у меня слишком много итераций. И, как я обнаружил, циклы Do могут легко превратиться в бесконечные циклы.

Кроме того, в моем непосредственном окне отображается первая итерация в строке 1815, а не в 3. (s = row# на исходной странице)

New Sum: 190

s, Num Samples: 1815, 95 

Я не уверен, куда идти дальше, любая информация будет оценена по достоинству.

Sub ProjectDataCalcs()

Dim Src As Worksheet: Set Src = Sheets("Plate Analysis")
Dim Dest As Worksheet: Set Dest = Sheets("Project Analysis")

Dim Sum As Long
Sum = 0
Dim s As Long, d As Long, LR As long, LR2 As Long

LR = Dest.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LR2 = Src.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' effectively a SUMIFS loop
        For s = 3 To LR2
        Sum = Src.Cells(s, "D").Value ' Number of Samples per Plate
        Debug.Print "s, Num Samples: " & s & ", " & (Sum)
         For d = 3 To LR
        'while batch = batch and farm = farm,
        'sum cell value (not add row count) number of samples per plate
         Do While Src.Cells(s, "H").Value = Dest.Cells(d, "E").Value And _
         Src.Cells(s, "I").Value = Dest.Cells(d, "D")

            'Add value in cell to existing value;
            'add Number of Samples in line to running total of samples
            Sum = Sum + Src.Cells(s, "D").Value

            Debug.Print "New Sum: " & (Sum)
            'Sum to Total Samples cell in col L
            Dest.Cells(d, "L").Value = Sum
            Exit Do
          Loop
         Next d
        Next s

End Sub

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что вам нужно что-то большее, чем базовый вложенный цикл: (обновлено на основе вашего образца данных)

Sub ProjectDataCalcs()

    Dim Src As Worksheet, Dest As Worksheet
    Dim Sum As Long, batch, farm
    Dim srw As Long, drw As Long, LRD As Long, LRS As Long

    Set Src = Sheets("Plate Analysis")
    Set Dest = Sheets("Project Analysis")
    
    LRD = Dest.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LRS = Src.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
            
    ' effectively a SUMIFS loop
    For drw = 3 To LRD
        batch = Dest.Cells(drw, "E").Value 'populate these outside the inner loop...
        farm = Dest.Cells(drw, "D").Value
        Sum = 0 'reset sum
        Debug.Print drw, "Batch", batch, "Farm", farm
        
        For srw = 3 To LRS
            If Src.Cells(srw, "H").Value = batch And Src.Cells(srw, "I") = farm Then
                Sum = Sum + Src.Cells(srw, "D").Value
            End If
        Next srw
        
        With Dest.Cells(drw, "L") 'add sum of any values found
            .Value = .Value + Sum
        End With
    Next drw
End Sub

Хм, я рад, что теперь это стало проще, но по-прежнему приходится добавлять только первые два значения, а затем двигаться дальше.

Michaela Danielle 01.05.2024 22:32

Проверьте мой комментарий после выхода. Прокомментируйте это, если во внутреннем цикле может быть несколько совпадений.

Tim Williams 01.05.2024 22:37

Все еще суммируем только 2 строки :(. Придется еще немного покопаться

Michaela Danielle 03.05.2024 18:58

Извините, я мало что могу предложить, не видя соответствующих рабочих листов.

Tim Williams 03.05.2024 19:10

Я ценю помощь, я просто добавил сводку соответствующих полей. Названия ферм не являются настоящими названиями ферм, но идея та же.

Michaela Danielle 03.05.2024 20:05

Кажется, мне удалось перепутать листы... Обновлен код выше - надеюсь, это решит проблему.

Tim Williams 03.05.2024 20:22

Чудесно, спасибо! Теперь это работает быстро и идеально!

Michaela Danielle 03.05.2024 20:47

Другие вопросы по теме