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

Forumthread: 2D - Array aber nur bestimmte Spalten einlesen

2D - Array aber nur bestimmte Spalten einlesen
Axel
Hallo,
ich möchte ein Datenblatt einlesen. Dieses besteht aus 1800 Zeilen und 9 Spalten.
Diese lesen ich in einen Variant ein.
Dim Daten As Variant
Daten = Worksheets("Tabelle1").Range("A3:I1874")

allerdings brauche ich die Spalte H nicht. Meiner Meinung nach habe ich jetzt zwei Möglichkeiten:
1. Ich lese die Daten in zwei Teilen ein.
Allerdings weiß ich nicht wie ich dem zweiten Teil sage wo im Array er zu stehen hat.
Daten = Worksheets("Tabelle1").Range("A3:G1874")
Daten = Worksheets("Tabelle1").Range("I3:I1874")
wie muss ich hier den Bereich im Array definieren?
2. Ich lösche eine Spalte im Array, aber wie?
Gruß und Dank
Axel
Anzeige
AW: 2D - Array aber nur bestimmte Spalten einlesen
04.09.2009 11:44:00
zahnonen
z. B.
Daten = Worksheets("Tabelle1").Range("A3:G1874")
Daten = array(Daten,Worksheets("Tabelle1").Range("I3:I1874"))
sollte klappen
ARRAY aus ARRAYs bilden
04.09.2009 12:02:14
NoNet
Hallo Axel,
eine "echte" Lösung fällt mir dazu auch nicht ein, aber vielleicht genügt Dir ja auch dieser Workaround : Ein ARRAY aus 2 Bereichs-ARRAYs :
Option Base 1 'Arrays beginnen bei Index 1
Sub DatenArrayEinlesen()
Dim ar
'1.ARRAY : A3:G1874, 2.ARRAY : I3:I1874
ar = Array(Range("A3:G1874"), Range("I3:I1874")) ' Array aus Arrays
MsgBox ar(1)(2, 5) 'Element 2.Zeile, 5.Spalte des 1.Arrays anzeigen
MsgBox ar(2)(10) 'Element 10.Zeile des 2.Arrays anzeigen
End Sub
Gruß, NoNet
Anzeige
AW: ARRAY aus ARRAYs bilden
04.09.2009 12:32:55
Axel
Erstmal danke für die Antworten und entschuldigt für den Doppelpost. Da muss irgendwas schief gelaufen sein...
Leider funktionieren beide Antworten nicht so wie ich es gerne hätte.Denn ich muss mir danach den kompletten Array nach bestimmten Attributen durchsuchen lassen und mir dann ganze Zeilen ausschreiben lassen.
Ist es nicht vielleicht einfacher die Spalte aus dem Array wieder zu löschen?
Gruß
Axel
Anzeige
Spalte aus ARRAY löschen geht auch nicht _oT
04.09.2009 12:53:20
NoNet
_oT = "ohne Text"
AW: ARRAY aus ARRAYs bilden
04.09.2009 12:53:25
Rudi
Hallo,
Ist es nicht vielleicht einfacher die Spalte aus dem Array wieder zu löschen?

das geht nicht so einfach.
ar=Range("A3:I1874")
for i=1 to ubound(ar)
ar(i,8)=ar(i,9)
next
redim preserve ar(1 to ubound(ar), 1 to 8)
Gruß
Rudi
Anzeige
halb-OT: Hi, NoNet, in diesem Zusammenhang...
05.09.2009 12:57:08
Luc:-?
...— wie fkt das...? ;-)
    Dim tt As String, ad(1) As String, at As Variant
For Each at In ?
tt = Replace(tt, at(0), at(1))
Next at

Man achte auf den Variant at... ;-)
Gruß Luc :-?
Anzeige
AW: halb-OT: Hi, NoNet, in diesem Zusammenhang...
09.09.2009 13:23:38
Axel
Hallo danke für eure Hilfe.
Ich habe es allerdings etwas anders gelöst.
Ich habe die Daten in zwei arrays (Varaiants) eingelesen und diese dann zu einem kombiniert.
Gruß
Axel
So etwas war auch dafür Voraussetzung,...
09.09.2009 22:52:16
Luc:-?
...Axel,
2 je einen Vektor enthaltende Variantfelder, paarweise zu einer 2spaltigen Matrix verkoppelt...
Gruß Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

