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

Forumthread: Array (VBA), Index aßerhalb des gültigen Bereichs

Array (VBA), Index aßerhalb des gültigen Bereichs
Drogist
Hallo Exelaner,
ich stehe echt auf dem Schlauch ...
Ich will einen definierten Bereich einer Tabelle in ein (normales!) Array einlesen. Mit einer For..Next- _
Schleife ist das ja kein Problem, aber ich erinnere mich dunkel, dass das auch in einem Rutsch _ geht. Hier einfach einmal mein Code:

Option Explicit
Option Base 1   'Fällt mir leichter ...
Sub Tab2Array()
Dim aHugo()
aHugo = Range("A1:A30").Value
MsgBox UBound(aHugo)   'OK!
MsgBox aHugo(20).Value 'Error, mit oder ohne .Value
Range("F2:F31").Value = aHugo() 'klappt, die Daten sind also im Array
End Sub
Die erste MsgBox zeigt mir auch freundlich an, dass dort 30 Elemente enthalten sind. Und danach kommt der Fehler #9 mit dem Hinweis, dass der Index außerhalb des gültigen Bereichs sei. Wer ist so nett und entfernt mir das Brett vor dem Kopf? Ich muss doch irgendwie einzelne, definierte Elemente des Array ansprechen können! ... Und funktioniert das mit mehreren Spalten auch? -> aHugo(5, 3)
Beste Grüße
Drogist
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array (VBA), Index aßerhalb des gültigen Bereichs
20.05.2012 22:17:18
Daniel
Hi
ein Array, das durch Zuweisung aus einer Range erstellst, ist immer ein zweidimensonales Array, auch wenn du in in einer Dimension nur ein Element hast (Zeile oder Spalte)
dh. wenn du einen Wert aus dem Array abrufen willst, dann so mit angabe der 2. Dimension:
MsgBox aHugo(20,1)
Gruß Daniel
Anzeige
AW: Array (VBA), Index aßerhalb des gültigen Bereichs
20.05.2012 22:19:09
Josef

Hallo ?,
du must bei einem mehrdimensionalen Array auch die Spalte angeben und ein Datenfeld hat keine Eigenschaft .Value.
MsgBox aHugo(20, 1)
Und mehrere Spalten gehen natürlich auch.

« Gruß Sepp »

Anzeige
Auch ein scheinbar 1dimensionales, aber ...
20.05.2012 23:45:23
Luc:-?
…aus einer Spalte resultierendes, also einen vertikalen Vektor darstellendes Datenfeld ist stets 2dimensional, während man ein horizontales Vektor-Datenfeld auch in ein 1dimensionales umwandeln kann. Das geht natürl auch mit einem vertikalen, aber das wird dadurch horizontal, was ggf bei der weiteren Arbeit zu berücksichtigen ist.
Gruß Luc :-?
Anzeige
AW: Array (VBA), Index aßerhalb des gültigen Bereichs
21.05.2012 00:57:58
Drogist
Hallo Daniel,
wow, das war schnell ... Und natürlich richtig. Danke, ohne Brett vor dem Kopf ist die Sicht auf die Dinge doch viel besser!
Schöne Woche wünscht
Günther
(Drogist)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit dem Fehler "Index außerhalb des gültigen Bereichs" in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Array Deklaration: Beginne mit der Deklaration deines Arrays. Stelle sicher, dass du die Option Base 1 verwendest, um die Indizes bei 1 zu starten.

    Option Explicit
    Option Base 1
    Sub Tab2Array()
       Dim aHugo()
       aHugo = Range("A1:A30").Value
  2. Zugriff auf Array-Inhalte: Beachte, dass ein Array, das aus einem Bereich erstellt wird, immer als zweidimensionales Array betrachtet wird. Daher musst du bei der Abfrage von Elementen die zweite Dimension angeben.

    MsgBox aHugo(20, 1)  ' Zugriff auf das 20. Element in der ersten Spalte
  3. Daten in einen Bereich schreiben: Du kannst die Inhalte des Arrays auch in einen Zellenbereich zurückschreiben.

    Range("F2:F31").Value = aHugo
    End Sub
  4. Fehlermeldung überprüfen: Stelle sicher, dass du beim Zugriff auf die Array-Elemente die korrekten Indizes verwendest, um den Fehler "Index außerhalb des gültigen Bereichs" zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler: Index außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn du versuchst, auf ein Array-Element mit einem nicht existierenden Index zuzugreifen. Stelle sicher, dass du die richtige Dimension verwendest.

  • Lösung: Wenn du ein Element in einem zweidimensionalen Array abfragen möchtest, verwende immer zwei Indizes:

    MsgBox aHugo(20, 1)  ' Korrekte Verwendung
  • Fehler bei der Verwendung von .Value: Ein Array hat keine Eigenschaft .Value. Verwende die Elementabfrage direkt.


Alternative Methoden

  • Ein-Dimensionales Array: Wenn du nur eine Dimension benötigst, kannst du das Array vor der Zuweisung umwandeln, um die Komplexität zu reduzieren.

    Dim aHugo() As Variant
    aHugo = Application.Transpose(Range("A1:A30").Value)
  • Array mit For Each Schleife: Du kannst auch eine For Each Schleife verwenden, um durch die Elemente eines Arrays zu iterieren.

    Dim i As Long
    For i = LBound(aHugo) To UBound(aHugo)
       MsgBox aHugo(i, 1)  ' Zugriff auf jedes Element in der ersten Spalte
    Next i

Praktische Beispiele

  • Zugriff auf Werte in mehreren Spalten:

    Dim aHugo()
    aHugo = Range("A1:C30").Value
    MsgBox aHugo(5, 3)  ' Zugriff auf das Element in der 5. Zeile und 3. Spalte
  • Werte in einem Array finden:

    Function FindValueInArray(value As Variant, arr As Variant) As Long
       Dim i As Long
       For i = LBound(arr) To UBound(arr)
           If arr(i, 1) = value Then
               FindValueInArray = i
               Exit Function
           End If
       Next i
       FindValueInArray = -1  ' Wert nicht gefunden
    End Function

Tipps für Profis

  • Verwende UBound und LBound: Nutze diese Funktionen, um die Grenzen deines Arrays dynamisch zu ermitteln. Dies hilft, Fehler beim Zugriff auf Array-Elemente zu vermeiden.

    Dim upperBound As Long
    upperBound = UBound(aHugo)
  • Debugging mit MsgBox: Verwende MsgBox, um Werte während der Ausführung zu überprüfen und sicherzustellen, dass du die richtigen Indizes verwendest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich nicht außerhalb des gültigen Bereichs zugreife?
Verwende LBound und UBound, um die gültigen Indizes für dein Array zu ermitteln, bevor du darauf zugreifst.

2. Was ist der Unterschied zwischen einem ein- und zweidimensionalen Array?
Ein eindimensionales Array hat nur eine Reihe von Elementen, während ein zweidimensionales Array mehrere Reihen und Spalten enthält. Wenn du aus einem Range ein Array erstellst, ist es immer zweidimensional.

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