2016-06-02 1 views
1

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

на данный момент, у меня есть:

ActiveCell.CurrentRegion.Select 
ActiveSheet.Sort.SortFields.Clear 
ActiveSheet.Sort.SortFields.Add Key:=ActiveCell.CurrentRegion, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveSheet.Sort 
    .SetRange ActiveCell.CurrentRegion 
    .Header = xlNo 
    .MatchCase = False 
    .Orientation = xlLeftToRight 
    .SortMethod = xlPinYin 
    .Apply 
    End With 
End Sub 

Теперь, есть по крайней мере 2 проблемы с этим: 1) Я знаю, что CurrentRegion не дает мне то, что я хочу, но что более важно, это дает мне ошибку, ссылка недействительна

+0

Excel предназначен для сортировки по вертикали, а не по горизонтали. Можете ли вы поместить данные в столбец, а затем отсортировать его? – tigeravatar

+2

На самом деле, .Orientation заботится о горизонтальной проблеме ... –

ответ

1

См. приведенный ниже код для примера сортировки на основе y наши потребности. Примечание: код устанавливает диапазон сортировки для INCLUDE столбца activecell.

Сообщите нам, если вам нужна дополнительная помощь, адаптирующая его или любые другие вопросы, которые могут возникнуть у вас.

Sub SortBasedOnActiveCell() 
    Dim sActive As Worksheet 
    Dim rActive As Range 
    Dim rLastCell As Range 
    Dim rSortRange As Range 

    Set sActive = ActiveSheet 
    Set rActive = ActiveCell 

    'Below will work if the sheet is laid out "normally" 
    'with contiguous rows and columns. If not, then consider building 
    'in different business logic to determine the end of your sort range 
    Set rLastCell = sActive.Cells.SpecialCells(xlCellTypeLastCell) 
    Set rSortRange = Range(sActive.Cells(1, rActive.Column), rLastCell) 

    sActive.Sort.SortFields.Clear 
    sActive.Sort.SortFields.Add Key:=Intersect(sActive.Rows(1), rSortRange), _ 
     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With sActive.Sort 
     .SetRange rSortRange 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlLeftToRight 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End Sub 
Смежные вопросы