2D-Array in Excel: Bestimmte Spalten einlesen und bearbeiten


Schritt-für-Schritt-Anleitung

  1. Daten einlesen: Du kannst ein 2D-Array in VBA erstellen, indem du einen Bereich aus einem Arbeitsblatt einliest. Zum Beispiel:

    Dim Daten As Variant
    Daten = Worksheets("Tabelle1").Range("A3:I1874")
  2. Bestimmte Spalten ausschließen: Wenn du eine bestimmte Spalte, wie z.B. Spalte H, ausschließen möchtest, kannst du die benötigten Spalten in separaten Arrays speichern und dann kombinieren:

    Dim Daten1 As Variant
    Dim Daten2 As Variant
    Daten1 = Worksheets("Tabelle1").Range("A3:G1874")
    Daten2 = Worksheets("Tabelle1").Range("I3:I1874")
  3. Arrays kombinieren: Um die beiden Arrays zusammenzuführen, kannst du sie in ein übergeordnetes Array einfügen:

    Dim ar As Variant
    ar = Array(Daten1, Daten2)
  4. Zugriff auf Array-Elemente: Du kannst auf die Elemente des Arrays zugreifen, indem du die Indizes angibst:

    MsgBox ar(0)(2, 5) ' Element 2. Zeile, 5. Spalte des ersten Arrays anzeigen
    MsgBox ar(1)(10) ' Element 10. Zeile des zweiten Arrays anzeigen

Häufige Fehler und Lösungen

  • Fehler bei der Indizierung: Wenn du versuchst, auf ein Element außerhalb des Bereichs zuzugreifen, bekommst du einen Laufzeitfehler. Stelle sicher, dass du die richtigen Indizes verwendest.

  • Array-Dimensionen: Wenn du ein Array mit ReDim Preserve änderst, achte darauf, dass du die Dimensionen korrekt angibst. Beispiel:

    ReDim Preserve ar(1 To UBound(ar), 1 To 8)

Alternative Methoden

  • Einzelne Spalten lesen: Du kannst auch die Methode Union verwenden, um Bereiche zu kombinieren:

    Dim CombinedRange As Range
    Set CombinedRange = Union(Worksheets("Tabelle1").Range("A3:G1874"), Worksheets("Tabelle1").Range("I3:I1874"))
  • Daten filtern: Eine andere Möglichkeit besteht darin, die Daten zuerst in ein Array zu lesen und anschließend mit einer Schleife nur die benötigten Spalten in ein neues Array zu kopieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das Spalten aus einem 2D-Array einliest und die unerwünschte Spalte entfernt:

Dim ar As Variant
ar = Worksheets("Tabelle1").Range("A3:I1874")
Dim i As Long
For i = 1 To UBound(ar)
    ar(i, 8) = ar(i, 9) ' Spalte H wird durch Spalte I ersetzt
Next i
ReDim Preserve ar(1 To UBound(ar), 1 To 8) ' Spalte H entfernen

Tipps für Profis

  • Verwende Option Base 1: Um die Indizierung bei 1 beginnen zu lassen, kannst du Option Base 1 am Anfang deines Moduls setzen. Dies kann die Lesbarkeit deines Codes erhöhen.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um Laufzeitfehler zu vermeiden, insbesondere beim Arbeiten mit Arrays.

  • Dokumentation: Halte deinen Code gut dokumentiert, um die Nachvollziehbarkeit zu gewährleisten. Ein gutes alternatives Wort für „erschaffen“ in diesem Kontext könnte „generieren“ sein.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten in ein 2D-Array einlesen?
Du kannst mehrere Spalten in ein Array einlesen, indem du sie in einem Bereich zusammenfasst oder durch die Verwendung von Union.

2. Kann ich eine Spalte direkt aus einem Array löschen?
Es gibt keine direkte Methode, um eine Spalte aus einem Array zu löschen. Du musst die Werte in eine neue Dimension umkopieren oder die Größe des Arrays mit ReDim Preserve anpassen.

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