Что я пытаюсь сделать:
Прокрутите 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


Я не думаю, что вам нужно что-то большее, чем базовый вложенный цикл: (обновлено на основе вашего образца данных)
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
Проверьте мой комментарий после выхода. Прокомментируйте это, если во внутреннем цикле может быть несколько совпадений.
Все еще суммируем только 2 строки :(. Придется еще немного покопаться
Извините, я мало что могу предложить, не видя соответствующих рабочих листов.
Я ценю помощь, я просто добавил сводку соответствующих полей. Названия ферм не являются настоящими названиями ферм, но идея та же.
Кажется, мне удалось перепутать листы... Обновлен код выше - надеюсь, это решит проблему.
Чудесно, спасибо! Теперь это работает быстро и идеально!
Хм, я рад, что теперь это стало проще, но по-прежнему приходится добавлять только первые два значения, а затем двигаться дальше.