2015-04-01 3 views
0

Ищете некоторые рекомендации по сортировке столбцов на нескольких листах.Сортировка нескольких листов - очистка кода

У меня есть 2 набора данных (tab1: ABC и tab2: XYZ). Я пытаюсь сортировать оба листа (диапазон столбца А до столбца J) по столбцу А в порядке убывания.

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

Sub sortingcolumns() 

Application.Goto Reference:="ABC!A1" 
ActiveWorkbook.Worksheets("ABC").sort.SortFields.Clear 
ActiveWorkbook.Worksheets("ABC").sort.SortFields.Add Key:=Range("A1"), _ 
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ 
    xlSortTextAsNumbers 
With ActiveWorkbook.Worksheets("ABC").sort 
    .SetRange Range("A2:K187") 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 



Application.Goto Reference:="XYZ!RC" 
ActiveWorkbook.Worksheets("XYZ").sort.SortFields.Clear 
ActiveWorkbook.Worksheets("XYZ").sort.SortFields.Add Key:=Range("A1"), _ 
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ 
    xlSortTextAsNumbers 
With ActiveWorkbook.Worksheets("XYZ").sort 
    .SetRange Range("A2:J179") 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

End Sub 
+0

ответили, или кто-либо еще, правильно ответил на ваш вопрос? – whytheq

+0

привет, почему еще нет, к сожалению. Я попробовал метод tpkaplan, но я не получил его для работы. – xslyx

ответ

0

Поскольку вы используете "с" их можно объединить в одну большую с утверждением:

With ActiveWorkbook.Worksheets("ABC").sort 
    .SortFields.Clear 
    .SortFields.Add Key:=Range("A1"), _ 
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ 
    xlSortTextAsNumbers 
    .SetRange Range("A2:K187") 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

Кроме того, вы можете удалить .header, .matchcase, .orientation, .sortmethod если вы не нужно сортировать их.

0

Мне нравится полностью квалифицировать все объекты, например. ActiveWorkbook будет Excel.ActiveWorkbook. Это личный выбор.

Кроме того, я хотел бы избежать Active... объекты так, если этот код нужно только действовать на книги, где код хранится затем переключиться на ThisWorkbook

With Excel.ThisWorkbook.Worksheets("ABC").sort 
    .SortFields.Clear 
    .SortFields.Add _ 
     Key:=Range("A1"), _ 
     SortOn:=Excel.xlSortOnValues, _ 
     Order:=Excel.xlDescending, _ 
     DataOption:= Excel.xlSortTextAsNumbers 
    .SetRange Range("A2:K187") 
    .Header = Excel.xlNo 
    .MatchCase = False 
    .Orientation = Excel.xlTopToBottom 
    .SortMethod = Excel.xlPinYin 
    .Apply 
End With 

Если он должен действовать на отдельной книге затем использовать переменная объекта. Например, если целевые столбцы в книге под названием foo.xlsx (что мы предполагаем открыт)

Dim myFooBk As Excel.workbook 
Set myFooBk = Excel.workbooks("foo.xlsx") 

With myFooBk.Worksheets("ABC").sort 
    .SortFields.Clear 
    .SortFields.Add _ 
     Key:=Range("A1"), _ 
     SortOn:=Excel.xlSortOnValues, _ 
     Order:=Excel.xlDescending, _ 
     DataOption:= Excel.xlSortTextAsNumbers 
    .SetRange Range("A2:K187") 
    .Header = Excel.xlNo 
    .MatchCase = False 
    .Orientation = Excel.xlTopToBottom 
    .SortMethod = Excel.xlPinYin 
    .Apply 
End With 

Также with может быть немного изменена путем перемещения .Sort в предложении:

Dim myFooBk As Excel.workbook 
Set myFooBk = Excel.workbooks("foo.xlsx") 

With myFooBk.Worksheets("ABC") 
    .sort.SortFields.Clear 
    .sort.SortFields.Add _ 
     Key:= .Range("A1"), _ '<<more specific now as `.` infront of Range 
     SortOn:=Excel.xlSortOnValues, _ 
     Order:=Excel.xlDescending, _ 
     DataOption:= Excel.xlSortTextAsNumbers 
    .sort.SetRange .Range("A2:K187") '<<more specific now as `.` infront of Range 
    .sort.Header = Excel.xlNo 
    .sort.MatchCase = False 
    .sort.Orientation = Excel.xlTopToBottom 
    .sort.SortMethod = Excel.xlPinYin 
    .sort.Apply 
End With 
0
call sortingcolumns ActiveWorkbook.worksheets("ABC"), 2, 187 
call sortingcolumns ActiveWorkbook.worksheets("XYZ"), 2, 179 

Sub sortingcolumns(sht as Worksheet, First as Integer, Last as Integer) 

With sht.sort 
    .sortfields.clear 
    .sortfields.add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlDescending, _ 
     DataOption:=xlSortTextAsNumbers 
    .setrange = sht.range("A" & First & ":K" & Last) 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

End Sub 

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

0

Да, вы можете сократить его по существу:

Sub sortingcolumns() 
    Worksheets("ABC").Range("A2:K187").sort key1:=Range("A1"), Order1:=xlDescending 
    Worksheets("XYZ").Range("A2:J179").sort key1:=Range("A1"), Order1:=xlDescending 
End sub 

Я сделал следующие изменения:

  1. Я использовал (старый) range.sort конструкцию вместо (новее) worksheet.sort. Со старой конструкцией вы просто определяете диапазон сортировки, а затем применяете метод .sort с соответствующими аргументами. Более новая версия также более гибкая, но более сложная в использовании.

  2. Единственными аргументами, которые вам нужны, являются key1 и Order1. Если вы хотите сортировать по возрастанию, вы также можете устранить аргумент order1; то у вас будет только один аргумент.

Если вы не укажете аргумент, Excel будет использовать значение по умолчанию. Все аргументы в вашем фрагменте являются аргументами по умолчанию для метода сортировки. Поэтому вам не нужно указывать их.

+0

Это не сработало. Ошибка времени выполнения «1004»: ссылка сортировки недействительна. Убедитесь, что он находится в пределах данных, которые вы хотите отсортировать, и первое поле сортировки не совпадает или пустое. – xslyx

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