Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Daten im Zweidimensionalem Array sortieren
zurück: Brauche bitte Hilfe einen VBA-Code zu vervollständigen weiter: Via Vba den Wert einer Formel in mehrere Zellen schreiben Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
binh
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. März 2013, 17:45
Rufname:

Daten im Zweidimensionalem Array sortieren - Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo,

Ich lese ein Array mit 4 Spalten insgesamt 3 mal in die ein eindimensionales Array ein, so dass die Daten 3 mal untereinander stehen.
also:
Kunden_Array
Spalte 1 = Markierung für Namensgleiche
Spalte 2 = Kundennummer
Spalte 3 = Nachname
Spalte 4 = Vorname

ComboBox_Array
Vorname Nachname Kundennummer
Nachname Vorname Kundennummer
Kundennummer Nachname Vorname

Dieses Array lese ich in eine CombBox ein, so dass alle 3 Suchbegriffe in der ComboBox eingegeben werden können.
Das klappt auch bereits ganz gut.

Mein Problem dabei ist, dass die Daten nicht sortiert vorliegen.
Sie müssten also 3 mal im Kunden_Array sortiert werden, damit zuerst alle nach Vornamen, dann nach Nachnamen und zuletzt nach Kundennummern, sortiert in der ComboBox landen.
Die Weiterverwurstung der Ergebnisse der Combobox passiert mit Stringzerlegung ist bereits gelöst.


Code:
Option Explicit
Dim ListIndex_Anfang_Nachname As Long
Dim ListIndex_Anfang_Kundennummer As Long
Dim strDatei_alt As String

Private Sub UserForm_Activate()
Dim Sammelmappe$, strDatei$
Dim CB_Array(), Kunden_Array()
Dim maxzeilen&, i&

With Worksheets("Kunden")
    maxzeilen = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    If maxzeilen < 2 Then Exit Sub
    '### Kunden_Array füllen
    Kunden_Array = .Range(.Cells(2, 1), .Cells(maxzeilen, 4)).Value2
End With
ListIndex_Anfang_Nachname = UBound(Kunden_Array) + 1
ListIndex_Anfang_Kundennummer = UBound(Kunden_Array) * 2 + 1
ReDim CB_Array(1 To UBound(Kunden_Array) * 3)
For i = 1 To UBound(Kunden_Array) * 3
    'Suche mit Vornamen beginnen
    If i < UBound(Kunden_Array) + 1 Then
        If Kunden_Array(i, 1) = "" Then
            CB_Array(i) = Kunden_Array(i, 4) & " " & Kunden_Array(i, 3)
        Else
            CB_Array(i) = Kunden_Array(i, 4) & " " & Kunden_Array(i, 3) & "_" & Kunden_Array(i, 2)
        End If
    'Suche mit Nachname beginnen
    ElseIf i > UBound(Kunden_Array) And i < UBound(Kunden_Array) * 2 + 1 Then
        If Kunden_Array(i - UBound(Kunden_Array), 1) = "" Then
            CB_Array(i) = Kunden_Array(i - UBound(Kunden_Array), 3) & " " & Kunden_Array(i - UBound(Kunden_Array), 4)
        Else
            CB_Array(i) = Kunden_Array(i - UBound(Kunden_Array), 3) & " " & Kunden_Array(i - UBound(Kunden_Array), 4) & "_" & Kunden_Array(i - UBound(Kunden_Array), 2)
        End If
    'Suche mit Kundennummer beginnen
    ElseIf i > UBound(Kunden_Array) * 2 Then
        If Kunden_Array(i - UBound(Kunden_Array) * 2, 1) = "" Then
            CB_Array(i) = Kunden_Array(i - UBound(Kunden_Array) * 2, 2) & " " & Kunden_Array(i - UBound(Kunden_Array) * 2, 3) & " " & Kunden_Array(i - UBound(Kunden_Array) * 2, 4)
        Else
            CB_Array(i) = Kunden_Array(i - UBound(Kunden_Array) * 2, 2) & " " & Kunden_Array(i - UBound(Kunden_Array) * 2, 3) & " " & Kunden_Array(i - UBound(Kunden_Array) * 2, 4) & "_" & Kunden_Array(i - UBound(Kunden_Array) * 2, 2)
        End If
    End If
Next i
CB_Name.List = CB_Array
End Sub


