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

Forumthread: Leeres Array anlegen

Leeres Array anlegen
16.05.2018 08:40:34
Lutz
Hallo,
ich benötige ein leeres Array, das die gleiche Größe wie ein zuvor befülltes Array hat.
Mit diesem Code lösche ich das Array ja vollig:
Sub Makro1()
' 1. Array mit den Daten befüllen '
Dim TMPDAT As Variant
Dim TMPZMAX As Long
Dim TMPSMAX As Long
TMPSMAX = 20
tbl91.Activate
Range("A1").End(xlDown).Activate
TMPZMAX = ActiveCell.Row
Application.Goto Reference:=Range("A1"), Scroll:=True
With tbl91
TMPDAT = .Range(.Cells(1, 1), .Cells(TMPZMAX, TMPSMAX))
End With
' 2. Array erstellen in gleicher Größe wie 1. Array '
Dim VARDAT As Variant
With tbl91
VARDAT = .Range(.Cells(1, 1), .Cells(TMPZMAX, TMPSMAX))
End With
Erase VARDAT
End Sub
Wie muß ich das machen?
Danke und Gruß vom Lutz
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leeres Array anlegen
16.05.2018 08:54:29
ChrisL
Hi Lutz
Ein Beispiel:
Sub t()
Dim arrDummy1() As Variant
Dim arrDummy2() As Variant
arrDummy1 = Range("A1:B3")
ReDim arrDummy2(LBound(arrDummy1), UBound(arrDummy1))
arrDummy2 = arrDummy1
Range("D1:E3") = arrDummy2
End Sub
cu
Chris
AW: Leeres Array anlegen
16.05.2018 08:55:51
Peter(silie)
Hallo,
ReDim VARDAT(LBound(TMPDAT) To UBound(TMPDAT))

https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/redim-statement
Anzeige
AW: Leeres Array anlegen
16.05.2018 09:25:45
Lutz
Wenn ich das jetzt mit diesem Code teste:
Sub Makro1()
' 1. Array mit den Daten befüllen '
Dim TMPDAT As Variant
Dim TMPZMAX As Long
Dim TMPSMAX As Long
TMPSMAX = 20
tbl91.Activate
Range("A1").End(xlDown).Activate
TMPZMAX = ActiveCell.Row
Application.Goto Reference:=Range("A1"), Scroll:=True
With tbl91
TMPDAT = .Range(.Cells(1, 1), .Cells(TMPZMAX, TMPSMAX))
End With
' 2. Array erstellen in gleicher Größe wie 1. Array '
ReDim VARDAT(LBound(TMPDAT) To UBound(TMPDAT))
' Testdaten in 2. Array einfügen '
VARDAT(2, 1) = "test"
' Testdaten in Tabelle ausgeben '
For i = 2 To TMPZMAX Step 1
For y = 1 To 8 Step 1
tbl0.Cells(i, y).Value = VARDAT(i, y)
Next y
Next i
End Sub
Dann erhalte ich eine Fehlermeldung.
Was mache ich falsch?
Anzeige
AW: Leeres Array anlegen
16.05.2018 10:35:49
Daniel
HI
da das ausgangsarray 2-dimendional ist, musst du auch beide Dimensionen angeben:
x = Range(...).Value
redim y(Lbound(x, 1) to Ubound(x, 1), Lbound(x, 2) to Ubound(x, 2))
wenn das Ausgangsarray direkt aus einem Zellbereich erzeugt wird, ist der LBound-Wert 1.
dann kann man etwas verkürzen
x = Range(...).Value
redim y(1 to UBound(x, 1), 1 to UBound(x, 2))
Gruß Daniel
Anzeige
Beim Lesen deiner Posts erhalte ich FehLmeldung...
16.05.2018 10:37:05
EtoPHG

Einfach chunken
16.05.2018 23:06:17
lupo1
brr = [HA1:HZ65000]
Begründung: Das (nicht genannte) vorher befüllte Array arr gibt die Dimensionen rechtzeitig vor. Somit kann man den überschießenden Rest einfach missachten.
Mit UBound(arr(1)) (u. entspr. für j) kann man nun i ermitteln.
Range(Cells(1, 1), Cells(i, j)) = brr
empfängt nun nur die über i/j zutreffende Arraygröße zurück.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Leeres Array in Excel VBA anlegen


