2017-01-23 9 views
0

У меня есть лист с несколькими таблицами на том же листе Sheet1, разделенном пустой строкой.Macro для сортировки данных из нескольких столбцов до следующей пустой строки, затем повторения

Я хочу, чтобы VBA сортировался один за другим.

Соображения

  • Каждая таблица имеет различное количество строк
  • В будущем количество столбцов будет также изменить

Что всегда будет то же самое:

  • Пустая строка между таблицами на столбце B, которая должна быть отправной точкой для превосходства распознавания Это новая таблица.
  • Каждая таблица всегда будет отсортирован по колонке C

Чтобы дать вам более полную картину, я смотрю на кросс-данные вкладки потребителей, где:

столбце А Тип вопроса

КОЛОНКА Б ОТВЕТ вЫБОР

КОЛОННА С заголовка является «TOTAL», и он содержит% на выбор ответа

Остальные COLUMS следуют%, как C, но с разными заголовками, такими как «мужчина» «женщина» «пользователь» «не пользователь» «возраст 18-25» «возраст 26-34» .... и т. Д.

Я хочу создать зацикленный макрос, который будет сортировать каждую таблицу (и все столбцы внутри таблицы) по столбцу C в порядке возрастания, определяя, что он должен искать следующее пустое пространство, а таблица будет ниже.

Я пробовал смотреть на Цикл, Сортировка и поиск следующей пустой ячейки. Но по какой-то причине я не могу собрать кусочки.

Любая помощь будет ОТЛИЧНО оценена!

ORIGINAL FILE

AFTER MACRO DESIRED OUTPUT

Предыдущий код пробовал:


Dim oneArea as Range 

For Each oneArea in Range("C:C").SpecialCells(xlCellTypeConstants).Area 
    oneArea.EntireRow.Sort key1:=oneArea.Cells(1,1), order1:=xlAscending 
Next oneArea 

Для исх: Это один ближайший пример и макро я нашел того, что им будет для, но это не относится к моему сценарию/не может заставить его работать:

Macro to sort data until blank row(s), then repeat

+0

Можете ли вы разместить образцы данных? (Скопируйте/вставьте в виде таблицы) или, в худшем случае, снимок экрана и ожидаемый результат? Кроме того, что вы пробовали до сих пор? Пожалуйста, напишите любой код, который у вас есть. – BruceWayne

+0

Несомненно, я не смог прикрепить excel, добавил несколько скриншотов и кодов. – Tamichan

+0

Для поиска следующей таблицы вы можете использовать 'Selection.End (xlDown). Выберите, и когда вы найдете первую ячейку новой таблицы и выберите ее, вы можете использовать ее для выбора области, которую вы хотите отсортировать:' Selection.resize (Selection. Rows.Count, Selection.Columns.Count - 1) .Offset (0,1) .Выбрать' –

ответ

0

Следующий код цикла через каждую строку в листе, проверка на начало и конец каждой таблицы и сортировать их. Наслаждаться.

Sub Mak1() 
Dim LastRow As Long, LastCol As Long 
Dim TabBeg As Long, TabEnd As Long 

    With Sheets("Sheet1") 
     LastRow = .Cells(.Rows.Count, 2).End(xlUp).row 
     LastCol = .Cells(3, .Columns.Count).End(xlToLeft).Column 
     TabBeg = 4 
     TabEnd = 4 
     For i = 4 To LastRow + 1 
      If .Cells(i, 2).Value = "" Then 
       With .Sort 
        .SortFields.Clear 
        .SortFields.Add Key:=Range(Cells(TabBeg, 3), Cells(TabEnd, 3)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
        .SetRange Range(Cells(TabBeg, 2), Cells(TabEnd, LastCol)) 
        .Header = xlNo 
        .MatchCase = False 
        .Orientation = xlTopToBottom 
        .SortMethod = xlPinYin 
        .Apply 
       End With 
       TabBeg = i + 1 
       TabEnd = i 
      Else 
       TabEnd = TabEnd + 1 
      End If 
     Next i 
    End With 

End Sub 
+0

РАБОТЫ ВЕЛИКИЙ! Спасибо огромное! :) – Tamichan

+0

Вы можете проверить этот зеленый галочку рядом с моим ответом, чтобы отметить его как решение;) – Limak