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

Forumthread: Array mit Range füllen

Array mit Range füllen
Micha
Hallo Forum,
ich möchte zwei Values in ein Array laden, welches dann zum Suchen/Ersetzen benutzt werden soll. Hintergrund ist der Teilweise Einsatz kyrillischer Schriftzeichen, die man ja im VBA nicht benutzen kann.
Dim arrSrc
arrSrc = wsGer.Range("A13:A14").Value
Worksheets("Sheet1").Columns("A").Replace What:=arrSrc, _
Replacement:="Kostengruppe", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Was mach ich hier falsch? Denn es passiert leider nix beim Suchen/Ersetzen.
Kann mir jemand helfen?
Gruß
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array mit Range füllen
03.05.2010 13:01:04
fcs
Hallo Micha,
wenn du mehrere Suchbegriffe in einem Array übergibst, dann muss du in einer Schleife die Werte des Arrays beim Ersetzen abarbeiten. Da du auch kyrillische Zeichen suchst, muss du ggf. den Parameter MatchByte auf True setzen.
Gruß
Franz
Sub aaTest()
Dim arrSrc, iI As Long
arrSrc = wsGer.Range("A13:A14").Value
For iI = LBound(arrSrc) To UBound(arrSrc)
Worksheets("Sheet1").Columns("A").Replace What:=arrSrc(iI), _
Replacement:="Kostengruppe", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False   ', MatchByte:=True ' MatchByte-Paramater wegen kyrillisch?
Next
End Sub

Anzeige
AW: läuft bei mir nicht..
03.05.2010 14:11:17
JOWE
Hallo Franz,
der Code sieht gut aus, läuft bei mir aber weder in 2007 noch 2003:
Habe 'wsGer' nach 'Worksheets("Tabelle1")' und 'Worksheets("Sheet1")' nach 'Worksheets("Tabelle2")' geändert.
"Laufzeitfehler 9: Index außerhalb des gültigen Bereichs"
Bleibt in der Zeile mit dem Replace-Befehl hängen; betrifft arrSrc(iI) ?
Lasse ich mir im Debugmodus den Wert von iT anzeigen steht der bei 1.
Aber offenbar ist das Datenfeld leer; denn arrSrc(iT) produziert den Fehler!
Gruß
Jochen
Anzeige
AW: läuft bei mir nicht..
03.05.2010 14:20:29
Micha
Ich bekomme den selben Fehler. Und es liegt auch an arrSrc (Subscript out of range)...
AW: läuft bei mir nicht..
03.05.2010 15:15:22
JOWE
so vllt.?
Sub aaTest()
Dim arrSrc
Dim iI As Long
arrSrc = Array(Worksheets("Tabelle1").Range("A13"), Worksheets("Tabelle1").Range("A14"))
For i = 1 To 2
On Error Resume Next
Worksheets("Tabelle2").Columns("A").Replace What:=arrSrc(i), _
Replacement:="Kostengruppe", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False   ', MatchByte:=True ' MatchByte-Paramater wegen kyrillisch?
Next
End Sub
Gruß
Jochen
Anzeige
AW: läuft bei mir nicht..
03.05.2010 15:13:28
fcs
Hallo Jochen,
bei Zuweisung der Werte eines Zellbereichs zu einer Variantvariablen muss der Array-Wert auch mit Zeile/Spaltenbezug angegeben werden hier also arrSrc(iI, 1). Hatte ich übersehen.
Gruß
Franz
Sub aaTest()
Dim arrSrc, iI As Long, wsGer As Worksheet
Set wsGer = Worksheets("Tabelle2")
arrSrc = wsGer.Range("A13:A14").Value
For iI = LBound(arrSrc) To UBound(arrSrc)
Worksheets("Sheet1").Columns("A").Replace What:=arrSrc(iI, 1), _
Replacement:="Kostengruppe", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False   ', MatchByte:=True ' MatchByte-Paramater wegen kyrillisch?
Next
End Sub

Anzeige
AW: Jetzt läufts! Danke oT
03.05.2010 15:23:06
JOWE
Vielen Dank JOWE!!!
03.05.2010 15:36:35
Micha
Ist teilweiser Ersatz m.xlPart Absicht? orT
03.05.2010 13:04:01
Luc:-?
Gruß Luc :-?
Anzeige
Alles klar, erledigt! owT
03.05.2010 13:06:26
Luc:-?
:-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Array mit Range füllen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Array in Excel VBA aus einem Bereich (Range) zu füllen, kannst du die folgenden Schritte befolgen:

  1. Deklariere die Variablen:

    Dim arrSrc As Variant
    Dim iI As Long
    Dim wsGer As Worksheet
    Set wsGer = Worksheets("Tabelle1") ' oder der Name deines Arbeitsblatts
  2. Fülle das Array mit Werten aus dem Range:

    arrSrc = wsGer.Range("A13:A14").Value
  3. Verwende eine Schleife, um das Array abzuarbeiten:

    For iI = LBound(arrSrc) To UBound(arrSrc)
       Worksheets("Tabelle2").Columns("A").Replace What:=arrSrc(iI, 1), _
       Replacement:="Kostengruppe", LookAt:=xlPart, _
       SearchOrder:=xlByColumns, MatchCase:=True
    Next iI
  4. Führe den kompletten Code in einem Sub aus:

    Sub aaTest()
       Dim arrSrc As Variant
       Dim iI As Long
       Dim wsGer As Worksheet
       Set wsGer = Worksheets("Tabelle1")
    
       arrSrc = wsGer.Range("A13:A14").Value
       For iI = LBound(arrSrc) To UBound(arrSrc)
           Worksheets("Tabelle2").Columns("A").Replace What:=arrSrc(iI, 1), _
           Replacement:="Kostengruppe", LookAt:=xlPart, _
           SearchOrder:=xlByColumns, MatchCase:=True
       Next iI
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range": Dies passiert, wenn du versuchst, auf ein Element des Arrays zuzugreifen, das nicht existiert. Stelle sicher, dass du die richtige Zeile und Spalte angibst: arrSrc(iI, 1).

  • Leeres Array: Wenn arrSrc leer ist, kann der Replace-Befehl nicht ausgeführt werden. Überprüfe den Range, von dem du die Werte lädst.

  • Index außerhalb des gültigen Bereichs: Achte darauf, dass die korrekten Arbeitsblattnamen verwendet werden. Der Fehler tritt auf, wenn du auf ein nicht existierendes Arbeitsblatt zugreifst.


Alternative Methoden

Du kannst ein Array auch manuell befüllen, anstatt es aus einem Range zu laden:

Sub aaTestAlternative()
    Dim arrSrc As Variant
    arrSrc = Array("Wert1", "Wert2") ' Manuelles Befüllen des Arrays

    Dim i As Long
    For i = LBound(arrSrc) To UBound(arrSrc)
        Worksheets("Tabelle2").Columns("A").Replace What:=arrSrc(i), _
        Replacement:="Kostengruppe", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=True
    Next i
End Sub

Praktische Beispiele

Ein praktisches Beispiel für das Füllen eines mehrdimensionalen Arrays:

Sub aaTestMehrdimensional()
    Dim arrSrc(1 To 2, 1 To 1) As Variant
    arrSrc(1, 1) = "Wert1"
    arrSrc(2, 1) = "Wert2"

    Dim i As Long
    For i = 1 To 2
        Worksheets("Tabelle2").Columns("A").Replace What:=arrSrc(i, 1), _
        Replacement:="Kostengruppe", LookAt:=xlPart
    Next i
End Sub

Tipps für Profis

  • Nutze MatchByte:=True, wenn du mit kyrillischen Zeichen arbeitest, um mögliche Probleme beim Suchen und Ersetzen zu vermeiden.
  • Überprüfe die Range auf leere Zellen, bevor du das Array füllst, um Laufzeitfehler zu vermeiden.
  • Verwende Debug.Print, um die Werte im Array während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich ein Array aus einer größeren Tabelle füllen? Du kannst den Range anpassen, z.B. arrSrc = wsGer.Range("A1:A100").Value, um mehrere Werte zu laden.

2. Was mache ich, wenn ich ein mehrdimensionales Array füllen möchte? Verwende die Syntax arrSrc(i, j) und achte darauf, die Indizes korrekt zu setzen. Du kannst auch die Array-Funktion verwenden, um ein mehrdimensionales Array zu erstellen.

3. Wie kann ich überprüfen, ob ein Wert im Array vorhanden ist? Verwende eine Schleife oder die Application.Match-Funktion, um nach dem Wert im Array zu suchen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige