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

Forumthread: Bestimmte Spalte eines Array auslesen

Bestimmte Spalte eines Array auslesen
29.05.2022 12:57:06
MiSchi
Hallo liebe Helfende im Forum,
ich würde gerne folgendes Problem lösen - bin mir aber nicht sicher ob es überhaupt so funktionieren kann.
Es soll nur eine bestimmte Spalte eines Arrays in das Tabellenblatt einfügt werden.
Mit diesem Code wird das gesamte Array (2 dimensional) "auf einmal" in den passenden Bereich eingefügt/Übertragen.
'Ausgabe des Ergebnis-Datenfelds
With tbl_Erg
' .Cells(1, 1).Resize(UBound(VarDatErg, 1), UBound(VarDatErg, 2)) = VarDatErg
.Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), UBound(VarDatErg, 2))) = VarDatErg 'alternativer Code zu resize
End With
Ist es möglich auch nur eine bestimmte Spalte zB die erste, die letzte oder die 2.Spalte analog dem Befehl oben einzufügen?
Das klappt nicht, aber vielleicht etwas ähnliches?
With tbl_Erg
'.Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), 1)) = VarDatErg(UBound(VarDatErg, 1), 1)
.Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), 1)) = VarDatErg(UBound(VarDatErg, 1), 6)
End With
Freue mich über Eure Hilfe, viele Grüße
MiSchi
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 13:34:56
Nepumuk
Hallo MiSchi,
warum schaufelst du die Daten aus dem einen Array nicht in ein anderes um? Das dauert selbst bei 1.000.000 Einträgen nur ein paar Millisekunden.
Gruß
Nepumuk
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 13:42:54
MiSchi
Danke Nepumuk!
ich weiß nicht wie ich das realisiere. Hier stehe ich auch vor dem Problem, wie ich die gewünschte Spalte des einen Arrays in ein neues (1 spaltiges) schaufle.
Viele Grüße
Michael
Anzeige
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 14:44:23
onur
Über einen kleinen Umweg dauert es bei 20.000 Zeilen nur Milisekunden - Guckst du hier:

Die Datei https://www.herber.de/bbs/user/153305.xlsm wurde aus Datenschutzgründen gelöscht


Wenn es immer nur die erste Spalte wäre, ginge es noch viel einfacher.
Anzeige
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 19:44:50
MiSchi
Danke onur!
Gute Idee über eine Hilfstabelle, das Problem zu lösen.
Ich hätte gehofft, innerhalb vom Macro es lösen zu können. Beim Googeln bin ich auf etwas gestoßen, was nach einigem try and error funktionierte.
Ich verstehe leider nicht warum die Version in Private Sub ArrayZuArrayKopieren_1() nicht funktioniert; die von Private Sub ArrayZuArrayKopieren_2() schon.
Vielleicht will mir jemand erklären wo ich falsch denke - ich würde mich sehr freuen.
Ich vermute, dass meine Vorstellung eines Arrays falsch ist.
Array (1 to 20000) erzeugt ein Datenfeld wo ich 20000 Werte eintragen kann. Das Array hat eine Dimension.
Das würde doch reichen, um die Werte der 3. Spalte aufzunehmen.
Im Lokalfenster sehe ich, dass die richtigen Werte den jeweiligen ar(z) zugeordnet wurden. Nur werden diese nicht, sondern nur der Wert von ar(1) in die Tabelle1 kopiert.
Mit Array (1 to 20000, 1 to 1) erzeuge ich ein 2-dimensionales Array. Array (Dim1, Dim2); die 2.Dimension ist 1 Feld.
Ich habe aber nur eine Dimension zu befüllen.
Wo ist mein Denkfehler?
Falls es hilft habe ich die Mappe angehängt. https://www.herber.de/bbs/user/153308.xlsm
Vielen Dank und Grüße
MiSchi
Anzeige
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 20:41:01
onur

Tabelle1.Range("C1:C20000") = ar 
geht nur mit zwei-dimensionalem ar - Deswegen.
AW: Bestimmte Spalte eines Array auslesen
29.05.2022 21:28:41
MiSchi
ok, vielen Dank onur
viele Grüße Michael
AW: Dann eben so !
30.05.2022 18:50:17
MiSchi
Danke onur für Deine weitere Hilfe,
bei mir steht überall das selbe - genau wie bei meinem Versuch mit dem 1dim Array - immer nur der Wert von ar(1) Z1S4. Obwohl die folgenden ar(z) fortlaufend gefüllt sind.
Ist das bei dir anders?
Viele Grüße
MiSchi
AW: Bestimmte Spalte eines Array auslesen
30.05.2022 22:44:28
snb
Spalten 1, 6, und 8

