| |
Sortering af celler i kolonne efter
indholdets længde
Denne makro sorter celler i et
område i en kolonne efter længden på cellernes indhold.
Overskrift |
aa |
bbbb |
c |
bbbbb |
a |
xyz |
dd |
vil blive sorteret som
Overskrift |
c |
a |
aa |
dd |
xyz |
bbbb |
bbbbb |
Det forudsættes at området, der
skal sorteres har en overskrift og at der ikke forekommer tomme celler i
området. Er der tomme celler, er det kun det sammenhængende område lige under
overskriften, som sorteres. Et område behøver ikke at starte i række 1, men kan
står hvor som helst i kolonnen. Når makroen startes, skal markøren stå i den
celle, der indeholder overskriften. Står markøren i en anden celle, går makroen
ud fra, at denne celle er overskrift og kun cellerne under den sorteres. Står
markøren i en tom celle, vises en fejlmeddelelse og makroen afbrydes.
Sorteringsrækkefølgen er
stigende. Har flere celler sammen længde, vil den indbyrdes rækkefølge af disse
ikke blive ændret.
Sub SortLgd()
'Denne makro sorter cellerne i en kolonne efter
længden på cellens indhold.
'Når makroen startes skal markøren stå i overskriften i den kolonne, der skal
sorteres
'Har flere celler samme længde, bevares den indbyrdes rækkefølge af disse
'Slå skærmopdatering fra og erklær variable
Application.ScreenUpdating = False
Dim Start As String, Slut As String, Slut2 As String
'Test om markøren
står i en tom celle
If IsEmpty(ActiveCell) Then GoTo err
'Registrer adresse på startcelle og beregn
slutcelle
Start = ActiveCell.Address
slut = ActiveCell.End(xlDown).Address
slut2 = Range(slut).Offset(0, 1).Address
'Indsæt en midlertidig kolonne til højre for
kolonnen, der ønskes sorteret
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
'I den nye kolonne indsættes længden på de celler,
der skal sorteres
For Each c In Range(Start & ":" & slut).Cells
c.Offset(0, 1).Formula = Len(c.Value)
Next c
'Vælg den første celle i den nye kolonne
Range(Start).Offset(0, 1).Select
'Klargør til sortering efter den nye kolonne
'Der sorteres med korteste celle først
ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=ActiveCell.Range("A1"),
SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
'Gennemfør sorteringen
With ActiveWorkbook.Worksheets("Ark1").Sort
.SetRange Range(Start & ":" & slut2)
.Header = xlYes
.Apply
End With
'Slet den midlertidige kolonne
ActiveCell.Columns("A:A").EntireColumn.Select
Selection.Delete Shift:=xlToLeft
'Vælg overskriftscellen igen og slå skærmopdatering
til
Range(Start).Select
Application.ScreenUpdating = True
Exit Sub
'Fejlhåndtering/Slå skærmopdatering til efter fejl
err:
MsgBox "Du skal stå i den første celle, der skal sorteres"
Application.ScreenUpdating = True
End Sub
- Tilbage til makroer -
- Tilbage til Excel -
|