2015-10-06 6 views
0

Я делаю список электронной почты в Excel с тремя столбцами. На листе у меня есть две кнопки: «sort by Name» и «sort by Date added». Я хотел бы отсортировать все три столбца с помощью выбранной кнопки, чтобы быстрее находить записи (я также вхожу в отдельную функцию поиска позже).Сортировка нескольких столбцов по одному столбцу

В принципе, я хочу функцию сортировки, которая уже находится на панели инструментов на рабочем листе, где вы можете просто нажать ее, и она знает, какой столбец сортировать уже. Я видел вещи для макросов и для VBA, но все они сортируют столбцы по отдельным параметрам, тогда как мне нужны эти столбцы.

+0

Вы пробовали какой-либо код? Если нет, попробуйте записать макрос и посмотреть, как он это делает. Это должно дать вам представление о том, что делать в коде. Затем, если вы застряли, вернитесь с кодом, который вы сделали, и мы поможем вам исправить его (поскольку SO не является сайтом запроса кода). – Tim

+0

Я хотел бы уточнить, что я ни в коем случае не ищу, чтобы кто-то написал это для меня - скорее, мне хотелось бы, чтобы методы использовались раньше, а команды хорошо работали. Например, я даже не знал, что вы можете записать макрос - проспекты, которые я сделал, прежде чем никогда не заставляли меня осознавать, что могу. Я смотрю на это сейчас – Miksoko

ответ

1

Код, созданный рекордером на Range.Sort method, является очень подробным и может быть сокращен совсем немного до того, что необходимо.

Если столбцы A: C были Имя, Email, Дата добавления тогда это будет сортировать по Имя первым, затем Дата добавления.

with worksheets("sheet1") '<~~ set this properly! 
    with .cells(1, 1).currentregion '<~~ assumes data starts in A2 with a header row in A1:C1 
     .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _ 
        Key2:=.Columns(3), Order2:=xlAscending, _ 
        Orientation:=xlTopToBottom, Header:=xlYes 
    end with 
end with 

Это будет сортировать по Дата добавления, а затем Имя.

with worksheets("sheet1") '<~~ set this properly! 
    with .cells(1, 1).currentregion '<~~ assumes data starts in A2 with a header row in A1:C1 
     .Cells.Sort Key1:=.Columns(3), Order1:=xlAscending, _ 
        Key2:=.Columns(1), Order2:=xlAscending, _ 
        Orientation:=xlTopToBottom, Header:=xlYes 
    end with 
end with 

Вы можете иметь до 3 ключи. Не более того, и вам нужно дважды запускать процедуру. Противоположностью xlAscending является, конечно, xlDescending.

0

Лучший способ найти то, что уже находится на панели инструментов, - использовать «Макро-рекордер» в пустой/новой книге, а затем посмотреть на код.

Являются ли столбцы смежными друг с другом? Потому что, если так, вы можете использовать что-то вроде этого;

//Alright, so this is if you wanted each of the columns to have their 
//own values that you are sorting by, if you just want one criteria, 
//just use one of the lines 
Dim varName as String 
Dim varDate as String 
Dim varExtra as String 

ActiveSheet.Range("A:C").AutoFilter Field:=1, Criteria1:=varName 
ActiveSheet.Range("A:C").AutoFilter Field:=2, Criteria1:=varDate 
ActiveSheet.Range("A:C").AutoFilter Field:=3, Criteria1:=varExtra 

В основном, это говорит для трех столбцов данных, надо найти поле (которое будет соответствовать колонку) указано и фильтр по критериям. Вы также можете использовать строковое значение в месте Criteria вместо переменной.

Смежные вопросы