Ich hoffe ich habe es nicht zu umständlich erklärt und mir kann jemand helfen.

LG
Binh
slowboarder
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. März 2013, 17:58
Rufname:


AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

HI

man kann das kompliziet lösen, indem man sich eine Sortierfunktion programmiert, man kann das aber auch einfach lösen, indem man das Array ein ein leeres Exceltabellenblatt schreibt, dort mit der Excelfunktion "Sortieren" sortiert und von dort in die Combobox liest.

Gruß Daniel
binh
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. März 2013, 19:39
Rufname:

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo Daniel,

du hast sicher recht, dass es auch einfacher geht.
Bei mir müsste das aber jedesmal gemacht werden, wenn die Userform mit der ComboBox geöffnet wird. Das finde ich nicht sehr elegant, werde es nun aber so machen
. Weil ich keine bessere Lösung parat habe. Sad

LG
Binh
Isabelle :-)
Menschin


Verfasst am:
24. März 2013, 20:11
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallöchen,

das Zauberwort heißt QuickSort. Und so funktioniert das:

Code:
Private Sub UserForm_Activate()
    Dim Kunden_Array() As Variant
    Dim maxzeilen As Long

    With Worksheets("Kunden")
        maxzeilen = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
        If maxzeilen < 2 Then Exit Sub
        Kunden_Array = .Range(.Cells(2, 1), .Cells(maxzeilen, 4)).Value2
    End With

    Call QuickSort(LBound(Kunden_Array), UBound(Kunden_Array), Kunden_Array, 1) 'sortieren nach Spalte 1

    Call QuickSort(LBound(Kunden_Array), UBound(Kunden_Array), Kunden_Array, 2) 'sortieren nach Spalte 2

    Call QuickSort(LBound(Kunden_Array), UBound(Kunden_Array), Kunden_Array, 3) 'sortieren nach Spalte 3

End Sub

Private Sub QuickSort(lngLBound As Long, lngUBound As Long, avntArray As Variant, lngSortColumn As Long)
    Dim lngIndex1 As Long, lngIndex2 As Long, lngColumn As Long
    Dim vntBuffer As Variant, vntTemp As Variant
    lngIndex1 = lngLBound
    lngIndex2 = lngUBound
    vntTemp = avntArray((lngLBound + lngUBound) \ 2, lngSortColumn)
    Do
        Do While avntArray(lngIndex1, lngSortColumn) < vntTemp
            lngIndex1 = lngIndex1 + 1
        Loop
        Do While vntTemp < avntArray(lngIndex2, lngSortColumn)
            lngIndex2 = lngIndex2 - 1
        Loop
        If lngIndex1 <= lngIndex2 Then
            For lngColumn = LBound(avntArray, 2) To UBound(avntArray, 2)
                vntBuffer = avntArray(lngIndex1, lngColumn)
                avntArray(lngIndex1, lngColumn) = avntArray(lngIndex2, lngColumn)
                avntArray(lngIndex2, lngColumn) = vntBuffer
            Next
            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1
        End If
    Loop Until lngIndex1 > lngIndex2
    If lngLBound < lngIndex2 Then Call QuickSort(lngLBound, lngIndex2, avntArray, lngSortColumn)
    If lngIndex1 < lngUBound Then Call QuickSort(lngIndex1, lngUBound, avntArray, lngSortColumn)
End Sub

Die Aufrufe der Sortierroutine kommen bei dir natürlich nicht direkt hintereinander wie im Beispiel, sondern immer dann, wenn du das umsortierte Array benötigst.

Das ist auch erheblich schneller als der Umweg über eine Tabelle.

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
Flotter Feger
Gast


Verfasst am:
24. März 2013, 20:21
Rufname:


AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallöchen du,

wenn du ein 'mehrdimensionales Array sortieren' willst, dann such doch mal genau danach in der Forum-Suche. Ist doch gar nicht so schwer.

Z.B. hier http://www.office-loesung.de/ftopic507677_0_0_asc.php&highlight=mehrdimensionales+array+sortieren der Post von "ransi" weiter unter zeigt wie es gehen könnte.

Aber auch alle anderen Ergebnisse zeigen Möglichkeiten auf, wie man das Problem lösen kann. Viel Spaß beim Lesen. Wink

VG Sabina Rolling Eyes
Phelan XLPH
Fortgeschritten


