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

Forumthread: SVERWEIS Leere Einträge überspringen

SVERWEIS Leere Einträge überspringen
Marc
Hallo,
ich habe ein Problem mit dem SVERWEIS. Zwar habe ich nun hinbekommen wie ich Ihn anwende möchte aber gerne, das wenn das "Wonach soll er suchen" leer ist er in die selbe Spalte kein "N/A" sondern gar nichts schreibt. Sprich, das er alle leeren "Input" Spalten überspringt.
Mein bislang funktionierender Code:

Dim was As range, wo As range, wohin as range
Set was = ActiveWorkbook.ActiveSheet.range("A1:A500")
Set wo = Workbooks("Material Master Overview with prices - sauber.XLS").Sheets("Material Master  _
_
Overview with p").range("A1:B4400")
Set wohin = ActiveWorkbook.ActiveSheet.range("C1:C500")
With wohin
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2, False)
End With
End Sub


Ich würde mich sehr über eure Hilfe freuen.
Vielen Dank Gruß
Marc

Anzeige
AW: SVERWEIS Leere Einträge überspringen
30.06.2009 19:47:14
Hajo_Zi
Hallo Marc
With wohin
if was.Value"" then
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2, False)
end if
End With

AW: SVERWEIS Leere Einträge überspringen
30.06.2009 20:04:31
Marc
Hallo Hajo,
danke für die schnelle Antwort. Ich bekomme beim Ablauf aber ein

Runtime Error '13' - Type Missmatch


in


If was.Value  "" Then


wo, was und wohin sind als wie u.g. as range definert und mit Set zugeordnet.
Danke
Gruß
Marc

Anzeige
AW: SVERWEIS Leere Einträge überspringen
30.06.2009 20:04:43
Marc
Hallo Hajo,
danke für die schnelle Antwort. Ich bekomme beim Ablauf aber ein

Runtime Error '13' - Type Missmatch


in


If was.Value  "" Then


wo, was und wohin sind als wie u.g. as range definert und mit Set zugeordnet.
Danke
Gruß
Marc

Anzeige
AW: SVERWEIS Leere Einträge überspringen
30.06.2009 20:14:55
Hajo_Zi
Hallo Marc,
ich sehe Deine Datei nicht. Vielleicht 0
Gruß Hajo
Dafür braucht man die Datei...
30.06.2009 20:20:33
{Boris}
Hi Hajo,
...nicht zu sehen:

If was.Value  "" Then


kann nicht funktionieren, solange was einem mehrzelligen Bereich zugeordnet ist.
Test mal:


Sub wohl_kaum()
Dim was As Range
Set was = Range("A1:A50")
MsgBox was.Value
End Sub


Allerdings verwundert mich der Satz in der ersten Anfrage:
Mein bislang funktionierender Code:
Grüße Boris

Anzeige
AW: Dafür braucht man die Datei...
30.06.2009 20:31:05
Marc
@Boris
Das mit deinem MsgBox Tip verursacht den selben Fehler.
Und auf deine nicht verstandene von mir getätigte Aussage zu kommen, war mit dem bislang funktionierendem Code, der Vlookup Prozess ohne Berücksichtigung der nicht belegten Zellen gemeint, welches ich hier gerade versuche hinzu zu fügen.
@Hajo
leider klappt

0

auch nicht
Gruß
Marc

Anzeige
Ich hab Dich wohl verstanden...
30.06.2009 20:38:29
{Boris}
Hi Marc,
...aber Dein Ursprungscode kann nicht funktionieren:

Option Explicit
Sub wohl_kaum()
Dim was As Range, wo As Range, wohin As Range
Set was = Range("A1:A500")
Set wo = Range("B1:C4400")
Set wohin = ActiveWorkbook.ActiveSheet.Range("D1:D500")
With wohin
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2, False)
End With
End Sub


Im Leben nicht - und auch nicht danach. Daher mein - vereinfachtes - Beispiel - nur des Pudels Kern wegen.
Grüße Boris

Anzeige
AW: Ich hab Dich wohl verstanden...
30.06.2009 20:59:21
Marc
Hey Boris
kannst du mir denn den Gefallen tun und meinen Code so korregieren das er mit meinem Wunsch, das kein Vlookup bei einer leeren Inputzelle statt findet, also die leere Zelle überspringt?
Mit dem Code hier packt er mir überall dort, wo er keine Übereinstimmung erfährt ein N/A rein:

ption Explicit
Sub sver()
Dim was As range, wo As range, wohin As range
Set was = ActiveWorkbook.ActiveSheet.range("A9:A500")
Set wo = Workbooks("Material Master Overview with prices - sauber.XLS").Sheets("Material Master  _
Overview with p").range("A1:B4400")
Set wohin = ActiveWorkbook.ActiveSheet.range("C9:C500")
With wohin
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2, False)
End With
End Sub


Danke

Anzeige
Sorry, aber...
30.06.2009 21:06:22
{Boris}
Hi Marc,
...ich will Dir einfach nicht glauben, dass Dein bisheriger Code überhaupt irgendein Ergebnis liefert - und sei es N/A.
Ergo werde ich da auch nicht rumbasteln, denn das führt nur vom berühmten Hölzchen zum Stöckchen.
Den grundlegenden Fehler hab ich Dir - imho - deutlich genannt.
Zudem dürfte

wo.Value


auch nicht funktionieren, da SVERWEIS (Vlookup) als 2. Parameter den Datentyp Matrix verlangt - und das kann in Verbindung mit der Value-Eigenschaft so oder so nicht funktionieren.
Grüße Boris

Anzeige
Noch offen...
30.06.2009 21:10:39
{Boris}
Hi Marc,
...denn ich bin erstmal weg. Meine Beiträge zu Deiner Frage mögen Dich nicht direkt befriedigen, aber wenn Du Dich wirklich damit beschäftigst, wirst Du imho viel mehr lernen, als wenn Du hier nen funktionierenden Code gepostet bekommst, bei dem Du nicht verstehst, warum er funktioniert (bzw. warum es der bisherige nicht tut).
Nix für ungut - we will see.
Grüße Boris
Anzeige
AW: Noch offen...
01.07.2009 14:11:41
Marc
Hallo Boris
nenne mir bitte einen vernünftigen Grund warum ich in als Ingineur in einem Fachkompetenen Exel-Forum eine Frage stellen würde, die ich auf einer Lüge, in diesem Fall einem falschen nicht funktionierenden Code, aufbauen würde?
Der o.g. und hier nochmals wiederholte Code gibt bei Übereinstimmung den gewünschten Wert aus schreibt aber ein N/A bei Nichtübereinstimmung. Mein Ziel, auf welches ich auch nach längerer Eingenarbeit nicht gekommen bin ist, das leere Spalten übersprungen werden.

Sub sver()
Dim was As range, wo As range, wohin As range
Set was = ActiveWorkbook.ActiveSheet.range("A9:A500")
Set wo = Workbooks("Material Master Overview with prices - sauber.XLS").Sheets("Material Master  _
Overview with p").range("A1:B4400")
Set wohin = ActiveWorkbook.ActiveSheet.range("C9:C500")
With wohin
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2, False)
End With
End Sub


Anbei habe ich zur Veranschaulichung die Ausgangsmappe und die Mappe aus der er Daten liest angehangen.
Userbild
Userbild
Ich hoffe auf eure Hilfe
Gruß
Marc

Anzeige
Ich kenn keinen Grund...
01.07.2009 15:02:03
{Boris}
Hi Marc,
nenne mir bitte einen vernünftigen Grund warum ich in als Ingineur in einem Fachkompetenen Exel-Forum eine Frage stellen würde, die ich auf einer Lüge, in diesem Fall einem falschen nicht funktionierenden Code, aufbauen würde?
Das will ich gar nicht unterstellen - und mir fällt auch kein Grund ein ;-)
Allerdings habe ich es - auch unter größter Anstrengung - nicht geschafft, den Code zum Laufen zu bringen, was an diesen 2 Fehlern liegt:

With wohin
.Value = Application.WorksheetFunction.VLookup(was.Value, wo.Value, 2,  _
False)
End With


Also - nix für ungut. Dierk hat Dir ja den Code gepostet.
Grüße Boris

Anzeige
AW: SVERWEIS Leere Einträge überspringen
30.06.2009 21:31:35
D.Saster
Hallo,
eigentlich ist es ziemlich dreist zu behaupten, der Code hätte funktioniert.
Aber trotzdem:

Sub test()
Dim was As Range, wo As Range
Dim wasZelle As Range, varWert As Variant
Application.ScreenUpdating = False
Set was = ActiveWorkbook.ActiveSheet.Range("A1:A500")
Set wo = Workbooks("Material Master Overview with prices - sauber.XLS"). _
Sheets("Material Master Overview with p").Range("A1:B4400")
For Each wasZelle In was
varWert = Application.VLookup(wasZelle.Value, wo, 2, 0)
If Not IsError(varWert) Then wasZelle.Offset(, 2) = varWert
Next
Application.ScreenUpdating = True
End Sub


Gruß
Dierk

