Это делает то, что вы хотите, и масштабируется! это в VBa, хотя. Я знаю, что вы спрашивали о функции листа, но поскольку у вас нет (не было) подходящего ответа, я предлагаю это.
Помните, что отмена невозможна, поэтому сначала сделайте резервную копию вашего файла.
Option Explicit
Sub WalkThePlank()
Dim startRow As Integer
startRow = 2 'update this if needed Cap'ain, assumes content starts on row 2 as your "headings" be on row 1. Argggghhhh
Dim startCol As Integer
startCol = 69 '69 is for Column E, the first column you want to look at. If this be wrong, then I'll feed myself to the sharks
Dim currentCol As Integer
Dim typeToUse As String
Do While Range("A" & startRow).Value <> ""
currentCol = startCol
Do While Range(Chr(currentCol) & 1).Value <> ""
Dim heading As String
heading = Range(Chr(currentCol) & 1).Value
If (LCase(heading) = "type") Then
typeToUse = Range(Chr(currentCol) & startRow).Value
End If
If (LCase(heading) = "ranking") Then
If LCase(typeToUse) = "a" Then
Range("B" & startRow).Value = Range("B" & startRow).Value + Range(Chr(currentCol) & startRow).Value
End If
If LCase(typeToUse) = "b" Then
Range("C" & startRow).Value = Range("C" & startRow).Value + Range(Chr(currentCol) & startRow).Value
End If
If LCase(typeToUse) = "c" Then
Range("D" & startRow).Value = Range("D" & startRow).Value + Range(Chr(currentCol) & startRow).Value
End If
End If
currentCol = currentCol + 1
Loop
startRow = startRow + 1
Loop
End Sub
Как добавить VBA в MS Office?
Единственным критерием является то, что слева направо столбец «Тип» должен находиться перед ранжированием.
На вашем скриншоте у вас есть "группы" из 4 столбцов
Тип Имя Код Рейтинг
С учетом вышесказанного, вы можете иметь группу из 2 или 20! Это все еще будет работать
Если вы добавите дополнительную группу столбцов к правому краю ваших данных, будь то группа из 2, 3, 4 (как у вас есть) или любого другого числа, она все равно будет работать
До
После запуска VBa
Затем удалите значения в столбцах TypeA, TypeB и TypeC и добавьте еще 2 столбца (я опустил столбец с именем Argh
чтобы показать, как другая структура не имеет значения)
И запустить тот же VBa