Verfasst am:
24. März 2013, 21:00
Rufname: Phelan

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo Isi,

hast du auch ein Beispiel für Mergesort?

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Heinz Schweigert
.


Verfasst am:
24. März 2013, 21:14
Rufname: Heinz

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo Phelan

Ist deine Suchmaschine ausgefallen? Ausserdem so wie ich das mitverfolge kannst du dir das auch easy selbst schreiben Razz

Bsp. für MergeSort gibts hier

Grüße Heinz
Isabelle :-)
Menschin


Verfasst am:
24. März 2013, 21:21
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallöchen,

in meiner Linksammlung gibt es noch folgendes:

http://www.online-excel.de/fom/fo_read.php?f=1&bzh=1918&h=1596

Ich wüsste doch dass ich die irgendwann mal brauche.

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
binh
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. März 2013, 21:49
Rufname:

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo,

Vielen Dank für die Hilfe. Ich kann das erst morgen testen. Aber ich denke das Beispiel von Ransi bzw. Nepumuk ist am besten, weil es mehrere Sortierkriterien zulässt.
Sonst würde mir auch Isis Tip ausreichen.

LG
Binh
Phelan XLPH
Fortgeschritten


Verfasst am:
24. März 2013, 22:25
Rufname: Phelan

AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Danke an alle beteiligten.
_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
binh
Im Profil kannst Du frei den Rang ändern


Verfasst am:
25. März 2013, 07:12
Rufname:


AW: Daten im Zweidimensionalem Array sortieren - AW: Daten im Zweidimensionalem Array sortieren

Nach oben
       Version: Office 2003

Hallo,

ich habe den QuickSort mit mehreren Sortierkriterien Code von Nepumuk genommen
http://www.online-excel.de/excel/singsel_vba.php?f=97
Das klappt wie geschmiert.
Vielen Dank an alle!!!

LG
Binh
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Verkn�pfung Daten aktualisieren 0 Steffi1976 1039 30. Mai 2005, 16:22
Steffi1976 Verkn�pfung Daten aktualisieren
Keine neuen Beiträge Excel Formeln: Excel: Daten aus Spalte A in B übernehmen 2 cabot 1312 24. Mai 2005, 13:47
cabot Excel: Daten aus Spalte A in B übernehmen
Keine neuen Beiträge Excel Formeln: Makro fürs Sortieren 2 nhs47800 1951 11. Mai 2005, 09:47
nhs Makro fürs Sortieren
Keine neuen Beiträge Excel Formeln: Daten in Spalte: Reihenfolge umkehren 4 ggaribaldi 8901 09. Mai 2005, 16:32
ggaribaldi Daten in Spalte: Reihenfolge umkehren
Keine neuen Beiträge Excel Formeln: daten in EINER zelle zusammenführen 1 thompson 807 23. Apr 2005, 18:13
fl618 daten in EINER zelle zusammenführen
Keine neuen Beiträge Excel Formeln: Beim Import von Daten automatisch zusammenzählen 8 Schoki 1146 20. Apr 2005, 09:52
Schoki Beim Import von Daten automatisch zusammenzählen
Keine neuen Beiträge Excel Formeln: Excel Daten in Word an eine bestimmte stelle einfügen 7 Anne 2260 04. März 2005, 13:10
The BOO-M-AN Excel Daten in Word an eine bestimmte stelle einfügen
Keine neuen Beiträge Excel Formeln: daten sortieren 8 Gast 2141 10. Feb 2005, 15:00
Andy Knecht daten sortieren
Keine neuen Beiträge Excel Formeln: Sortieren einer Tabelle 5 sandihau 635 05. Feb 2005, 11:24
Nepumuk Sortieren einer Tabelle
Keine neuen Beiträge Excel Formeln: Dropdownliste mit Daten aus anderer Tabelle 9 Arri 2357 31. Jan 2005, 18:34
Arri Dropdownliste mit Daten aus anderer Tabelle
Keine neuen Beiträge Excel Formeln: Daten aus Pivot-Tabelle holen 2 twistx 2239 31. Jan 2005, 16:47
Gast Daten aus Pivot-Tabelle holen
Keine neuen Beiträge Excel Formeln: Namensliste in Tabllenblätter sortieren... 5 manfredo67er 1123 22. Jan 2005, 20:56
A.Knecht Namensliste in Tabllenblätter sortieren...
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Dreamweaver Forum