ОК, поэтому я хочу сделать sumif для столбца в массиве, потому что я не хочу печатать на листе, чтобы получить тип диапазона для Worksheet.function.Sumif, идея состоит в том, чтобы остаться полностью в коде VBA и писать на листе как можно меньше. Я пытаюсь оптимизировать скорость: 4814 строк на 40 столбцов X 60.
Итого по первому столбцу - всего 197 321 164, это правильно, следующие столбцы низкие, и вместо того, чтобы идти в четверть 40, остальное включается и все после 8 равно 0. Первый «To_Quarter» в массиве равен 9, поэтому с> = я бы подумал, что это будет go до 9. Я попытался поместить свой Next I перед End IF, но затем он просто запрашивает For .
изображение коробки местных жителей: https://ibb.co/cgFQhxY
Любая помощь будет высоко ценится.
Sub SumifONarray()
Dim arrQuarters, arrNumber_of_Assets As Variant
Dim I As Long, J As Long
arrNumber_of_Assets = Range("Costs_Number_of_Assets")
arrQuarters = Range("Quarters_1to40")
Dim MaxRecov_If_result, arr_Row10_Resolution_Physical_Possession_Expenses_To_Quarter, arr_Row10_Resolution__Max_Recovery_Grid As Variant
arr_Row10_Resolution_Physical_Possession_Expenses_To_Quarter = Range("_Row10_Resolution_Physical_Possession_Expenses_To_Quarter")
arr_Row10_Resolution__Max_Recovery_Grid = Range("_Row10_Resolution__Max_Recovery_Grid")
ReDim arrIf_Max_Recovery_Amount_Sum(1 To 1, 1 To UBound(arrQuarters, 2))
For J = LBound(arrQuarters, 2) To UBound(arrQuarters, 2)
For I = LBound(arrNumber_of_Assets, 1) To UBound(arrNumber_of_Assets, 1)
If arr_Row10_Resolution_Physical_Possession_Expenses_To_Quarter(I, 1) >= arrQuarters(1, J) Then
MaxRecov_If_result = MaxRecov_If_result + arr_Row10_Resolution__Max_Recovery_Grid(I, J)
Else: MaxRecov_If_result = 0
End If
Next I
arrIf_Max_Recovery_Amount_Sum(1, J) = MaxRecov_If_result
MaxRecov_If_result = 0
Next J
End Sub
Я загрузил образец ниже с кодом из 10 строк. https://easyupload.io/wfixds