Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

mehrdimensionales array einlesen sortieren

mehrdimensionales array einlesen sortieren
10.04.2008 07:44:30
chris
Hallo VBA Profis,
habe eine Bitte.
Würde mich sehr freuen wenn mir jemand helfen könnte.
Ich möchte gerne ein Array sortieren und weiß nicht welches ich anwenden kann.
Habe zwar eine gute seite gefunden in dem mehere Beispiele enthalten sind um array zu sortieren aber ich weiß nicht wie ich es umstellen soll das es für mich funktioniert.
Hier meine Makros bis jetzt
'______________________ Mit diesem Makro fülle ich das erste array
With obj_datenbank.Worksheets(1)
x1 = .Cells(.Rows.Count, 2).End(xlUp).Row
'Letzte Spalte mit Daten ermitteln
y1 = .Cells(1, .Columns.Count).End(xlToLeft).Column
'For y1 = .Columns.Count To 1 Step -1
' If Application.WorksheetFunction.CountA(.Columns(y1)) > 0 Then Exit For
'Next y1
'Array füllen über Spalten in Datenbank mit Daten
arrTmp1 = .Range(.Cells(3, 2), .Cells(x1, y1))
arrTmp1 = WorksheetFunction.Transpose(arrTmp1)
End With
'______________________ Mit diesem Makro das zweite.Das hat dann mehere Dimensionen.(Dises möchte ich sortieren nach Spalte A .)
For i = 1 To x1 - 2
If UCase(Left(arrTmp1(1, i), 1)) = UCase(strSuch) Then
n = n + 1
'arrTmp2(n) = UCase(arrTmp1(welche_suche, i))
arrTmp2(n, 0) = UCase(arrTmp1(welche_suche, i))
arrTmp2(n, 1) = UCase(arrTmp1(106, i))
arrTmp2(n, 2) = UCase(arrTmp1(108, i))
End If
Next
Bis jetzt habe ich es mit Quick Sort versucht aber das geht nur bei einer dimension.
Würde mich sehr über Hilfe freuen.
Danke und schönen Tag an alle.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrdimensionales array einlesen sortieren
10.04.2008 08:36:00
Harald
Hallo Chris,
es sollte auch mit quicksort oder jedem anderen eindimensionalen Sortieralgorithmus gehen, allerdings mit einer Modifikation:
Im eindimensionalen Algorithmus vergleichst Du zwei Werte array1(n) und array1(m). Ggfls. tauschst Du die Elemente array1(mn)array1(m)
Das erweiterst Du:
vergleiche array1(n,0) mit array1(m,0) Wenn Tausch nötig, dann tausche
array1(n,0) array1(m,0)
array1(n,1) array1(m,1)
array1(n,2) array1(m,2)
array1(n,3) array1(m,3)
So stellst Du sicher, dass array1 in der zweiten Dimension immer konsistent bleibt.
Logischer wäre - aber mit weit gehender Änderung Deiner Datenstruktur - die ohenhin zusammengehörenden Daten (also die 2. Dimension Deines Arrays) als entsprechenden Datentyp zu definieren. Dann benötigst Du nur ein eindimensionales Array von Deinem benutzerdefinierten Datentyp, welches Du wie gewohnt mit einem eindimensionalen Sortieralgorithmujs bearbeiten kannst.
Beispiel aus der Excel Hilfe:
'Festlegen des bebnutzerdefinierten Typs:
Type Typ1
Name1 As String ' String-Variable für Namen.
Geburtstag As Date ' Date-Variable für
' Geburtstag.
Geschlecht As Integer ' Integer-Variable für
' Geschlecht
End Type ' (0 für weiblich, 1 für männlich).
' Definieren des Arrays:
dim array1 as Typ1(MAXINDEX)
'MAXINDEX ist die von Dir zu definierende Obergrenze für das Array. Alternativ mittels "Redim Preserve" dynamisch festzulegen.
Gruß Harald

Anzeige
AW: mehrdimensionales array einlesen sortieren
10.04.2008 13:35:00
chris
Wow danke Harald und Rainer,
ich bekomme es nicht hin :(
Auch mit Quick sort nicht und mir dem Dateityp auch nicht Harald.
Würde mich sehr über hilfe freuen.
Vielleicht auch am besten so das ichs dann auch selbst kann also verstehe.
So fülle ich mein Array: ("arrTmp2")
For i = 0 To UBound(ListArray1)
For ii = 1 To x1 - 2
If UCase(arrTmp1(welche_suche, ii)) = UCase(ListArray1(i, 0)) Then
If InStr(UCase(arrTmp1(welche_suche, ii)), "P") = 0 Then
arrTmp2(n, 0) = UCase(arrTmp1(welche_suche, ii))
arrTmp2(n, 1) = UCase(arrTmp1(107, ii))
arrTmp2(n, 2) = UCase(arrTmp1(105, ii))
n = n + 1
Exit For
Else
ii = 0
Exit For
End If
End If
Next
Next
Aber es klappt nicht mit dem Quicksort:
Auch mit den anderen Sortiervarianten komme ich nicht zurecht Rainer. Ich meine denk Link den du mir geschickt hast.
So sieht meine Quicksort aus die ich hier aus dem Forum habe:

Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 


Würde mich sehr über eine erneute Hilfestellung freuen.
Weiß nicht was ich machen soll.
Was ich auch nicht verstehe trotz End


Sub   im Quicksort makro also wenn ich mit einzelschritt durchgehe wird die Quicksort immer  _
wieder erneut aufgerufen.
Bei einem 1 Dimensionalen Array klappt das aber ich bekomme es nicht hin.
Danke noch einmal an alle helfer im vorraus !
danke gruß Chris

Anzeige
Na, dann sieh dir doch auch noch den...
10.04.2008 14:17:00
Luc:-?
...rlx-Monolog (2 Teile) zu Sortieralgorithmen an, Chris!
Gruß Luc :-?

AW: mehrdimensionales array einlesen sortieren
10.04.2008 14:23:00
Rudi
Hallo,

Vielleicht auch am besten so das ichs dann auch selbst kann also verstehe.


Wie noch?
Nepumuks Beschreibung ist doch sehr ausführlich.


durchgehe wird die Quicksort immer  wieder erneut aufgerufen.


Welch Wunder! Was steht denn da:


If (V_high2 > V_Low1) Then Call  _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 Call _
QuickSort(VA_array, V_Low2, V_high1)


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
OT: Deshalb mein Link,...
10.04.2008 14:35:00
Luc:-?
...Rudi!
Ralf erläutert das Alles (fast) DAU-sicher... ;-)
Gruß Luc :-?

AW: OT: Deshalb mein Link,... Jepp! kenn ich
10.04.2008 15:08:06
Rudi

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige