Добрый день. Есть код благодаря стараниям форумчан, который при заполненных ячейках A столбца суммирует значения столбца D, если в столбце B находятся одинаковые значения:
[vba]
Код
Sub СуммОдинаков() ' просуммировать дублирующий материал и удалить отработанное Dim x, y(), m&, J&, k&, N&, s$ x = Range("B1:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1).Value ReDim y(1 To UBound(x), 1 To UBound(x, 2)) On Error Resume Next With New Collection For m = 1 To UBound(x) s = x(m, 1) & "~" & x(m, 2) If IsEmpty(.Item(s)) Then k = k + 1 For J = 1 To UBound(x, 1) y(k, J) = x(m, J) Next J .Add Item:=k, Key:=s Else N = .Item(s) y(N, 3) = y(N, 3) + x(m, 3) End If Next m End With With Range("B1:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1) .ClearContents: .Resize(k).Value = y() End With ' закрыть Макрос Workbooks("макрос.xlsm").Close SaveChanges:=False End Sub
[/vba]
Хочется, чтобы данный код переносил данные столбца E после суммирования одинаковых, т.е. например: Ячейка E17 содержит значение "38963", хочется чтобы после запуска кода данное значение перекочевало бы в ячейку E6, т.к. "Грунтовка ГФ-021 красно-коричневая" перекочевала из ячейки B18 в ячейку B6. При этом значения стоимости привязанные к Грунтовке в столбце E различны - для решения это не должно составлять никакой нагрузки и можно брать любое значение будь то 42 154,00 или 40 000,00 или 36 000,00 или 37 000,00. Поскольку стоимость не значительно отличается, ...хотелось бы брать среднее арифметическое... однако думаю это сложнее. Помощи прошу.
Добрый день. Есть код благодаря стараниям форумчан, который при заполненных ячейках A столбца суммирует значения столбца D, если в столбце B находятся одинаковые значения:
[vba]
Код
Sub СуммОдинаков() ' просуммировать дублирующий материал и удалить отработанное Dim x, y(), m&, J&, k&, N&, s$ x = Range("B1:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1).Value ReDim y(1 To UBound(x), 1 To UBound(x, 2)) On Error Resume Next With New Collection For m = 1 To UBound(x) s = x(m, 1) & "~" & x(m, 2) If IsEmpty(.Item(s)) Then k = k + 1 For J = 1 To UBound(x, 1) y(k, J) = x(m, J) Next J .Add Item:=k, Key:=s Else N = .Item(s) y(N, 3) = y(N, 3) + x(m, 3) End If Next m End With With Range("B1:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1) .ClearContents: .Resize(k).Value = y() End With ' закрыть Макрос Workbooks("макрос.xlsm").Close SaveChanges:=False End Sub
[/vba]
Хочется, чтобы данный код переносил данные столбца E после суммирования одинаковых, т.е. например: Ячейка E17 содержит значение "38963", хочется чтобы после запуска кода данное значение перекочевало бы в ячейку E6, т.к. "Грунтовка ГФ-021 красно-коричневая" перекочевала из ячейки B18 в ячейку B6. При этом значения стоимости привязанные к Грунтовке в столбце E различны - для решения это не должно составлять никакой нагрузки и можно брать любое значение будь то 42 154,00 или 40 000,00 или 36 000,00 или 37 000,00. Поскольку стоимость не значительно отличается, ...хотелось бы брать среднее арифметическое... однако думаю это сложнее. Помощи прошу.timo64uk