Sub m_snb()
tbl_Erg.Cells(1).Resize(UBound(VarDatErg), 3) = application.index(VarDatErg,evaluate("row(1:" & UBound(VarDatErg) & ")"),array(1,6,8))
End Sub

Anzeige
AW: Bestimmte Spalte eines Array auslesen
01.06.2022 08:43:26
MiSchi
Danke snb - auch eine gute Lösung!
MiSchi
AW: Bestimmte Spalte eines Array auslesen
30.05.2022 11:17:09
Daniel
HI
.Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), 1)) = Worksheetfunction.Index(VarDatErg, 0, 1)
0 im zweiten Parameter = alle Zeilen
1 im dritten Parameter = erste Spalte
Gruß Daniel
;

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

Bestimmte Spalte eines Arrays in Excel VBA auslesen


Schritt-für-Schritt-Anleitung

Um eine bestimmte Spalte eines Arrays in Excel VBA auszulesen und in ein Tabellenblatt einzufügen, kannst Du folgende Schritte befolgen:

  1. Array erstellen: Zuerst musst Du ein 2-dimensionales Array erstellen. Zum Beispiel:

    Dim VarDatErg(1 To 20000, 1 To 8) As Variant

    Hier werden 20.000 Zeilen und 8 Spalten definiert.

  2. Daten in das Array einfügen: Fülle das Array mit den gewünschten Werten.

  3. Bestimmte Spalte auslesen: Um eine bestimmte Spalte, z.B. die erste Spalte, auszulesen, kannst Du den folgenden Code verwenden:

    With tbl_Erg
       .Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), 1)) = Application.Index(VarDatErg, 0, 1)
    End With

    Hierbei wird 0 im zweiten Parameter verwendet, um alle Zeilen einzuschließen, und 1 im dritten Parameter, um die erste Spalte auszuwählen.


Häufige Fehler und Lösungen

  • Fehler: Nur der Wert von ar(1) wird kopiert
    Lösung: Stelle sicher, dass Du ein 2-dimensionales Array verwendest und die Indizes korrekt gesetzt sind. Der Code sollte entsprechend der Dimension des Arrays angepasst werden.

  • Fehler: Index außerhalb des Bereichs
    Lösung: Überprüfe die Grenzen Deines Arrays mit UBound, um sicherzustellen, dass Du innerhalb der erlaubten Indizes arbeitest.


Alternative Methoden

Eine andere Methode, um eine bestimmte Spalte auszulesen, ist die Verwendung einer Hilfstabelle. Du kannst die Werte zuerst in eine Hilfstabelle kopieren und dann von dort aus in das endgültige Ziel übertragen. Dies kann die Performance verbessern, besonders bei großen Datenmengen.

Ein Beispiel für den Code könnte so aussehen:

Dim tempArray() As Variant
ReDim tempArray(1 To UBound(VarDatErg, 1))
For i = 1 To UBound(VarDatErg, 1)
    tempArray(i) = VarDatErg(i, 1) ' z.B. die erste Spalte
Next i
tbl_Erg.Range("A1:A" & UBound(tempArray)) = Application.Transpose(tempArray)

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du bestimmte Spalten eines Arrays auslesen kannst:

  1. Auslesen der zweiten Spalte:

    With tbl_Erg
       .Range(.Cells(1, 1), .Cells(UBound(VarDatErg, 1), 1)) = Application.Index(VarDatErg, 0, 2)
    End With
  2. Auslesen mehrerer Spalten:

    With tbl_Erg
       .Cells(1).Resize(UBound(VarDatErg), 3) = Application.Index(VarDatErg, Evaluate("ROW(1:" & UBound(VarDatErg) & ")"), Array(1, 6, 8))
    End With

Tipps für Profis

  • Verwende Application.Transpose: Dies kann helfen, die Daten in einer anderen Ausrichtung zu kopieren, wenn Du mit ein-dimensionalen Arrays arbeitest.
  • Performance optimieren: Wenn Du mit großen Datenmengen arbeitest, verwende ScreenUpdating und Calculation um die Performance während der Ausführung zu verbessern:
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deinem Code, um unerwartete Fehler abzufangen und besser zu diagnostizieren.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich die richtige Spalte aus dem Array auslese?
Verwende den Index-Befehl und achte darauf, die korrekten Parameter zu setzen, um die gewünschte Spalte auszuwählen.

2. Was mache ich, wenn mein Array leer ist?
Überprüfe, ob das Array korrekt initialisiert und mit Daten gefüllt wurde, bevor Du versuchst, eine Spalte auszulesen.

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