Найти похожие значения в нескольких столбцах, суммировать и получить диапазон - PullRequest
0 голосов
/ 03 октября 2019

Я пытался решить эту проблему в течение недели, но не смог найти правильный способ сделать это.

enter image description here

Как показанона изображении выше, у меня есть список данных. Столбец A - это идентификатор группы, Столбец B - это подгруппа, и в столбце C есть проценты.

Моя цель - найти A: 1117, цикл в «theSameTitle», суммировать проценты и, если они превышают 10%, Я буду отображать общий процент или некоторый текст в столбце D. Дело в том, что я также хочу объединить соответствующие строки вдоль «суммированного блока». В случае 1117: theSametitle я бы слил 3 строки в столбце D. Это «объединение» для целей отчетности.

Пока я могу найти 1117: theSameTitle и суммировать его, но не могу понять, какопределить, какие строки задействованы для их объединения. Вот код, который я придумал:

Sub determinePercentages()

     ' Select cell A1, *first line of data*.
      Range("A1").Select
      ' Set Do loop to stop when an empty cell is reached.
      Do Until IsEmpty(ActiveCell)
         ' Insert your code here.

         nextCell = ActiveCell.Offset(1, 0).Value
         'nextCell2 = ActiveCell.Offset(1, 3).Value

         If Range("C" & ActiveCell.Row) > 0.1 Then
            'MsgBox (Range("C" & ActiveCell.Row).Value)
            Range("E" & ActiveCell.Row).Value = "YES"
         End If

         'If ActiveCell & ActiveCell.Offset(0, 3) <> nextCell & nextCell2 Then
           curSumIfs = Application.WorksheetFunction.SumIfs(Range("C:C"), Range("A:A"), ActiveCell.Value, Range("B:B"), ActiveCell.Offset(0, 3).Value)
           If curSumIfs >= 0.1 Then
              ActiveCell.Offset(0, 10).Value = curSumIfs
           End If
         'End If

         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop

End Sub

Я также довольно новичок в VBA и Excel. Я не знаю, насколько эффективен мой код. Может быть, есть гораздо лучший способ реализовать это.

Мне нужна ваша помощь:)

1 Ответ

1 голос
/ 03 октября 2019

Один из подходов состоит в том, чтобы «объединить» по ходу дела, сравнивая текущую строку (оба столбца A и B) с предыдущей строкой, и, если она совпадает, то объединяет текущую строку с MergeArea* предыдущей строки. 1003 * в столбце D.

Код, демонстрирующий только слияние (я оставляю вас для включения "YES" и "Sumifs")

Sub DeterminePercentages()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    With ws
        Dim lastRow As Long
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

        Dim i As Long
        For i = 2 To lastRow
            If .Cells(i, 1).Value = .Cells(i - 1, 1).Value Then
                If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then
                    .Range(.Cells(i, 4), .Cells(i - 1, 4).MergeArea).Merge
                End If
            End If
        Next
    End With
End Sub

enter image description here

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