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

Forumthread: Range in Array laden

Range in Array laden
Gordon
Moin moin,
mal eine Frage zu den Arrays. Wenn man ein Array hat das z.B. so aussieht: arrTest(1,2)
Kann man irgendwie gleich eine ganze Range z.B. (A1:C1) dort komplett auf einmal reinladen? Oder muss man das dann doch mit einer Schlaife machen. Also erst A1 in arrTest(0,0), B1 in arrTest(0,1) und C1 in arrText(0,2)?
Danke schon mal für die Antwort?
Gruß
Gordon
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Range in Array laden
17.01.2011 10:30:36
hary
Hallo Gordon

Sub eineSpalte()
Dim myarray As Variant
myarray = Range("A1:A6")
MsgBox myarray(1, 1) 'aus Spalte A
End Sub
Sub zweiSpaltenb()
Dim myarray As Variant
myarray = Range("A1:B6")
MsgBox myarray(1, 1) 'aus Spalte A
MsgBox myarray(1, 1) 'aus Spalte B
End Sub

meinst Du das?
gruss hary
Anzeige
Korrektur
17.01.2011 10:40:31
hary
Hallo Gordon
Fehler eingeschlichen.
muss heissen:

myarray(1, 2) 'aus SpalteB
oder so gehts auch.

Sub Zeile()
Dim myarray As Variant
myarray = Range("A1:C1")
myarray = WorksheetFunction.Transpose(myarray)
MsgBox myarray(3, 1) 'nur die erste Zahl aendern
End Sub

gruss hary
Anzeige
AW: Korrektur
17.01.2011 10:58:38
Gordon
Hmm..blicke ich leider noch nicht so 100%ig durch. Mir stellen sich da noch zwei Fragen:
a)
Was bedeutet dieses Transpose genau?
und b)
Wie mache ich das, wenn ich in ein mehrdimensionales Array die Ranges schreiben will? (Also in Zeile 0 des Arrays A1:C1, in Zeile 1 A2:C2,....usw...)
Danke aber schon mal für die Hilfe....
Anzeige
AW:so?
17.01.2011 11:10:31
hary
Hallo Gordon
Teste mal in einer leeren Mappe.
Befuelle A1 bis C6, dann Makro.

Sub dreiSpalten()
Dim myarray As Variant
myarray = Range("A1:C6")
MsgBox myarray(1, 1) 'aus Spalte A Zeile 1
MsgBox myarray(2, 2) 'aus Spalte B  Zeile 1
MsgBox myarray(3, 3) 'aus Spalte C  Zeile 3
End Sub

mit Transpose machst Du aus 3 Spalten im array eine.
gruss hary
Anzeige
AW: AW:so?
17.01.2011 11:15:04
Gordon
Sorry,
hab mich da wohl unvollständig ausgedrückt. Die Ranges aus Excel werden aus einer Schleife einzeln gelanden. Also mal A1:C1, dann kommt aber vielleicht erst A5:C5...usw.....daher kann ich es nicht als ganzen Block wie in deinem Beispiel reinladen. Da liegt bei mir das Problem....
was hast Du vor?
17.01.2011 14:34:28
Tino
Hallo,
beschreibe doch mal was Du vor hast.
Gruß Tino
Anzeige
AW: was hast Du vor?
17.01.2011 14:43:57
Gordon
Habe eine Liste mit 500 Einträgen....diese sind nach Rubriken geordnet und ich darf diese Liste nicht verändern. Jeder Eintrag hat verschiedene Daten ...u.a. ein Datum. Nun sollen diese ganzen Einträge in externe Listen übertragen werden. Diese Externen sind nach Monaten aufgeteilt.
Nun möchte ich halte die Liste mit den 500 Einträgen einmal abgrasen und alle Einträge in zwölf Arrays übertragen - sprich in die zwölf Monate - und dann auf die externen Listen verteilen.
Das habe ich vor (....in den externen Listen wird dann weiterverarbeitet).
Anzeige
AW: was hast Du vor?
17.01.2011 15:49:24
Tino
Hallo,
wenn ich Dich richtig verstanden habe könnte es so gehen.
Hier mal ein Beispiel, Deine Aufbau kenne ich nicht und kann daher nur dies zeigen.
https://www.herber.de/bbs/user/73107.xls
Warum dies aber mit Array gamacht werden muss verstehe ich noch nicht so ganz.
Evtl. würde ich in richtung Spezialfilter mal nach einer Lösung suchen.
Gruß Tino
Anzeige
;

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

