2016-06-02 5 views
1

Ich möchte ein VB-Skript in Excel schreiben, die im Grunde alle Spalten rechts von (oder enthält) die aktive Zelle nehmen und sortieren sie auf Zeile links nach rechts 1.VBA sortieren eine Region von colums

derzeit, ich habe:

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 

Nun gibt es mindestens zwei Probleme: 1) ich weiß, dass Current gibt mir nicht, was ich will, aber noch wichtiger ist, das gibt mir einen Fehler, Die Sortierreferenz ist nicht gültig.

+0

Excel wurde entwickelt, um vertikal, nicht horizontal zu sortieren. Können Sie die Daten in eine Spalte einfügen und dann sortieren? – tigeravatar

+2

eigentlich kümmert sich die .Orientation um das horizontale Problem ... –

Antwort

1

Siehe nachstehender Code für ein Beispiel für die Sortierung anhand von y unsere Bedürfnisse. Hinweis: Der Code legt den Sortierbereich auf INCLUDE der Spalte der aktiven Zelle fest.

Lassen Sie uns wissen, wenn Sie zusätzliche Hilfe bei der Anpassung oder bei anderen Fragen benötigen.

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 
Verwandte Themen