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

Array durchlaufen, wie ?

Forumthread: Array durchlaufen, wie ?

Array durchlaufen, wie ?
29.06.2004 09:12:40
Christian
Hallo,
ich bin einen Schritt weiter gekommen, nur leider sind meine VBA Kentnisse doch etwas mehr eingerostet als ich anfangs dachte..
Ich habe schon 10 verschiedene Techniken versucht, das Array zu durchlaufen, aber nichts scheint zu funktionieren..
Wie erreiche ich es, das zu jeder Zelle einfach 1 addiert wird..
Im Augenblick kopiert er den Bereich welchen er als Argument bekommt, einfach in die Zielregion, also den Bereich wo die Funktion als Matrixformel eingeben ist. Das ist ja soweit richtig, nur würde ich natürlich auch gerne etwas mit den in den Feldern enthaltenen Daten machen, z.B. 1 auf jede Zahl addieren, oder prüfen ob sie einen Text enthalten..


Function test(xRange As Range)
Dim xArray2D()
xArray2D = xRange
'wie addiere ich auf jede Zelle 1 drauf..
test = xArray2D
End Function

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array durchlaufen, wie ?
29.06.2004 09:20:14
sergiesam
Hi,
wenn du zellen durchläufst, arbeitest du nicht mit einem klassischen Array sondern mit einem Rangeobjekt. Das kannst du bequem mit einer For-Each-Anweisung durchlaufen.

Sub test(xRange As Range)
Dim zelle As Range
For Each zelle In xRange
If IsNumeric(zelle.Value) Then
zelle.Value = zelle.Value + 1
End If
Next zelle
End Sub

Gruß,
Sam
Anzeige
AW: Array durchlaufen, wie ? (Klappt nicht)
29.06.2004 09:29:38
Christian
Hallo,
kann es sein, das dies NICHT in Benutzerfunktionen funktioniert..
Ich habe alles wie oben versucht, allerdings brauche ich das ganze eben in einer Benutzerfunktion, und folgendes klappt nicht:

Function test(xRange As Range)
Dim xArray2D As Range
Dim zelle As Range
xArray2D = xRange
For Each zelle In xArray2D
If IsNumeric(zelle.Value) Then
zelle.Value = zelle.Value + 1
End If
Next zelle
test = xArray2D
End Function

Keine Ahnung, ich weiss nicht ob es ein grundsaetzlicher Fehler ist, oder nur ein winyiges Typen oder Formatproblem..
Anzeige
AW: Array durchlaufen, wie ? (Klappt nicht)
29.06.2004 09:44:26
sergiesam
Hi,
du musst unterscheiden, ob es eine Benutzerfunktion ist (vgl. Summe, Mittelwert) oder ein Makro (Programm). Bei einer Benutzerdefinierten Funktion kannst du nur ein Ergebnis ermitteln und keine anderen Zellen verändern.
Siehe Beispiel:
https://www.herber.de/bbs/user/7838.xls
Sam
Anzeige
AW: Array durchlaufen, wie ? (Klappt nicht)
29.06.2004 09:54:14
Christian
Ja, aber ich muss doch auch bei einer Benutzerfunktion die Möglichkeit haben, das Ergebnis zu bearbeiten. MINV rechnet ja auch mit den ihr gegebenen Werten.
Ich will ja gar nicht die Zellen ändern, die ursprünglich die Werte enthalten, sondern die Zahlen im AUSGABE Array z.B. alle auf 3 setzen.
Das Problem ist einfach folgendes, eine einfache Funktion kriege ich hin, wie z.B.

Function addiere(a As Long, b As Long)
addiere = a + b
End Function

Aber wenn ich mit einem Array arbeiten muss, weil ich z.B. zu der Matrix A1 bis B2 jeweils eins addiere will, und dies als Matrixformel in A4 bis B5 eintragen, dann kann ich nicht auch die einzelnen Werte zugreifen, bzw diese ändern. (Im Ergebnis, nicht in den Quellzellen)
Es muss doch möglich sein, mehr als diese elementaren Operationen wie Plus oÄ auszuführen, also auch Werte dieses Arrays, bzw. Range zwischenzuspeichern oder zu ändern. (Wieder, nicht die Quelldaten, sondern zwischenErgebnisse)

Function test(xRange As Range)
Dim xArray2D()
Dim zelle As Variant
xArray2D = xRange
For Each zelle In xArray2D
If IsNumeric(zelle.Value) Then
zelle.Value = zelle.Value + 1
End If
Next zelle
test = xArray2D
End Function

Anzeige
AW: Array durchlaufen, wie ? (Klappt nicht)
29.06.2004 10:10:14
GerdZ
Hallo Christian,
Du suchst sowas wie folgenden Code:
Function test(xRange As Range)
Dim xArray2D()
Dim x As Integer, y As Integer
xArray2D = xRange
For x = LBound(xArray2D, 1) To UBound(xArray2D, 1)
For y = LBound(xArray2D, 2) To UBound(xArray2D, 2)
xArray2D(x, y) = xArray2D(x, y) * 3
Next y
Next x
test = xArray2D
End Function
Gruß
Gerd
Anzeige
DANKE das wars..
29.06.2004 10:49:52
Cristian
Super, ja klappt..
Damit kann ich jetzt weiter ausprobieren.
z.B. mit For-Each-Next
29.06.2004 09:22:17
Galenzo
Hallo,
z.B. mit einer FOR-EACH-SChleife:
Dim c as Range
For Each c in Range("A1:B10")
c=c+1
Next
Viel Erfolg!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Array durchlaufen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Array in Excel VBA zu durchlaufen, kannst Du eine For Each-Schleife verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, wie Du dies umsetzen kannst:

  1. Definiere die Funktion: Erstelle eine Funktion, die ein Range-Objekt als Argument entgegennimmt.
  2. Deklariere das Array: Verwende ein 2D-Array, um die Werte aus dem Range zu speichern.
  3. Durchlaufe das Array: Nutze eine For-Schleife, um durch die Indizes des Arrays zu iterieren und die gewünschten Operationen durchzuführen.

Hier ist ein Beispielcode, der zeigt, wie Du ein Array durchlaufen kannst:

Function test(xRange As Range)
    Dim xArray2D() As Variant
    Dim x As Long, y As Long

    xArray2D = xRange.Value ' Speichere die Range in einem Array

    For x = LBound(xArray2D, 1) To UBound(xArray2D, 1)
        For y = LBound(xArray2D, 2) To UBound(xArray2D, 2)
            xArray2D(x, y) = xArray2D(x, y) + 1 ' Addiere 1 zu jedem Element
        Next y
    Next x

    test = xArray2D ' Gebe das bearbeitete Array zurück
End Function

Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die beim Durchlaufen eines Arrays in Excel VBA auftreten können, sowie deren Lösungen:

  • Fehler: "Typen sind nicht kompatibel"
    Lösung: Stelle sicher, dass Du das Array als Variant deklarierst, um unterschiedliche Datentypen zu unterstützen.

  • Fehler: "Die Schleife wird nicht ausgeführt"
    Lösung: Überprüfe, ob das Range-Objekt, das Du übergibst, tatsächlich Werte enthält.

  • Fehler: "Kann nicht auf Zellen in einer Benutzerfunktion zugreifen"
    Lösung: Benutzerdefinierte Funktionen dürfen keine Zellen direkt ändern. Stattdessen kannst Du die Ergebnisse in einem Array speichern und zurückgeben, wie im Beispiel oben gezeigt.


Alternative Methoden

Neben der For Each-Schleife kannst Du auch die For-Schleife verwenden, um die Indizes des Arrays zu durchlaufen. Hier ist ein Beispiel:

Sub ArrayThroughLoop()
    Dim xArray() As Variant
    Dim i As Long

    xArray = Array(1, 2, 3, 4, 5)

    For i = LBound(xArray) To UBound(xArray)
        xArray(i) = xArray(i) * 2 ' Verdopple jeden Wert
    Next i
End Sub

Diese Methode ist besonders nützlich, wenn Du die Indizes benötigst.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du ein Array in Excel VBA durchlaufen kannst:

  1. Summe aller Werte in einem Array:

    Function SumArray(xRange As Range) As Double
        Dim xArray2D() As Variant
        Dim x As Long, y As Long
        Dim total As Double
    
        xArray2D = xRange.Value
        For x = LBound(xArray2D, 1) To UBound(xArray2D, 1)
            For y = LBound(xArray2D, 2) To UBound(xArray2D, 2)
                total = total + xArray2D(x, y)
            Next y
        Next x
    
        SumArray = total
    End Function
  2. Ersetzen von Text in einem Array:

    Function ReplaceText(xRange As Range, oldText As String, newText As String) As Variant
        Dim xArray2D() As Variant
        Dim x As Long, y As Long
    
        xArray2D = xRange.Value
        For x = LBound(xArray2D, 1) To UBound(xArray2D, 1)
            For y = LBound(xArray2D, 2) To UBound(xArray2D, 2)
                If xArray2D(x, y) = oldText Then
                    xArray2D(x, y) = newText
                End If
            Next y
        Next x
    
        ReplaceText = xArray2D
    End Function

Tipps für Profis

  • Nutze die Option Explicit-Anweisung: Dies zwingt Dich, alle Variablen zu deklarieren, was Fehler vermeidet.
  • Verwende Variant für Flexibilität: Wenn Du mit unterschiedlichen Datentypen arbeitest, ist es hilfreich, Variants zu verwenden.
  • Teste mit kleinen Datenmengen: Beginne mit kleinen Arrays, um die Funktionsweise zu verstehen, bevor Du mit größeren Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Kann ich ein Array in einer Benutzerdefinierten Funktion ändern?
Nein, in einer Benutzerdefinierten Funktion kannst Du die Originaldaten nicht ändern. Du kannst jedoch die Werte im Ergebnisarray anpassen.

2. Wie kann ich ein Array in einem anderen Sub oder einer Funktion verwenden?
Du kannst das Array als Argument an andere Subs oder Funktionen übergeben, um es dort weiterzuverarbeiten.

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