HERBERS Excel-Forum - das Archiv
VBA alphabetisch sortieren
WalterK

Hallo,
kann mir jemand bei dem nachfolgenden Code helfen:


Private Sub Worksheet_Activate()
'--- Spalte C nach K kopiern und sortieren
Range("K:K").ClearContents
Range("C5:C" & Cells(Rows.Count, 3).Row).Copy
Range("K2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("K:K").Sort key1:=Range("K2"), order1:=xlAscending, header:=xlYes
End Sub


Mein Problem:
Weil die Namen in Spalte C über Formeln eingetragen werden, werden nach dem Sortieren in K oben zuerst die Leerzellen mitberücksichtigt. Eigentlich sollten ab K2 gleich die Namen angeführt werden.
Eine Frage:
Was bedeutet die 3 in "Range("C5:C" & Cells(Rows.Count, 3).Row).Copy"
hier noch die Tabelle:
https://www.herber.de/bbs/user/53368.xls
Besten Dank und Servus, Walter

AW: VBA alphabetisch sortieren
Klaus

Hallo Walter,
die 3 steht hier für Spalte 3, also Spalte C.
Gruße,
Klaus M.vdT.

AW: VBA alphabetisch sortieren
WalterK

Hallo Klaus,
danke für die Beantwortung meiner Frage. Hast du zum Code-Problem auch noch eine Lösung?
Besten Dank und
Servus, Walter

AW: VBA alphabetisch sortieren
Klaus

Hallo Walter,
zum Code habe ich leider keine Idee, daher Frage noch offen.
Grüße,
Klaus M.vdT.

AW: VBA alphabetisch sortieren
Chris

Servus Walter,
das problem ist, das die Formeln in C den wert " " wiedergeben, somit sind die Zellen nach dem kopieren nicht leer, also werden sie auch beim Sortieren und beim Zählen berücksichtigt.


Sub Anders()
Dim ArrayStamm() As Variant, ArrayZiel() As Variant
Dim x As Long, ii As Long, z As Long
Dim OG&, i&, j&, k&, h, y, r As Variant
ReDim ArrayStamm(1 To Cells(Rows.Count, 3).End(xlUp).Row - 4)
For ii = 5 To Cells(Rows.Count, 3).End(xlUp).Row
ArrayStamm(ii - 4) = Cells(ii, 3)
Next ii
x = 0
For z = LBound(ArrayStamm()) To UBound(ArrayStamm())
If ArrayStamm(z) <> "" Then
ReDim Preserve ArrayZiel(x)
ArrayZiel(x) = ArrayStamm(z)
x = x + 1
End If
Next z
OG = UBound(ArrayZiel())
k = OG \ 2
While k > 0
For i = LBound(ArrayZiel()) To OG - k
j = i
While (j >= 0) And (ArrayZiel(j) > ArrayZiel(j + k))
h = ArrayZiel(j)
ArrayZiel(j) = ArrayZiel(j + k)
ArrayZiel(j + k) = h
If j > k Then
j = j - k
Else
j = LBound(ArrayZiel())
End If
Wend
Next i
k = k \ 2
Wend
For z = LBound(ArrayZiel()) To UBound(ArrayZiel())
Cells(z + 2, 11) = ArrayZiel(z)
Next z
End Sub


In diesem Code werden die leeren Zellen im Array aussortiert und der Rest auch im Array sortiert. Dieser wird dann nach K2 geschrieben.
Gruß
Chris

Danke Chris, passt wunderbar! Servus Walter
WalterK