Как суммировать / объединять похожие строки в Excel, используя VBA? - PullRequest
2 голосов
/ 20 июня 2011

Я пытаюсь построить простой макрос в VBA для Excel, который бы суммировал [объединять] все строки с одинаковым именем (значение в первых столбцах).Так, например,

ExampleRowA 1 0 1 1 3 4
ExampleRowA 2 1 2 2 1 0
ExampleRowC 9 7 7 7 2 5

результат должен выглядеть следующим образом

ExampleRowA 3 1 3 3 4 4
ExampleRowC 9 7 7 7 2 5

Мы можем предположить, что строки, которые необходимо объединить, не разбросаны и могут появляться только одна за другой.

Я сделал что-то подобное, и это почти работает, за исключением того, что мне нужно запустить его два раза.

LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction


     For iRow = 2 To LastRow
        If Cells(iRow, 1) = Cells(iRow + 1, 1) Then
            LastCol = r(r.Count).Column
            SumCol = LastCol + 1
                For iCol = 2 To SumCol
                Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
                Next iCol
            Rows(iRow + 1).Delete
        End If
     Next iRow

End With

Я занимался программированием на других языках сценариев, но я новичок в VB/ VBA и не знаю его возможностей / ограничений.

В других языках я бы, вероятно, использовал массивы, но я не понимаю, как они работают здесь.Я не могу отрицать, что из-за нехватки времени я предпочитаю учиться, анализируя примеры, а не читая 500-страничную Библию VBA.

Ответы [ 4 ]

3 голосов
/ 20 июня 2011

Попробуйте что-то вроде этого:

LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction

    For iRow = LastRow-1 to 2 step -1
        do while Cells(iRow, 1) = Cells(iRow + 1, 1) 
            LastCol = r(r.Count).Column
            SumCol = LastCol + 1
               For iCol = 2 To SumCol
               Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
               Next iCol
            Rows(iRow + 1).Delete
        loop
    Next iRow

End With
2 голосов
/ 20 июня 2011

Этот код легче читать и делает свою работу:

Sub Macro1()
    Dim ColumnsCount As Integer

    ColumnsCount = ActiveSheet.UsedRange.Columns.Count

    ActiveSheet.UsedRange.Activate


    Do While ActiveCell.Row <= ActiveSheet.UsedRange.Rows.Count
        If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
            For i = 1 To ColumnsCount - 1
                ActiveCell.Offset(0, i).Value = ActiveCell.Offset(0, i).Value + ActiveCell.Offset(1, i).Value
            Next
            ActiveCell.Offset(1, 0).EntireRow.Delete shift:=xlShiftUp
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop


End Sub
0 голосов
/ 08 октября 2015

Для решения вашей проблемы вам не нужны макросы или какой-либо код VBA.

Вы можете начать, открыв лист с таблицей, содержащей повторяющиеся значения. Выполните шаги:

  1. Поместите курсор Excel в место, где вы хотите объединить данные. Затем перейдите на вкладку «Данные»> «Объединить». enter image description here
  2. Появится диалоговое окно консолидации.
  3. Здесь введите таблицу с дублированными значениями и нажмите кнопку Добавить, чтобы добавить эти значения.
  4. Затем выберите строку / столбец, в зависимости от того, какие значения совпадают. В этом его левая колонка. enter image description here
  5. Просто нажмите ОК, и все готово. enter image description here
0 голосов
/ 09 июля 2015

', если вам нужно запустить макрос дважды, idk поставит 1: on top of your macro and on the bottom put goto 1 «Это будет работать дважды для вас 'или вы можете вызвать его дважды в другом макросе. до вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...