Infobox / Tutorial

Range in Array laden


Schritt-für-Schritt-Anleitung

Um einen Excel VBA Range in ein Array zu laden, kannst du die folgende Vorgehensweise nutzen. Diese Anleitung zeigt dir, wie du dies effektiv umsetzt.

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" → "Einfügen" → "Modul").
  3. Kopiere den folgenden Code in das Modul:
Sub LoadRangeToArray()
    Dim myArray As Variant
    myArray = Range("A1:C6") ' Lade den Bereich A1:C6 in ein Array
    MsgBox myArray(1, 1) ' Gibt den Wert von A1 aus
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Mit diesem Code wird der Bereich von Zellen direkt in ein VBA Array geladen, und du kannst die Werte einfach abfragen.


Häufige Fehler und Lösungen

  • Fehler: "Typen übereinstimmen nicht"

    • Lösung: Stelle sicher, dass der Bereich, den du lädst, die richtige Größe hat. Nutze Variant, um unterschiedliche Typen zuzulassen.
  • Fehler: "Arrayindex außerhalb des Bereichs"

    • Lösung: Beachte, dass VBA-Arrays 1-basiert sind. Ein Zugriff auf myArray(0,0) führt zu einem Fehler. Beginne mit myArray(1,1).

Alternative Methoden

Falls du eine Range in ein Array laden möchtest, kannst du auch die WorksheetFunction.Transpose-Methode verwenden, um die Dimensionen zu ändern. Hier ein Beispiel:

Sub TransposeRangeToArray()
    Dim myArray As Variant
    myArray = WorksheetFunction.Transpose(Range("A1:C3"))
    MsgBox myArray(1, 1) ' Gibt den transponierten Wert von A1 aus
End Sub

Diese Methode ist besonders nützlich, wenn du mit einem Array arbeiten möchtest, das eine andere Struktur erfordert.


Praktische Beispiele

  1. Laden einer Spalte in ein Array:

    Sub LoadSingleColumnToArray()
       Dim myArray As Variant
       myArray = Range("A1:A6") ' Lade die Spalte A in das Array
       MsgBox myArray(1, 1) ' Gibt den Wert von A1 aus
    End Sub
  2. Laden mehrdimensionaler Arrays:

    Sub LoadMultiDimensionalArray()
       Dim myArray As Variant
       Dim i As Long
       Dim j As Long
       myArray = Range("A1:C6") ' Lade A1:C6 in ein Array
       For i = 1 To 6
           For j = 1 To 3
               MsgBox myArray(i, j) ' Gibt jeden Wert im Array aus
           Next j
       Next i
    End Sub

Tipps für Profis

  • Verwende Option Base 1 am Anfang deines Codes, um die Standard-Array-Indizierung auf 1 zu setzen.
  • Nutze Dynamische Arrays in Kombination mit ReDim, um die Größe zur Laufzeit anzupassen, wenn du nicht weißt, wie viele Elemente du benötigst.
  • Überlege, ob du den Range direkt in ein Array kopieren oder erst die Werte in eine Collection speichern möchtest, bevor du sie in ein Array überträgst.

FAQ: Häufige Fragen

1. Wie kann ich ein Array aus einer nicht zusammenhängenden Range erstellen? Um eine nicht zusammenhängende Range in ein Array zu laden, musst du die einzelnen Zellen manuell in das Array einfügen. Beispiel:

Dim myArray(1 To 3) As Variant
myArray(1) = Range("A1").Value
myArray(2) = Range("C1").Value
myArray(3) = Range("E1").Value

2. Was passiert, wenn ich ein leeres Array lade? Das Laden eines leeren Bereichs in ein Array wird ein leeres Array ergeben, das keine Elemente enthält. Überprüfe die Größe des Arrays mit UBound() und LBound(), bevor du darauf zugreifst.

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