Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 2Dimensionales Array sortieren

2Dimensionales Array sortieren
jowe
Hallo,
habe gerade viele Beiträge zum Thema gelesen - leider habe ich bislang für meine Frage keine Lösung gefunden oder die gefundenen Lösungen nicht für mich umsetzen können oder vielleicht auch nicht verstanden. Daher brauch ich jetzt mal Eure Hilfe: Meine Tabelle enthält in einer beliebigen Zeile eine beliebige Anzahl von unsortierten Tagesdaten, z.B. '18.07.2010'. In der direkt darunter befindlichen Zeile befindet sich für jedes Datum eine Zeitspanne, z.B. '07:00 - 14:00'. Ich möchte diese Datenpaare in eine 2-dimensionales Array einlesen, sortien und in den Originalbereich zurückschreiben. Ich möchte keine temporäre Tabelle benutzen.
Hier mal eine kleine Beispieltabelle mit nur 4 Datenpaaren
Tabelle1

 ABCD
118.07.201012.09.201016.03.201006.02.2010
207:00 - 14:0014:00 - 22:0022:00 - 07:0015:00 - 22:30


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß
Jochen
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 2Dimensionales Array sortieren
18.07.2010 19:47:48
Klaus-Dieter
Hallo Jochen,
das kannst du doch mit der Standard Sortierfunktion von Excel machen. Daten / Sortieren / Optionen / nach Spalten sortieren.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: 2Dimensionales Array sortieren
18.07.2010 19:59:58
jowe
Hallo Klaus-Dieter,
danke für Deine Antwort. Das würde ich ja machen- aber die Menschen die's letzlich machen sollen, bringen mir immer alles durcheinander. Daher die Ide mit dem Makro, welches die Wertepaare ausliest, sortiert und wieder zurückschreibt.
Gruß
Jochen
AW: 2Dimensionales Array sortieren
19.07.2010 12:29:56
Klaus
Hallo Jochen,
schmeiss den Makrorekorder an, benutze einmal die Standard Sortierfunktion von Excel, Makrorekorder wieder aus. Du erhälst ein Makro, dass genau macht was du möchtest. Eventuell nochmal per Hand drüber gehen und die selects rausschmeißen, das wär dann aber schon nur fürs Gewissen.
Wozu das Rad nochmal erfinden?
Grüße,
Klaus M.vdT.
Anzeige
Das ist zweifelhaft, ob die StddMETHODE...
19.07.2010 14:13:40
Luc:-?
…genau das macht, was er will, Klaus…!?
Die sortiert ja alles, auch die Zell-Formate u. -formeln. Das ist nicht immer wünschenswert…
Hallo Jochen,
im alten Spotlight-Forum (Off-Line!) findest du gleich auf der 1.XL-Seite einen „Monolog“ zu Sortierfktt.
Gruß Luc :-?
@ Luc, was ist ...
20.07.2010 09:29:35
Klaus-Dieter
Hallo Luc,
... eine Stunden-dMethode?
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
Richtig erkannt! Da beißt sich meine übliche...
20.07.2010 17:37:15
Luc:-?
…wissenschaftl Plural-Abk-Methode mit meiner Abkz von Standard, Klaus-Dieter… ;-)
Muss ich mir mal was einfallen lassen…
Gruß Luc :-?
AW: 2Dimensionales Array sortieren
19.07.2010 22:23:35
Klaus-Dieter
Hallo Jochen,
versuche es einmal damit:
Modul Modul1 Option Explicit Sub sort() Range(Cells(1, 1), Cells(2, leSpalte)).sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _ DataOption1:=xlSortNormal End Sub Function leSpalte() As Integer leSpalte = CInt(Range(Range("A:IV").Find(What:="*", After:=Range("IV1"), _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious).Address).Column) End Function
[size=8]Code eingefügt mit [url=http://vbahtml.origo.ethz.ch] VBA in HTML 2.0.0.3[/url][/size]
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: 2Dimensionales Array sortieren
20.07.2010 14:36:12
JOWE
Hallo an alle die geantwortet hatten.
Ich habe es jetzt mit einem Bubblesort gelöst:
Option Explicit
Option Base
Private Sub sorter(arrayName)
Dim i, j, t, y, condition1, sortColumn
sortColumn = 1
For i = LBound(arrayName, 1) To UBound(arrayName, 1) - 1
For j = LBound(arrayName, 1) To UBound(arrayName, 1) - 1
condition1 = CDate(arrayName(j, sortColumn)) > CDate(arrayName(j + 1, sortColumn))
If condition1 Then
For y = LBound(arrayName, 2) To UBound(arrayName, 2)
t = arrayName(j, y)
arrayName(j, y) = arrayName(j + 1, y)
arrayName(j + 1, y) = t
Next y
End If
Next
Next
End Sub

Private Sub zweidimensionales_Array()
Dim myArr() As String
Dim ze, sp, Spalte, Zeile, z As Long
Dim sh1 As Worksheet
Set sh1 = Sheets("Tabelle1")
'höchste Spaltennr der Daten ermitteln
sp = sh1.Cells(1, sh1.Columns.Count).End(xlToLeft).Column
ReDim myArr(sp, 2)
'Daten ins Array schreiben
For Spalte = 1 To sp
For Zeile = 1 To 2
myArr(Spalte, Zeile) = Cells(Zeile, Spalte)
Next
Next
'Sortierroutine aufrufen, Arraynamen übergeben
Call sorter(myArr)
'Daten zurück in Tabelle schreiben
'für Demozwecke in Zeile 4 und 5
For sp = LBound(myArr) To UBound(myArr)
z = z + 1
sh1.Cells(5, z) = CDate(myArr(z, 1))
sh1.Cells(6, z) = myArr(z, 2)
Next
'Array leeren
Erase myArr
End Sub
Mein Dank gilt Euch allen für die Mühen und
für den Bubblesort besanders an: http://excelwiki.com/vba-arrays/bubble-sort-in-vba
Gruß
Jochen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

2D Array in Excel VBA effizient sortieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden VBA-Code in das Modul ein:

    Option Explicit
    
    Private Sub sorter(arrayName)
       Dim i, j, t, y, condition1, sortColumn
       sortColumn = 1
       For i = LBound(arrayName, 1) To UBound(arrayName, 1) - 1
           For j = LBound(arrayName, 1) To UBound(arrayName, 1) - 1
               condition1 = CDate(arrayName(j, sortColumn)) > CDate(arrayName(j + 1, sortColumn))
               If condition1 Then
                   For y = LBound(arrayName, 2) To UBound(arrayName, 2)
                       t = arrayName(j, y)
                       arrayName(j, y) = arrayName(j + 1, y)
                       arrayName(j + 1, y) = t
                   Next y
               End If
           Next
       Next
    End Sub
    
    Private Sub zweidimensionales_Array()
       Dim myArr() As String
       Dim ze, sp, Spalte, Zeile, z As Long
       Dim sh1 As Worksheet
       Set sh1 = Sheets("Tabelle1")
       sp = sh1.Cells(1, sh1.Columns.Count).End(xlToLeft).Column
       ReDim myArr(sp, 2)
    
       For Spalte = 1 To sp
           For Zeile = 1 To 2
               myArr(Spalte, Zeile) = Cells(Zeile, Spalte)
           Next
       Next
    
       Call sorter(myArr)
    
       For sp = LBound(myArr) To UBound(myArr)
           z = z + 1
           sh1.Cells(5, z) = CDate(myArr(z, 1))
           sh1.Cells(6, z) = myArr(z, 2)
       Next
    
       Erase myArr
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro zweidimensionales_Array aus, um dein 2-dimensionales Array zu sortieren.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht korrekt": Stelle sicher, dass die Daten in deinem Array korrekt formatiert sind. Verwende CDate, um sicherzustellen, dass die Datumsangaben im richtigen Format sind.
  • Fehler: "Index außerhalb des Bereichs": Überprüfe, ob die Grenzen deines Arrays korrekt definiert sind. Achte darauf, dass du die richtigen Indizes verwendest.

Alternative Methoden

Falls du nicht mit einem VBA-Skript arbeiten möchtest, kannst du auch die Excel-Funktionen nutzen. Über die Standard-Sortierfunktion kannst du Daten sortieren, allerdings kann dies nicht die Flexibilität eines VBA-Skripts bieten. Eine weitere Möglichkeit ist die Verwendung des Sort-Objekts in Excel:

Sub SortiereDaten()
    Sheets("Tabelle1").Range("A1:D2").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo
End Sub

Praktische Beispiele

Angenommen, du hast folgende Daten in Tabelle1:

A B C D
18.07.2010 12.09.2010 16.03.2010 06.02.2010
07:00 - 14:00 14:00 - 22:00 22:00 - 07:00 15:00 - 22:30

Nach dem Ausführen des Makros wird die Tabelle in aufsteigender Reihenfolge nach Datum sortiert.


Tipps für Profis

  • Versuche, die Bubble Sort-Technik zu optimieren, um die Effizienz zu steigern, besonders bei großen Arrays.
  • Nutze Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Sortierprozesses zu deaktivieren, was die Ausführung beschleunigen kann.
  • Überlege, ob du vba mehrdimensionales array sortieren verwenden möchtest, wenn du komplexere Datenstrukturen hast.

FAQ: Häufige Fragen

1. Was ist ein 2-dimensionales Array in VBA? Ein 2-dimensionales Array ist eine Datenstruktur, die Daten in Zeilen und Spalten organisiert, ähnlich wie eine Tabelle in Excel.

2. Wie kann ich die Sortierfunktion anpassen? Du kannst die Sortierkriterien ändern, indem du den sortColumn-Wert in der sorter-Subroutine anpasst.

3. Funktioniert das auch in Excel 365? Ja, der bereitgestellte VBA-Code funktioniert in Excel 365 sowie in den meisten anderen Versionen von Excel, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige