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

Forumthread: VBA Index,Vergleich

VBA Index,Vergleich
20.02.2014 10:38:24
Thorsten
Hallo fleißige Helfer,
ich beschäftige mich das erste Mal mit VBA-Formel und bekomme es natürlich nicht hin.
Und zwar wollte ich diese Formel umsetzen:
=WENNFEHLER(INDEX(Import!K1:K5000;VERGLEICH(OVD!AA1;Import!A1:A5000;0));"Keine Angabe")
Das Ergebnis soll dann nur in einer Msgbox angezeigt werden.
Sub Test ()
Dim a As Range  ' Bereich
Dim b As Range  ' Suchbereich
Dim y As Range  ' Suchkriterium
Dim x As Variant
Set a = Sheets("Import").Range("K1 : K5000")
Set b = Sheets("Import").Range("A1 : A5000")
Set y = Sheets("OVD").Range("AA1")
With Application.WorksheetFunction
x = .IfError(Index(a, .Match((.y(b)), b, 0)), ("Keine Angabe"))
End With
MsgBox x
End Sub
Wie muss "x=" aussehen oder ist der Ansatz schon falsch?
Bitte um Hilfe.
Gruß Thorsten

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Index,Vergleich
20.02.2014 12:46:15
Beverly
Hi Thorsten,
versuche es mit Evaluate:
Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1:A5000,0)),""Keine  _
Angabe"")")


Anzeige
AW: VBA Index,Vergleich
20.02.2014 13:15:47
Thorsten
Hallo Karin,
vielen Dank - funktioniert prima.
Das sieht schon besser aus als mein langes Geschripse, was ich versucht habe aus anderen Beispielen umzuarbeiten.
Dim x As Variant
x = Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1:A5000,0)),""Keine Angabe"")")
MsgBox x
Nun gibt die Msgbox aber logischer Weise nur denWert zurück.
Ich hätte gern noch Text davor und dahinter.
Beispiel: Preis x EUR
Kannst du da noch weiterhelfen?
Gruß Thorsten aus Leipzig

Anzeige
AW: VBA Index,Vergleich
20.02.2014 13:42:03
Beverly
Hi Thorsten,
x = "Preis " & Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1: _
A5000,0)),""Keine Angabe"")") & " €"


Anzeige
Dankeschön o.T.
20.02.2014 13:49:57
Thorsten
o.T.

AW: VBA Index,Vergleich
20.02.2014 12:46:28
Rudi
Hallo,
Sub Test()
Dim a As Range  ' Bereich
Dim b As Range  ' Suchbereich
Dim y As Range  ' Suchkriterium
Dim x As Variant, vRow
Set a = Sheets("Import").Range("K1 : K5000")
Set b = Sheets("Import").Range("A1 : A5000")
Set y = Sheets("OVD").Range("AA1")
vRow = Application.Match(y, b, 0)
If Not IsError(vRow) Then
x = a(vRow)
Else
x = "Keine Angabe"
End If
MsgBox x
End Sub

Gruß
Rudi

Anzeige
AW: VBA Index,Vergleich
20.02.2014 13:37:03
Thorsten
Hallo Rudi,
na super, funktioniert auch reibungslos.
Warum ist VBA nur so unterschiedlich, bzw, wo ist der Unterschied zu Karins Code?
Auch an dich die Frage (aber bitte erst Warten ob Karin antwortet, ihr sollt euch ja nicht doppelt bemühen), wie bekomme ich jetzt noch Text in die Msgbox?
Momentan gibt es mir z.B.einen Wert 48,4 zurück.
Eigentlich sollte drin stehen: Preis 48,40 EUR
Gruß Thorsten

Anzeige
AW: VBA Index,Vergleich
20.02.2014 13:46:48
Thorsten
Hallo Rudi,
o.k. hab`s rausgefunden (Absoluter Anfänger ;-))
MsgBox "Preis " & x & " EUR"
Da fehlt zwar noch die Null aber damit kann ich leben.
Nochmals Danke und Gruß Thorsten

AW: VBA Index,Vergleich
20.02.2014 14:57:02
Rudi
Hallo,
MsgBox "Preis " & format(x,"0.00") & " EUR"
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Index und Vergleich im Excel


Schritt-für-Schritt-Anleitung

Um die Excel VBA Index und Vergleichsformeln zu verwenden, kannst du folgende Schritte befolgen:

  1. Öffne die Visual Basic for Applications (VBA) Umgebung in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" -> Einfügen -> Modul).

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub Test()
       Dim a As Range  ' Bereich
       Dim b As Range  ' Suchbereich
       Dim y As Range  ' Suchkriterium
       Dim x As Variant
    
       Set a = Sheets("Import").Range("K1:K5000")
       Set b = Sheets("Import").Range("A1:A5000")
       Set y = Sheets("OVD").Range("AA1")
    
       x = Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1:A5000,0)),""Keine Angabe"")")
       MsgBox "Preis " & Format(x, "0.00") & " EUR"
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus, um das Ergebnis in einer Msgbox anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: "Typen sind nicht kompatibel"

    • Dieser Fehler tritt häufig auf, wenn der Rückgabewert von INDEX und MATCH nicht mit dem erwarteten Datentyp übereinstimmt. Überprüfe die Datentypen in deinen Bereichen.
  • Fehler: "Keine Angabe" wird zurückgegeben

    • Dies bedeutet, dass der Suchwert nicht gefunden wurde. Stelle sicher, dass der Wert in OVD!AA1 im Bereich Import!A1:A5000 vorhanden ist.
  • Fehler bei der Verwendung von WorksheetFunction

    • Wenn du Application.WorksheetFunction verwendest, achte darauf, dass du die korrekten Argumente übergibst, z.B. .Index und .Match.

Alternative Methoden

Eine andere Möglichkeit, die VBA Index-Funktion zu verwenden, besteht darin, die IfError-Funktion manuell zu implementieren:

Sub TestAlternative()
    Dim a As Range
    Dim b As Range
    Dim y As Range
    Dim x As Variant, vRow

    Set a = Sheets("Import").Range("K1:K5000")
    Set b = Sheets("Import").Range("A1:A5000")
    Set y = Sheets("OVD").Range("AA1")

    vRow = Application.Match(y, b, 0)

    If Not IsError(vRow) Then
        x = a(vRow)
    Else
        x = "Keine Angabe"
    End If
    MsgBox "Preis " & Format(x, "0.00") & " EUR"
End Sub

Praktische Beispiele

Beispiel 1: Verwenden von Application.Evaluate

x = Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1:A5000,0)),""Keine Angabe"")")
MsgBox x

Beispiel 2: Kombinieren mit Text

x = "Preis " & Application.Evaluate("=IFERROR(INDEX(Import!K1:K5000,MATCH(OVD!AA1,Import!A1:A5000,0)),""Keine Angabe"")") & " EUR"
MsgBox x

Tipps für Profis

  • Nutze die vba index- und vba vergleich-Funktionen effizient, indem du die Datenbereiche dynamisch festlegst. So kannst du die Wartung deiner VBA-Skripte vereinfachen.

  • Verwende Application.Index für komplexe Datenstrukturen, um die Lesbarkeit und Wartbarkeit deines Codes zu erhöhen.

  • Dokumentiere deinen Code mit Kommentaren, um die Verwendung von VBA Index und VBA Vergleich für zukünftige Änderungen zu erleichtern.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen INDEX und MATCH in VBA?
INDEX gibt den Wert an einer bestimmten Position in einem Bereich zurück, während MATCH die Position eines Wertes in einem Bereich sucht.

2. Wie kann ich Fehler in VBA vermeiden?
Nutze die IfError-Funktion oder überprüfe die Werte vor der Verwendung in Index- und Vergleich-Funktionen, um Laufzeitfehler zu verhindern.

3. Welche Excel-Version wird für diese VBA-Beispiele benötigt?
Diese Beispiele sind in Excel 2010 und späteren Versionen anwendbar. Achte darauf, dass die VBA-Umgebung aktiviert ist.

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