Schritt-für-Schritt-Anleitung

Um ein leeres Array in Excel VBA zu erstellen, das die gleiche Größe wie ein zuvor befülltes Array hat, befolge diese Schritte:

  1. Daten in ein Array einlesen: Beginne damit, dein Ausgangsarray mit Daten zu befüllen. Hier ist ein Beispiel:

    Dim TMPDAT As Variant
    TMPDAT = Range("A1:B3").Value
  2. Leeres Array deklarieren: Verwende ReDim, um ein leeres Array mit den gleichen Dimensionen wie dein Ausgangsarray zu erstellen:

    Dim VARDAT() As Variant
    ReDim VARDAT(LBound(TMPDAT, 1) To UBound(TMPDAT, 1), LBound(TMPDAT, 2) To UBound(TMPDAT, 2))
  3. Daten in das leere Array kopieren (optional): Wenn du die Daten in das leere Array kopieren möchtest, kannst du dies wie folgt tun:

    VARDAT = TMPDAT

Häufige Fehler und Lösungen

  • Fehlermeldung bei Dimensionen: Wenn du ein 2-dimensionales Array verwendest, stelle sicher, dass du beide Dimensionen in ReDim angibst. Beispiel:

    ReDim VARDAT(LBound(TMPDAT, 1) To UBound(TMPDAT, 1), LBound(TMPDAT, 2) To UBound(TMPDAT, 2))
  • Falsche Verwendung von Erase: Wenn du Erase verwendest, wird das Array vollständig gelöscht. Um ein leeres Array zu erstellen, verwende stattdessen ReDim.


Alternative Methoden

Wenn du kein leeres Array erstellen möchtest, sondern nur die Daten temporär speichern willst, kannst du auch direkt auf den Zellbereich zugreifen:

Dim brr As Variant
brr = Range("HA1:HZ65000").Value

Hierbei wird der Zellbereich direkt in ein Variant-Array geladen, ohne dass du ein leeres Array deklarieren musst.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du ein leeres Array erstellen und nutzen kannst:

  1. Beispiel mit ReDim:

    Sub Beispiel()
       Dim arrDummy1() As Variant
       Dim arrDummy2() As Variant
       arrDummy1 = Range("A1:B3").Value
       ReDim arrDummy2(LBound(arrDummy1, 1) To UBound(arrDummy1, 1), LBound(arrDummy1, 2) To UBound(arrDummy1, 2))
       arrDummy2 = arrDummy1
       Range("D1:E3").Value = arrDummy2
    End Sub
  2. Mit redim a1:

    Dim TMPDAT As Variant
    TMPDAT = Range("A1:B3").Value
    ReDim VARDAT(LBound(TMPDAT, 1) To UBound(TMPDAT, 1), LBound(TMPDAT, 2) To UBound(TMPDAT, 2))

Tipps für Profis

  • Verwende LBound und UBound: Um Fehler bei der Dimensionierung zu vermeiden, nutze immer LBound und UBound, um die Dimensionen deines Arrays zu bestimmen.

  • Effizienter Code: Halte deinen Code sauber und effizient, indem du Arrays nur dann verwendest, wenn es notwendig ist. Bei großen Datenmengen kann die Verarbeitung in Arrays die Performance verbessern.


FAQ: Häufige Fragen

1. Wie kann ich ein leeres Array in Excel VBA erstellen?
Nutze ReDim, um die Dimensionen des Arrays auf die gewünschte Größe festzulegen.

2. Was passiert, wenn ich Erase auf ein Array anwende?
Erase löscht alle Elemente des Arrays und gibt den Speicher zurück. Das Array bleibt jedoch in seiner ursprünglichen Dimension bestehen, es wird nur geleert.

3. Kann ich ein leeres Array in einer Funktion zurückgeben?
Ja, du kannst ein leeres Array in einer Funktion zurückgeben, indem du die Funktion als Variant deklarierst und das leere Array zuweist.

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