Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] Array erweitern
#11
Kurzes Update, falls es wen noch interessiert: 

Die Geschwindigkeit war bei einem so kleinen Array (19,4) tatsächlich eher nachrangig. Allerdings war quicksort für meine Belange nicht das richtige, da die Sortierung immer etwas anders war, jedes Mal wenn ich das Makro gestartet habe. 
Mit der Excel-Sortierung habe ich es nun umgesetzt und konnte da als nachrangige Sortierung zusätzlich eine customlist nutzen. Noch stürzt das Makro reproduzierbar nach dem sortieren und anschließendem speichern ab. Google half hier jedoch - man muss die sortfields clearen..... Warum auch immer. 

Gruß
Antworten Top
#12
Moin!
Nimm nicht die Worksheet.Sort-Methode, sondern die Range.Sort-Methode
Letztere kann zwar "nur" 3 Keys, kennt aber auch OrderCustom
(und Du brauchst Dich nicht um SortFields kümmern)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • EasY
Antworten Top
#13
Mh...

dachte, dass ich eine Range sortiere.

Code:
Public Sub Array_ExcelSort(ByRef vArrayName As Variant)
Dim vReturnArray As Variant
Dim lLower As Integer
Dim lUpper As Long
Dim i As Long

Dim lngCLC As Long
Dim lngListExist As Long
Dim lngOC As Long
Dim vListArr As Variant

Dim FirstCell As Range
Dim LastCell As Range
Dim CurrCell As Range
Dim FillRange As Range
   
    lLower = LBound(vArrayName, 1)
    lUpper = UBound(vArrayName, 1)
   
    Set FirstCell = Sheets("Zwischenspeicher").Cells(34, 1)
    Set LastCell = Sheets("Zwischenspeicher").Cells(lUpper + 33, 4)
    Set FillRange = Range(FirstCell, LastCell)
   
    Application.ScreenUpdating = False
    ReDim vReturnArray(lLower To lUpper)
    FillRange.Value = vArrayName
   
vListArr = Sheets("Mitarbeiter").Range("B9:B214")
lngListExist = Application.GetCustomListNum(vListArr)
If lngListExist > 0 Then
    lngOC = lngListExist + 1
Else
    Application.AddCustomList listArray:=vListArr
    lngCLC = Application.CustomListCount
    lngOC = lngCLC + 1
End If
    FillRange.Sort Key1:=FirstCell, Order1:=xlAscending, OrderCustom:=lngOC, MatchCase:=False, Orientation:=xlTopToBottom
    Sheets("Zwischenspeicher").Sort.SortFields.Clear
If lngListExist = 0 Then Application.DeleteCustomList ListNum:=lngCLC
   
    FillRange.Sort Key1:=FirstCell.Offset(0, 3), Order1:=xlAscending, Orientation:=xlTopToBottom
    vArrayName = FillRange
   
    FillRange.Clear
    Application.ScreenUpdating = True

End Sub


So scheint es nun zu funktioneren. Der Code ist aus dem Internet aus zwei Codes zusammenkopiert.
Antworten Top
#14
Code:
Sub M_snb()
  sn = Sheets("Mitarbeiter").Range("B9:E214")

  Cells(1, 60).Resize(UBound(sn), UBound(sn, 2)) = sn
  Cells(1, 60).currentregion.Sort Cells(1, 60), , Cells(1, 64)
  sn = Cells(1, 60).CurrentRegion
  Cells(1, 60).CurrentRegion.Clear
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • EasY
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste