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

Forumthread: Mehrere Kriterien in VBA vergleichen

Mehrere Kriterien in VBA vergleichen
10.12.2015 20:02:33
Andi
Hallo liebe Excelfreunde,
nach vergeblichem suchen habe ich heute meine erste Frage im Forum:
Ich habe eine Tabelle, die wie folgt aussieht:
POS SPRACHE CODE TEXT
1 DE TBL FLÄCHE
2 DE TBL KOSTENSTELLE
3 EN TBL AREA
4 EN TBL COSTCENTER
...
In VBA möchte ich zu den 3 Variablen POS, SPRACHE, CODE das dazugehörige Feld "Text" lesen und weiter verarbeiten.
Daher habe ich im ersten Schritt die (funktionierende) Formel im Tabellenblatt aufgebaut und die Variablen POS, SPRACHE, CODE in Zeile 16 geschrieben:
=INDEX(D1:D10;VERGLEICH(A16&B16&C16;A1:A10&B1:B10&C1:C10;0))
Nun bekomme ich ums verrecken nicht diese performante Formel in VBA umgesetzt. "Match" statt "vergleich" hat anscheinend eine andere syntax.
Die einzige Lösung die ich in VBA gefunden habe, läuft über eine Schleife.
Das kostet aber zuviel Platz und performance:
Public Sub test()
Dim TEXT, X, Y As String
Dim i As Long
X = Cells(17, 1) & Cells(17, 2) & Cells(17, 3)
For i = 1 To 15
Y = Cells(i, 1) & Cells(i, 2) & Cells(i, 3)
If Y = X Then
TEXT = Application.WorksheetFunction.Index(Range("D1:D11"), i)
i = 99
End If
Next i
End Sub
Kann mir jemand dabei weiterhelfen?
Hier die Datei: https://www.herber.de/bbs/user/102171.txt (txt durch xlsm ersetzen)

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
was spricht gegen eine Schleife?
10.12.2015 21:10:08
Tino
Hallo,
allerdings würde ich die Verarbeitung nicht im Range sondern in einem Array machen.
Sollte auch schneller sein wie die Vergleich/Match Funktion.
Hier mal ein kleines Beispiel:
https://www.herber.de/bbs/user/102172.xlsm
Gruß Tino

Anzeige
AW: was spricht gegen eine Schleife?
11.12.2015 22:06:46
Andi
Hallo Tino,
danke für die Rückmeldung.
Vergleich/Match war nur für die Tabellenblattversion.
Ich hatte gehofft, ohne Schleife auszukommen, da ich mehrere Variablen so zuweisen muß.
Trotzdem vielen Dank.
Viele Grüße
Andi

AW: was spricht gegen eine Schleife?
11.12.2015 22:25:45
Tino
Hallo,
daher habe ich es als Funktion geschrieben.
Wenn es zu viele Daten sind, würde ich es evtl. als Eventmakro erstellen.
Gruß Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Kriterien in VBA vergleichen


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass deine Tabelle die Spalten POS, SPRACHE, CODE und TEXT enthält. Die Beispiel-Daten könnten so aussehen:

    POS SPRACHE CODE TEXT
    1 DE TBL FLÄCHE
    2 DE TBL KOSTENSTELLE
    3 EN TBL AREA
    4 EN TBL COSTCENTER
  2. Formel im Excel verwenden: Um den Text aus den Spalten basierend auf den Kriterien zu erhalten, kannst du folgende Formel nutzen:

    =INDEX(D1:D10;VERGLEICH(A16&B16&C16;A1:A10&B1:B10&C1:C10;0))

    Diese Formel kombiniert die Werte der Variablen POS, SPRACHE und CODE.

  3. VBA-Implementierung: Verwende die folgende VBA-Prozedur, um die Werte in VBA zu vergleichen und den entsprechenden TEXT zurückzugeben:

    Public Sub test()
       Dim TEXT As String
       Dim X As String
       Dim Y As String
       Dim i As Long
    
       X = Cells(17, 1) & Cells(17, 2) & Cells(17, 3)
       For i = 1 To 15
           Y = Cells(i, 1) & Cells(i, 2) & Cells(i, 3)
           If Y = X Then
               TEXT = Application.WorksheetFunction.Index(Range("D1:D11"), i)
               Exit For
           End If
       Next i
       MsgBox TEXT
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht korrekt": Achte darauf, dass die Variablen in VBA korrekt deklariert sind. Überprüfe auch, dass die Daten in den Zellen, die du abfragst, den erwarteten Datentypen entsprechen.

  • Probleme mit der Schleife: Wenn du eine große Datenmenge hast, kann die Verwendung einer Schleife zu Performance-Problemen führen. Hier könnte die Verwendung eines Arrays eine bessere Performance bieten.


Alternative Methoden

Anstelle einer Schleife kannst du auch Arrays verwenden, um die Daten schneller zu verarbeiten. Hier ein Beispiel:

Public Sub testArray()
    Dim dataArray As Variant
    Dim searchValue As String
    Dim i As Long
    Dim TEXT As String

    dataArray = Range("A1:D10").Value
    searchValue = Cells(17, 1) & Cells(17, 2) & Cells(17, 3)

    For i = LBound(dataArray, 1) To UBound(dataArray, 1)
        If dataArray(i, 1) & dataArray(i, 2) & dataArray(i, 3) = searchValue Then
            TEXT = dataArray(i, 4)
            Exit For
        End If
    Next i
    MsgBox TEXT
End Sub

Praktische Beispiele

Ein praktisches Beispiel für den Einsatz der Funktion könnte so aussehen:

  • In Zelle A16 steht der Wert 1, in B16 der Wert DE, und in C16 der Wert TBL.

Wenn du nun das Makro ausführst, erhältst du in einem Message-Box-Fenster den entsprechenden TEXT: FLÄCHE.


Tipps für Profis

  • Verwende Option Explicit: Setze in deinem VBA-Projekt Option Explicit am Anfang eines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.

  • Optimierung durch Arrays: Wenn du mit großen Datenmengen arbeitest, kann das Arbeiten mit Arrays erheblich schneller sein als das Durchlaufen von Zellen.


FAQ: Häufige Fragen

1. Kann ich die Formel auch in einer älteren Excel-Version verwenden?
Ja, die Formel sollte in den meisten Excel-Versionen funktionieren, die die Funktionen INDEX und VERGLEICH unterstützen.

2. Wie kann ich die Leistung meines VBA-Codes verbessern?
Verwende Arrays, um Daten effizienter zu verarbeiten, anstatt die Zellen direkt zu durchlaufen. Dies kann die Ausführungszeit erheblich verkürzen.

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