Anzeige
AW: SVERWEIS Leere Einträge überspringen
01.07.2009 14:43:49
Marc
Hallo Dierk
ich danke dir vielmals für deine schnelle Hilfe.
Gruß
Marc

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SVERWEIS: Leere Einträge überspringen in Excel


Schritt-für-Schritt-Anleitung

Um leere Zellen beim SVERWEIS in Excel zu überspringen, kannst Du folgenden VBA-Code verwenden:

Sub sverweisLeereZellenUeberspringen()
    Dim was As Range, wo As Range
    Dim wasZelle As Range, varWert As Variant
    Application.ScreenUpdating = False

    Set was = ActiveWorkbook.ActiveSheet.Range("A1:A500")
    Set wo = Workbooks("Material Master Overview with prices - sauber.XLS").Sheets("Material Master Overview with p").Range("A1:B4400")

    For Each wasZelle In was
        If wasZelle.Value <> "" Then
            varWert = Application.VLookup(wasZelle.Value, wo, 2, False)
            If Not IsError(varWert) Then
                wasZelle.Offset(, 2).Value = varWert
            End If
        End If
    Next
    Application.ScreenUpdating = True
End Sub

In diesem Code wird jede Zelle in dem Bereich was überprüft. Wenn die Zelle nicht leer ist, wird der SVERWEIS durchgeführt. Andernfalls wird einfach zur nächsten Zelle übergegangen.


Häufige Fehler und Lösungen

  1. Runtime Error '13' - Type Mismatch

    • Dies kann auftreten, wenn Du versuchst, einen mehrzelligen Bereich direkt mit .Value zu verwenden. Achte darauf, dass Du die Zellen einzeln überprüfst, wie im obigen Code gezeigt.
  2. N/A Fehler bei Nichtübereinstimmung

    • Um N/A zu vermeiden, solltest Du den Rückgabewert von VLookup in einer Variablen speichern und dann prüfen, ob es ein Fehler ist, bevor Du den Wert in die Zielzelle schreibst.

Alternative Methoden

Eine Alternative zur Verwendung von VBA ist die Anwendung von Formeln in Excel:

=IF(A1="", "", VLOOKUP(A1, 'Material Master Overview with prices - sauber.XLS'!A1:B4400, 2, FALSE))

Diese Formel überprüft, ob die Zelle A1 leer ist. Wenn ja, wird nichts ausgegeben; andernfalls wird der SVERWEIS durchgeführt. Du kannst diese Formel nach unten ziehen, um sie auf andere Zellen anzuwenden.


Praktische Beispiele

Angenommen, Du hast in Spalte A einige Artikelnummern und in Spalte B deren Preise. Du möchtest die Preise in Spalte C anzeigen, jedoch nur für die Artikelnummern, die nicht leer sind. Hier ist, wie Du den VBA-Code anpassen kannst:

Sub sverweisPreise()
    Dim was As Range, wo As Range
    Dim wasZelle As Range, varWert As Variant
    Application.ScreenUpdating = False

    Set was = ActiveWorkbook.ActiveSheet.Range("A1:A500")
    Set wo = Workbooks("Material Master Overview with prices - sauber.XLS").Sheets("Material Master Overview with p").Range("A1:B4400")

    For Each wasZelle In was
        If wasZelle.Value <> "" Then
            varWert = Application.VLookup(wasZelle.Value, wo, 2, False)
            If Not IsError(varWert) Then
                wasZelle.Offset(, 2).Value = varWert
            End If
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Stelle sicher, dass der Suchbereich (wo) und der Wertbereich (was) die gleichen Datentypen haben, um Fehler zu vermeiden.
  • Verwende die Funktion IsError, um sicherzustellen, dass der Rückgabewert von VLookup tatsächlich ein Wert ist und kein Fehler.
  • Du kannst auch die Application.Match-Funktion verwenden, um die Suche zu optimieren, besonders wenn Du große Datenmengen bearbeitest.

FAQ: Häufige Fragen

1. Was mache ich, wenn der SVERWEIS immer N/A zurückgibt? Überprüfe, ob die gesuchten Werte tatsächlich im Suchbereich vorhanden sind und dass die Datentypen übereinstimmen.

2. Kann ich den SVERWEIS ohne VBA nutzen? Ja, Du kannst Formeln verwenden, die die gleiche Logik wie der VBA-Code nutzen, um leere Zellen zu überprüfen.

3. Funktioniert dieser Code in allen Excel-Versionen? Der VBA-Code sollte in den meisten modernen Excel-Versionen (Excel 2010 und später) funktionieren. Achte darauf, dass Makros in Deiner Excel-Anwendung aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige