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

VLOOKUP ... mal wieder

Forumthread: VLOOKUP ... mal wieder

VLOOKUP ... mal wieder
06.11.2025 09:28:51
Stefan
Hallo zusammen ...

Zuvor folgendes: Diesem Post gingen stundenlange Recherchen im Netz (auch hier), verbunden mit ebensolange Probierphasen und zerbasteln des Codes nebst neuschreiben desselben voraus :)

Und ich kriegs noch immer nich hin. :(

Deshalb habe ich mich entschlossen, ein Minimalbeispiel zu basteln und auch hier mit anzuhängen. Die originale Tabelle ist größer (~400 Zeilen, 8 Spalten). Gleich ist aber der Aufbau (dreistellige Zahl in "A", Text in "B")

Was will ich?
Die Sub ist eine einfache Tabellensuche, die nach der Übereinstimmung in Spalte A sucht und das Ergebnis aus Spalte B zurückspielt in eine Variable, die dann zur Weiterverarbeitung dient.

Der Code


Option Explicit

Private Sub UserForm_Initialize()
' ComboBox füllen
ComboBox1.RowSource = "Tabelle1!A1:A9"
End Sub


' -----------------------------------


Private Sub CommandButton1_Click()

' Variable festlegen

Dim var_Ereignis As String
Dim var_ComboWert As String

' Variablen füllen
var_ComboWert = Me.ComboBox1.Value

var_Ereignis = WorksheetFunction.VLookup(var_ComboWert, ThisWorkbook.Sheets("Tabelle1").Range("A1:B9"), 2, False)

MsgBox var_Ereignis

End Sub


Die Beispieldatei:
https://www.herber.de/bbs/user/179540.xlsm


Bei der Initialisierung des UserForms wird die ComboBox gefüllt und nach einem Click auf den Button deren Wert an die Variable 'var_ComboWert' übergeben, die dann für die VLookup-Abfrage genutzt wird, deren Ergebnis dann der Variable 'var_Ereignis' übergeben wird.

Eigentlich ganz simpel. Dachte ich jedenfalls.

Mache ich das ganze mit einem SVERWEIS klappt alles tabellos, nur eben in VBA nicht.

Ich kriege entweder einen RTE 1004 ("Die Vlookup-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden.") oder RTE 13 ("Typen unverträglich"), je nachdem, ob und wie ich die Variablenarten umstelle. Selbst wenn ich im Excel-Sheet die Zellformatierung auf "Text" (für beide Spalten) umstelle und die Variablen als "String" deklariere klappt es nich.

Wo hab ich jetzt 'n Denkfehler?

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VLOOKUP ... mal wieder
06.11.2025 09:50:45
daniel
Hi
1. du bekommst keinen Treffer, weil die Werte in der Exceltabelle Zahlen sind und du nach Texten suchst. Der SVerweis unterscheidet hier streng zwischen Text und Zahl
Die Werte erscheinen zwar linksbündig, aber nicht weil sie Texte sind, sondern weil sie linksbündig formatiert wurden.

du müsstest also deine Werte noch in Zahlen umwandeln, weil die Tabellenwerte Zahlen sind, oder alternativ dafür sorgen, dass in der Tabelle ebenfalls Texte stehen.

2. um den Fehler beim SVerweis im Falle einer Falscheingabe zu vermeiden, gibt es mehrere Möglichkeiten.
a) in neueren Excel, nimm den XVerweis/XLookUp und nutze dessen Rückgabewert im Fehlerfall, der dann auch Text oder Zahl sein kann.
b) in älteren Excel, deklariere die Aufnehmende Variable als Variant und verwende Application.VLookup anstelle Worksheetfunction. Hier wird kein Fehlerabbruch erzeugt, sondern ein Fehlerwert zurückgeben und und den kann die Variantvariable aufnehmen und du kannst dieses prüfen (if IsError(varErgebnis) oder if VarType(varErgebnis) = vbError)
c) in deinem Fall wäre aber das eleganteste, du weist der Combobox die ganze Tabelle zu und liest dann einfach den Tabellenwert aus:
ComboBox1.RowSource = "Tabelle1!A1:B9"

If Combobox1.ListIndex > -1 then varErgebnis = Combobox1.List(Combobox1.ListIndex, 1)

Gruß Daniel
Anzeige
AW: VLOOKUP ... mal wieder
06.11.2025 09:51:10
hary
Moin
Sollte so klappen.
Dim var_ComboWert As Long

gruss hary
AW: VLOOKUP ... mal wieder: Format
06.11.2025 09:57:58
MCO
Moin!

Scheinbar werden deine Tabellenwerte innerhalb der Funktion VLOOKUP in Zahlen gewandelt, auch wenn sie in der Tabelle als Text erscheinen.
Wenn mal also den Dropdown-Wert wieder in eine Zahl wandelt, dann funktioniert es:

Private Sub CommandButton1_Click()


' Variable festlegen
Dim var_Ereignis As String
Dim var_ComboWert As String

' Variablen füllen
var_ComboWert = Me.ComboBox1.Value
var_Ereignis = WorksheetFunction.VLookup(CLng(var_ComboWert), ThisWorkbook.Sheets("Tabelle1").Range("A1:B9"), 2, False)

MsgBox var_Ereignis

End Sub


Gruß, MCO
Anzeige
AW: VLOOKUP ... mal wieder: Format
06.11.2025 10:33:36
Stefan
Recht herzlichen Dank an alle "hilfreichen Geister".

Die Lösung von MCO hat es gebracht ... und jetzt guck ich mir mal die Syntax durch, um die Bedeutung besser zu verstehen. :)

(Ich glaube ich hatte noch vergessen voranzuschicken, dass mein derzeitiges OS Windows 11 und die Office-Version 365 ist. Lauffähig sein sollte der Code allerdings auch auf älteren Office-Versionen (z.B. 2019))
Anzeige
AW: VLOOKUP ... mal wieder
06.11.2025 10:21:28
Alwin Weisangler
Hallo,

diese Controls geben immer Text aus, egal was in den Zellen mal ursprünglich stand. Um dies flexibler zu halten würde ich dies so machen:


Dim var_ComboWert As Variant

' prüfen auf Format und Variablen füllen
If IsNumeric(ComboBox1) Then
var_ComboWert = CDbl(ComboBox1)
Else
var_ComboWert = ComboBox1
End If

Dann wird es auch in anderen Zusammenhängen ausreichend brauchbar funktionieren.

Gruß Uwe
Anzeige

Forumthreads zu verwandten Themen