Прошу помочь с разбором макроса, а именно расчёт суммы по двум столбцам, а не по одному, как в данном примере:
[vba]
Код
Sub Яйцо() Dim z, i&, j&, k&, m&, t$: z = Range("Поиск_яйцо!A1:G" & Range("Поиск_яйцо!A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = 1 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) If .exists(t) = False Then m = m + 1: .Item(t) = m: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next Else z(.Item(t), 4) = z(.Item(t), 4) + z(i, 4) End If Next Range("B5").Resize(.Count, UBound(z, 2)).Value = z End With ActiveSheet.Range("$A$5:$F$850").AutoFilter Field:=5, Criteria1:="<>" End Sub
[/vba]
Здесь рассчитывает сумму по столбцу D (4) на листе "Поиск_Яйцо", а необходимо, что бы также подбивал сумму по столбцу G (7) на том же листе. Каким образом можно это сделать?
P.S. к сожалению, файлы по размеру не влезают...
С уважением, SirKelt
Добрый вечер!
Прошу помочь с разбором макроса, а именно расчёт суммы по двум столбцам, а не по одному, как в данном примере:
[vba]
Код
Sub Яйцо() Dim z, i&, j&, k&, m&, t$: z = Range("Поиск_яйцо!A1:G" & Range("Поиск_яйцо!A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = 1 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) If .exists(t) = False Then m = m + 1: .Item(t) = m: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next Else z(.Item(t), 4) = z(.Item(t), 4) + z(i, 4) End If Next Range("B5").Resize(.Count, UBound(z, 2)).Value = z End With ActiveSheet.Range("$A$5:$F$850").AutoFilter Field:=5, Criteria1:="<>" End Sub
[/vba]
Здесь рассчитывает сумму по столбцу D (4) на листе "Поиск_Яйцо", а необходимо, что бы также подбивал сумму по столбцу G (7) на том же листе. Каким образом можно это сделать?
Sub Яйцо() Dim z, i&, j&, k&, m&, t$: z = Range("Поиск_яйцо!A1:G" & Range("Поиск_яйцо!A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = 1 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) If .exists(t) = False Then m = m + 1: .Item(t) = m: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next Else z(.Item(t), 4) = z(.Item(t), 4) + z(i, 4) [b]: z(.Item(t), 7) = z(.Item(t), 7) + z(i, 7)[/b] End If Next Range("B5").Resize(.Count, UBound(z, 2)).Value = z End With ActiveSheet.Range("$A$5:$F$850").AutoFilter Field:=5, Criteria1:="<>" End Sub
[/vba]
Тему можно закрывать
Ребят, спасибо! Разобрался с вопросом
Если кому интересно, то таким образом:
[vba]
Код
Sub Яйцо() Dim z, i&, j&, k&, m&, t$: z = Range("Поиск_яйцо!A1:G" & Range("Поиск_яйцо!A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = 1 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) If .exists(t) = False Then m = m + 1: .Item(t) = m: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next Else z(.Item(t), 4) = z(.Item(t), 4) + z(i, 4) [b]: z(.Item(t), 7) = z(.Item(t), 7) + z(i, 7)[/b] End If Next Range("B5").Resize(.Count, UBound(z, 2)).Value = z End With ActiveSheet.Range("$A$5:$F$850").AutoFilter Field:=5, Criteria1:="<>" End Sub
Столкнулся с другой проблемой: не считает десятичные числа, которые записаны после запятой. Уже весь интернет перерыл, но конкретного решения не нашёл. Помогите, пожалуйста (если не сложно, то на данном примере, т.к. мне пока трудно ориентироваться в vba).
Столкнулся с другой проблемой: не считает десятичные числа, которые записаны после запятой. Уже весь интернет перерыл, но конкретного решения не нашёл. Помогите, пожалуйста (если не сложно, то на данном примере, т.к. мне пока трудно ориентироваться в vba).SirKelt