1

У меня есть ситуация, как показано ниже. Есть группы строк. Над каждой группой находится небольшой "заголовок", описывающий поле данных, которое объединяет все строки в группе. Я хочу создать сводную таблицу всего и включить это поле (GroupID), следовательно, я хочу вторую версию таблицы. Есть ли способ сделать это за исключением записи макроса? Или, возможно, существует способ создания сводной таблицы напрямую?

Я имею:

GroupID
4

Name      Email       Likes   Dislikes
herpina   something   Cake    Excel
derpina   something   Cake    Excel

GroupID
5

Name      Email       Likes   Dislikes
roflmao   something   Cake    Hmm
roflomg   something   Baking  test
testtttt  something   Sleep   22

GroupID
1

Name      Email       Likes   Dislikes
OAG       something   OAB     N/A
OAB       something   N/A     N/A

Желаемая:

Name      Email       Likes   Dislikes  GroupID
herpina   something   Cake    Excel     4
derpina   something   Cake    Excel     4
roflmao   something   Cake    Hmm       5
roflomg   something   Baking  test      5
testtttt  something   Sleep   22        5
OAG       something   OAB     N/A       1
OAB       something   N/A     N/A       1

Этот пример ввода также находится по адресу https://dl.dropbox.com/u/736090/Book1.xlsx.

1 ответ1

2

Вот макрос как можно короче

  • откройте Excel и нажмите ALT+ F11
  • вставьте приведенный ниже код в лист1 или где ваши данные
  • закройте редактор VBA, нажмите ALT+ F8 и выполните макрос

    Sub deletelines()    
      Range("A4:D4").Copy
      Range("A1").Insert Shift:=xlToRight
      For i = 2 To Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = Cells(i - counter, 1)
        if IsNumeric(c) And c <> "" Then groupID = c
        If c = "" Or c = "Name" Or c = "GroupID" Or IsNumeric(c) Then
          Rows(i - counter).Delete
          counter = counter + 1
        Else
          Cells(i - counter, 5) = groupID
        End If
      Next i   
    End Sub
    

Поскольку это сайт вопросов и ответов, я опишу код. Таким образом, это может быть полезно для других, кто может легко адаптировать и настроить код.

  • Строка 1+14: запускает и заканчивает макрос (подпрограмма)
  • Строка 2+3: скопируйте диапазон [A4: D4] и вставьте его перед [A1]. Это формирует вашу строку заголовка
  • Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row определяет последнюю использованную ячейку. В вашем примере его 22
  • Строка 4: это цикл, который начинается в 2 и заканчивается в 22. i используется как индекс строки
  • Строка 5: сохраняет первую ячейку текущей строки. Общий синтаксис - cells(rownumber,columnnumber)
    Внимание: так как мы удаляем строки, мы должны вычесть, сколько строк мы уже удалили.
  • Строка 6: посмотрите, является ли число c , и сохраните его как наш правильный идентификатор группы, пока мы не найдем другое число.
  • Строка 7: это условие, которое проверяет, является ли текущее значение ячейки "Имя", "GroupID", пустым или Число.
  • Строка 8: если условие истинно, удаляется вся строка
  • Строка 9: если условие истинно, это подсчитывает счетчик howmanydeletedlines
  • Строка 10-12: если условие ложно, это должна быть хорошая строка данных, которую мы хотим сохранить
  • Строка 13: переходит к следующему i которое обозначает нашу текущую строку

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .