Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Matrix in 3 Spalten konvertieren

Matrix in 3 Spalten konvertieren
15.03.2022 20:17:49
Frank
Guten Abend an Alle,
ich habe Daten vorliegen, welche 5710 Spalten lang und 3058 Zeilen beinhalten. Die erste Zeile beinhaltet alle x-Koordinaten. Die erste Spalte beinhaltet alle y-Koordinaten. Die restliche Matrix, sprich 5709 * 3057 entspricht den z-Koordinaten. Im Prinzip ein riesiges 3D-Feld. Ich möchte diese Daten gern in drei Spalten umschreiben, so dass ich auf einem neuen Datenblatt in Spalte 1 die x-Koordinaten, in Spalte 2 die y-Koordinaten und in Spalte 3 die zugehörigen z-Koordinaten ausgegeben bekomme.
Soweit die Aufgabe, die an und für sich lösbar ist. Das Problem ist, dass mir die maximale Zeilenanzahl von Excel einen Strich durch die Rechnung macht, da 5709 * 3057 = 17.542.413 Zeilen ergibt und Excel leider nur 1.048.576 Zeilen zur Verfügung stellt.
Was könnte ich machen, um die Daten in der gewünschten Form zu erhalten? In eine Text Datei schreiben?
Das ist der kleine Code für das Einlesen, der dann endet, weil ich nun auf dieses Problem gestoßen bin.

Sub Import_Data()
Dim Array_Einlesen(1 To 3058, 1 To 5710)
Dim i As Long, j As Long
Worksheets("Matrixdaten").Select
Application.ScreenUpdating = False
'Einlesen der Matrix
For i = 1 To 3058
For j = 1 To 5710
Array_Einlesen(i, j) = Cells(i, j).Value
Next
Next
'Umwandeln der Matrix in 3 Spalten --> X, Y, Z
Worksheets("XYZ").Select
'Umwandeln in 3 Spaltenvektoren X, Y, Z
End Sub
Eventuell hat jemand eine Idee.
Vielen Dank und viele Grüße,
Frank
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 20:34:40
onur

" Ich möchte diese Daten gern in drei Spalten umschreiben, so dass ich auf einem neuen Datenblatt in Spalte 1 die x-Koordinaten, in Spalte 2 die y-Koordinaten und in Spalte 3 die zugehörigen z-Koordinaten ausgegeben bekomme" ?

Aber WOZU ?
AW: Matrix in 3 Spalten konvertieren
15.03.2022 20:39:28
Frank
Guten Abend Onur,
weil das bei manchen Daten so üblich ist. Das sind sogenannte *.xyz Dateien... Da macht man das so. Ich habe mir das nicht ausgedacht.
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 20:48:52
onur
Bitte keine Wischi-Waschi-Antwort wie "weil es so üblich ist" oder "weil man es halt so macht" o.Ä..
Die Frage ist doch: WOZU genau brauchst DU die Daten in dieserm "Format"? Was genau hast du den mit dieser Liste noch vor, weswegen du sie so und nicht anders brauchst ?
Abgesehen davon: ich habe noch nie gesehen, dass "man" ein so schön kompaktes 2-dimensionales Array zerstückelt und in eine ellenlange eindimensionale Liste verwurschtelt. Das ist, als ob man ein Photo in winzig kleine Streifen schneidet und die Streifen zu einem ellenlangen Band aneinanderklebt.
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 20:58:24
Yal
Es würde mir auch interessieren, welche Schritte dahinter stehen, aber es macht durchaus sinn, die Daten in einem "festen" Format zu haben.
Der nicht vorhersehbare Anzahl an Spalten ist immer ein Problem bei der Übertragung zwischen Datenbanken.
Auch für statistische Bewertung ist es nachvollziehbar, dass pro Feld einen festgelegten Inhalt vorkommt.
Bilder sind auch zwar 2-dimensional sichtbar, aber gespeichert sind sie eindimensional, zumindest digitale Bilder.
VG
Yal
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 21:01:26
Frank
Das ist keine Wischi-Waschi-Antwort, Onur. Der Kunde möchte die Daten in diesem Format haben, sprich x in Spalte 1, y in Spalte 2 und z in Spalte 3. Ich brauche die Daten nicht in diesem Format, wohl aber der Kunde. Ich verstehe deine Einwände, aber ich habe mir dieses Format nicht ausgedacht und möchte auch nicht sparsam mit meinen Ausführungen sein. Das Programm Origin bietet die Möflichkeit von XYZ in Matrix konvertieren und umgekehrt (siehe Bild).
https://www.herber.de/bbs/user/151781.jpg
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 21:41:17
Frank
Guten Abend Onur,
ja genau das meine ich :-). Ich denke auf den ersten Blick sollte das stimmen. Vielen lieben Dank an Dich... Ich schaue mir morgen nochmal deine Code an. Wie gesagt kann ich dir nicht sagen wieso solch ein Format erwünscht ist, aber ich denke es ist auch nicht ganz unsinnig, gemäß Yal's Ausführungen.
Vielen Dank an Euch Beide und Gute Nacht.
Frank
Anzeige
Gerne !
15.03.2022 21:43:03
onur
AW: Matrix in 3 Spalten konvertieren
15.03.2022 20:47:31
Yal
Hallo Frank,
Es kommt danach darauf an, wie Du die Daten auswerten möchtest.
Was man noch probieren könnte, wäre über Power Query zu entpivotieren.
_ die gsamte Matrix als aktive Tabelle einschalten "Einfügen", "Tabelle", hat Überschrift: ja. (ich gehe dabei davon aus, dass kein "x" doppelt vorkommt)
_ Menü "Daten", "Aus Tabelle"
_ in Power Query Editor, erste Spalte markieren, im Menü "Transformieren", "entpivotieren", "andere Spalten entpivotieren"
_ Menü "Datei", "Schliessen und laden in ...", nur Verbindung und dem Datenmodell hinzufügen.
Dann kann man u.a. bei Pivot den Datenmodell verwenden, oder bei einem Listobjekt (aktive Tabelle), den SQL auf dem Datenbestand so beschränken, dass nicht alle Daten rüberkommen.
Ansonsten, ja, direkt in einer Datei speichern. Es sieht da so aus (Anbindung von MS Scripting Runtime nicht vergessen):

Sub DatenZuDatei_exportieren()
'mit Anbindung ("Extras", "Verweise...") an "Microsoft Scripting Runtime"
Dim fso As New FileSystemObject
Dim Datei As TextStream
Dim R As Long 'Row
Dim C As Long 'Column
Const cPfad = "C:\temp\HerberForum\Export.csv"
Set Datei = fso.OpenTextFile(cPfad, ForWriting, True)
With Worksheets("Matrixdaten")
'Überschrift (Zeile 3) exportieren
For C = 2 To 5710 'Spalten, x
For R = 2 To 3058 'Zeilen, y
Datei.WriteLine .Cells(1, C) & ";" & .Cells(R, 1) & ";" & .Cells(R, C)
Next
Next
End With
Datei.Close
End Sub
VG
Yal
Anzeige
AW: Matrix in 3 Spalten konvertieren
15.03.2022 21:11:09
Frank
Guten Abend Yal,
vielen Dank für deine Antwort. Der obere Teil deiner Nachricht wird nicht funktionieren, da die Anzahl der Zeilen zu lang ist. Dein Code sieht aber vielversprechend aus :-). Ich werde das morgen testen. Lieben Dank an Dich und Onur.
Viele Grüße,
Frank.
AW: Matrix in 3 Spalten konvertieren
15.03.2022 21:56:39
Yal
Hallo Frank,
vielen Dank für die Rückmeldung.
Du wirst sehr schnell feststellen, dass die beide Codings sehr, sehr ähnlich sind.
Ich benutze early binding, Onur late binding. Es ist die einzige Unterschied.
VG
Yal
Anzeige
Man könnte auch Mittelwerte verwenden
15.03.2022 21:55:56
lupo1
... und zwar aus jedem 5x5-Feld (also 25 z-Werte). Falls Dein Problem das erlaubt.
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Matrix in 3 Spalten konvertieren


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass deine Matrixdaten in einem Excel-Blatt organisiert sind. Die erste Zeile sollte die x-Koordinaten und die erste Spalte die y-Koordinaten enthalten.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA)-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei)“, wähle „Einfügen“ und dann „Modul“.

  4. Code eingeben: Füge den folgenden Code in das Modul ein, um die Matrix in 3 Spalten zu konvertieren:

    Sub Import_Data()
        Dim Array_Einlesen(1 To 3058, 1 To 5710)
        Dim i As Long, j As Long
        Worksheets("Matrixdaten").Select
        Application.ScreenUpdating = False
    
        ' Einlesen der Matrix
        For i = 1 To 3058
            For j = 1 To 5710
                Array_Einlesen(i, j) = Cells(i, j).Value
            Next
        Next
    
        ' Umwandeln der Matrix in 3 Spalten
        Worksheets("XYZ").Select
        Dim k As Long
        k = 1
        For i = 2 To 3058
            For j = 2 To 5710
                Cells(k, 1).Value = Array_Einlesen(1, j) ' x-Koordinaten
                Cells(k, 2).Value = Array_Einlesen(i, 1) ' y-Koordinaten
                Cells(k, 3).Value = Array_Einlesen(i, j) ' z-Koordinaten
                k = k + 1
            Next
        Next
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf „Ausführen“ klickst.


Häufige Fehler und Lösungen

  • Fehler: Zu viele Zeilen: Wenn du versuchst, mehr als 1.048.576 Zeilen in ein Excel-Blatt zu schreiben, bekommst du eine Fehlermeldung. Überlege, die Daten in eine Textdatei zu exportieren oder die Matrix in kleinere Teile zu zerlegen.

  • Lösung: Du kannst die Matrix in mehrere CSV-Dateien aufteilen oder Power Query verwenden, um die Daten zu entpivotieren und nur die benötigten Zeilen zu extrahieren.


Alternative Methoden

  • Power Query verwenden: Lade die gesamte Matrix als Tabelle in Power Query. Du kannst dann die Spalten mit den y-Koordinaten entpivotieren und die z-Koordinaten in einer neuen Spalte anordnen.

  • Export in Textdateien: Wenn die Zeilenanzahl zu hoch ist, exportiere die Daten in eine CSV-Datei. Nutze den folgenden VBA-Code:

    Sub DatenZuDatei_exportieren()
        Dim fso As New FileSystemObject
        Dim Datei As TextStream
        Dim R As Long, C As Long
        Const cPfad = "C:\temp\Export.csv"
        Set Datei = fso.OpenTextFile(cPfad, ForWriting, True)
        With Worksheets("Matrixdaten")
            For C = 2 To 5710
                For R = 2 To 3058
                    Datei.WriteLine .Cells(1, C) & ";" & .Cells(R, 1) & ";" & .Cells(R, C)
                Next
            Next
        End With
        Datei.Close
    End Sub

Praktische Beispiele

  • Beispiel 1: Wenn du eine Matrix mit 1000 x 1000 Einträgen hast, kannst du den oben genannten VBA-Code verwenden, um die Daten effizient in 3 Spalten zu konvertieren.

  • Beispiel 2: Wenn du eine Excel-Kreuztabelle hast, kannst du die Funktion „Daten“ > „Aus Tabelle“ in Power Query verwenden, um die Kreuztabelle in eine Liste umzuwandeln.


Tipps für Profis

  • Verwende Named Ranges: Definiere benannte Bereiche für große Datenmengen, um die Übersichtlichkeit und die Bearbeitbarkeit zu verbessern.

  • Datenmodell nutzen: Wenn du mit großen Datenmengen arbeitest, überlege, das Excel-Datenmodell zu verwenden, um die Performance zu verbessern und die Daten effizienter zu analysieren.

  • Makros optimieren: Achte darauf, dass dein VBA-Code so optimiert ist, dass er nur die benötigten Daten verarbeitet, um die Ausführungszeit zu minimieren.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Liste in eine Matrix umwandeln?
Du kannst die „PivotTable“-Funktion in Excel verwenden, um eine Liste in eine Matrix zu konvertieren.

2. Gibt es eine Möglichkeit, die Matrixdaten direkt in Excel zu visualisieren?
Ja, du kannst die Daten als Diagramm darstellen, nachdem du sie in 3 Spalten umgewandelt hast. Verwende die Diagrammfunktion von Excel, um anschauliche Grafiken zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige