Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1608to1612
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vlookup, wenn nicht gefunden...

Vlookup, wenn nicht gefunden...
21.02.2018 11:12:19
Burak
Moin Moin,
also mein makro ermittelt über SVerweis aus einer zweispaltigen Liste den zugehörigen Wert zu jedem Barcode aus mehreren Tabellen.
Gelegentlich kommt ein Barcode vor, der in der zweispaltigen Liste (noch) nicht vorhanden ist, dann läuft das Makro in Error.
Bisher waren es immer Barcodes die mit einer 9 geendet haben. Dies habe ich über Modulo und Rest 9 rausgefiltert.
Jetzt kommen auch Barcodes mit einer 8 am Ende, die nicht in der Liste sind. Dies kann ich nicht über Modulo machen, da es Barcodes in der Liste gibt die mit einer 8 enden.
Mein Wunsch wäre es, dass er in der Schleife, wenn er den Barcode in der Liste nicht findet, einfach zum nächsten Barcode bzw. nächsten Step der Schleife springen soll.
Im optimalen Fall diesen nicht gefundenen Barcode iwo auflisten.
Die BarcodeListe sieht ungefähr so aus:
BarcodeLPMatrix

 AB
1CodeLP-Nutzen
211901
312701
412906
515001
615101
716102
816112
916122
1016132
1116282
1217301

Eine Beispieltabelle mit den Barcodes:
Hilfstabelle

 ABCDEF
1BarcodeMasterbarcodeSchichtLP NutzenDatumUhrzeit
211901190035347FS115.01.201806:27:25
311901190035345FS115.01.201806:27:43
411901190035343FS115.01.201806:28:09
511901190035340FS115.01.201806:28:40
677607760815533FS415.01.201813:14:24
777607760815745FS415.01.201813:14:49
877607760815729FS415.01.201813:15:15
977607760815489FS415.01.201813:15:42
1077607760815493FS415.01.201813:16:10
1177607760815497FS415.01.201813:18:45
1234303430126543SS615.01.201817:08:39
1334303430126537SS615.01.201817:09:47
1434303430126531SS615.01.201817:11:14
1534303430126525SS615.01.201817:12:07

Der Code:
Sub Ruestwechsel()
'Deklarationen der Variablen
Dim cntr As Long, c As Range, i As Long, Zeilenzahl As Long, Zeilenzahl2 As Long
Dim startdatum As Date, enddatum As Date, d As Variant, j As Long, n
Dim Summe, loLetzte As Long, loSpalte, pctCompl As Integer
'Gesuchtes Datum eingeben
startdatum = InputBox("Bitte gib ein Startdatum ein:")
enddatum = InputBox("Bitte gib ein Enddatum ein:")
Worksheets("Hilfstabelle").Cells.Clear
Worksheets("Linienauswertung - Grafiken").Cells.Clear
'Alle 5 Linien
For i = 2 To 6
With Worksheets("R" & i - 1)
'Rüstwechsel in Nachtschicht zählen und ausgeben
cntr = 0
For Each c In .Range("F3:F" & .Cells(.Rows.Count, 6).End(xlUp).Row)
If (c.Value = "NS" And c.Offset(, -5).Value  c.Offset(-1, -5).Value And c.Offset(, 7). _
Value >= startdatum And c.Offset(, 7).Value = 0.91666) Or (c.Value = "NS" And c.Offset(, -5).Value  c.Offset(-1, -5).Value And c.Offset(, 7).Value > startdatum And c.Offset(, 7).Value  c.Offset(-1, -5).Value And c.Offset(, 7). _
Value >= startdatum And c.Offset(, 7).Value  c.Offset(-1, -5).Value And c.Offset(, 7). _
Value >= startdatum And c.Offset(, 7).Value = startdatum And .Cells(n, 13). _
Value  .Cells(n - 1, 1).Value Then
Summe = Summe + .Cells(n, 5).Value
End If
Next n
'Summierte Rüstzeiten in Ausgabeblatt schreiben
Worksheets("Linienauswertung - Grafiken").Range("B" & i + 7).Value = Summe
'Spätschicht
Summe = 0
For n = 3 To .Cells(Rows.Count, 5).End(xlUp).Row
If .Cells(n, 6).Value = "SS" And .Cells(n, 13).Value >= startdatum And .Cells(n, 13). _
Value  .Cells(n - 1, 1).Value Then
Summe = Summe + .Cells(n, 5).Value
End If
Next n
'Summierte Rüstzeiten in Ausgabeblatt schreiben
Worksheets("Linienauswertung - Grafiken").Range("C" & i + 7).Value = Summe
'Nachtschicht
Summe = 0
For n = 3 To .Cells(Rows.Count, 5).End(xlUp).Row
If (.Cells(n, 14).Value > 0.9166666 And .Cells(n, 1).Value  .Cells(n - 1, 1).Value  _
And .Cells(n, 13).Value >= startdatum And .Cells(n, 13).Value  .Cells(n - 1, 1).Value And .Cells(n, 13).Value > startdatum And .Cells(n, 13).Value  "" Then
'Datum außerhalb Einträge entfernen
If .Range("E" & j).Value  enddatum + 1 Then
.Rows(j).Delete
j = j - 1
'Einträge vor der ersten Frühschicht entfernen
ElseIf .Range("E" & j).Value = startdatum And .Range("F" & j).Value = 0.25 Then
.Rows(j).Delete
j = j - 1
End If
End If
Next j
'Doppelte Einträge entfernen
With Worksheets("Hilfstabelle")
'Letzte Zeile ermitteln
loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Row
'Letzte Spalte ermitteln
loSpalte = .Cells(2, .Columns.Count).End(xlToLeft).Column + 1
.Range(.Cells(2, loSpalte), .Cells(loLetzte, loSpalte)).FormulaLocal = "=WENN(B1=B2;0; _
ZEILE())"
.Range(.Cells(1, loSpalte), .Cells(loLetzte, loSpalte)).Value = .Range(.Cells(1,  _
loSpalte), .Cells(loLetzte, loSpalte)).Value
.Cells(1, loSpalte) = 0
.Range(.Cells(1, 1), .Cells(loLetzte, loSpalte)).RemoveDuplicates Columns:=loSpalte,  _
Header:=xlNo
'Zellinhalte löschen
.Columns(loSpalte).ClearContents
End With
'Barcode aus Masterbarcode rauskopieren
Zeilenzahl = .Range("B1").CurrentRegion.Rows.Count
For Each d In .Range("B2:B" & Zeilenzahl)
If Len(d.Value) > 0 Then
.Cells(d.Row, 1).Value = Left(d.Value, 4)
End If
Next
'SVerweis über Barcode für "LP Nutzen" aus BarcodeLPMatrix
For j = 2 To Zeilenzahl
.Range("D" & j).Value = Application.WorksheetFunction.VLookup(.Range("A" & j).Value,  _
Worksheets("BarcodeLPMatrix").Range("A2:B146"), 2, False)
Next j
'Überschriften setzen
.Range("A1").Value = "Barcode"
.Range("D1").Value = "LP Nutzen"
'Überschriften Fettdruck
.Rows(1).Font.Bold = True
End With
'Zeilen zählen
Zeilenzahl = Worksheets("Hilfstabelle").Range("A1").CurrentRegion.Rows.Count
With Worksheets("Hilfstabelle")
'Leiterplatten zählen und eintragen
Worksheets("Linienauswertung - Grafiken").Range("B" & i + 14).Value = Application.SumIf(. _
Range("C2:C" & Zeilenzahl), "FS", .Range("D2:D" & Zeilenzahl))
Worksheets("Linienauswertung - Grafiken").Range("C" & i + 14).Value = Application.SumIf(. _
Range("C2:C" & Zeilenzahl), "SS", .Range("D2:D" & Zeilenzahl))
Worksheets("Linienauswertung - Grafiken").Range("D" & i + 14).Value = Application.SumIf(. _
Range("C2:C" & Zeilenzahl), "NS", .Range("D2:D" & Zeilenzahl))
'Nutzen zählen und eintragen
Worksheets("Linienauswertung - Grafiken").Range("B" & i + 21).Value = WorksheetFunction. _
CountIfs(.Range("C2:C" & Zeilenzahl), "FS")
Worksheets("Linienauswertung - Grafiken").Range("C" & i + 21).Value = WorksheetFunction. _
CountIfs(.Range("C2:C" & Zeilenzahl), "SS")
Worksheets("Linienauswertung - Grafiken").Range("D" & i + 21).Value = WorksheetFunction. _
CountIfs(.Range("C2:C" & Zeilenzahl), "NS")
End With
'Mikrostörungen zählen
With Worksheets("Mikrostörungen - Daten")
Zeilenzahl = Zeilenzahl2
Zeilenzahl2 = .Range("B" & Zeilenzahl2 + 4).End(xlDown).Row
Worksheets("Linienauswertung - Grafiken").Range("B" & i + 28).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "FS")
Worksheets("Linienauswertung - Grafiken").Range("C" & i + 28).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "SS")
Worksheets("Linienauswertung - Grafiken").Range("D" & i + 28).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "NS")
End With
Next i
Zeilenzahl = 0
Zeilenzahl2 = 0
With Worksheets("Linienauswertung - Grafiken")
For i = 2 To 6
'Störungen zählen
With Worksheets("Störungen - Daten")
Zeilenzahl = Zeilenzahl2
Zeilenzahl2 = .Range("B" & Zeilenzahl2 + 4).End(xlDown).Row
Worksheets("Linienauswertung - Grafiken").Range("B" & i + 35).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "FS")
Worksheets("Linienauswertung - Grafiken").Range("C" & i + 35).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "SS")
Worksheets("Linienauswertung - Grafiken").Range("D" & i + 35).Value = WorksheetFunction. _
CountIfs(.Range("F" & Zeilenzahl + 1 & ":F" & Zeilenzahl2), "NS")
End With
'Linienbezeichnungen eintragen
.Range("A" & i).Value = "R" & i - 1
.Range("A" & i + 7).Value = "R" & i - 1
.Range("A" & i + 14).Value = "R" & i - 1
.Range("A" & i + 21).Value = "R" & i - 1
.Range("A" & i + 28).Value = "R" & i - 1
.Range("A" & i + 35).Value = "R" & i - 1
'Tagesmengen summieren
.Range("E" & i + 14).Value = .Range("B" & i + 14).Value + .Range("C" & i + 14).Value + . _
Range("D" & i + 14).Value
.Range("E" & i + 21).Value = .Range("B" & i + 21).Value + .Range("C" & i + 21).Value + . _
Range("D" & i + 21).Value
Next i
'Tabellenbezeichnungen eintragen
.Range("A1").Value = "Rüstwechsel"
.Range("A8").Value = "Rüstwechselzeiten"
.Range("A15").Value = "Gesamtleistung LP"
.Range("A22").Value = "Gesamtleistung Nutzen"
.Range("A29").Value = "Mikrostörungen"
.Range("A36").Value = "Störungen"
'Datum eintragen
If startdatum  enddatum Then
.Range("F8").Value = startdatum
.Range("G8").Value = "-"
.Range("H8").Value = enddatum
Else
.Range("F8").Value = startdatum
End If
'Schichten eintragen
.Range("B1").Value = "Frühschicht"
.Range("C1").Value = "Spätschicht"
.Range("D1").Value = "Nachtschicht"
.Range("B8").Value = "Frühschicht"
.Range("C8").Value = "Spätschicht"
.Range("D8").Value = "Nachtschicht"
.Range("B15").Value = "Frühschicht"
.Range("C15").Value = "Spätschicht"
.Range("D15").Value = "Nachtschicht"
.Range("E15").Value = "Tagesmenge"
.Range("B22").Value = "Frühschicht"
.Range("C22").Value = "Spätschicht"
.Range("D22").Value = "Nachtschicht"
.Range("E22").Value = "Tagesmenge"
.Range("B29").Value = "Frühschicht"
.Range("C29").Value = "Spätschicht"
.Range("D29").Value = "Nachtschicht"
.Range("B36").Value = "Frühschicht"
.Range("C36").Value = "Spätschicht"
.Range("D36").Value = "Nachtschicht"
'Spaltebreiten
.Columns("A:A").ColumnWidth = 21
.Columns("B:E").ColumnWidth = 13
'Tabellenüberschriften Fettdruck
.Rows(1).Font.Bold = True
.Rows(8).Font.Bold = True
.Rows(15).Font.Bold = True
.Rows(22).Font.Bold = True
.Rows(29).Font.Bold = True
.Rows(36).Font.Bold = True
End With
End Sub
Das Vlookup:

'SVerweis über Barcode für "LP Nutzen" aus BarcodeLPMatrix
With Worksheets("Hilfstabelle")
For j = 2 To Zeilenzahl
.Range("D" & j).Value = Application.WorksheetFunction.VLookup(.Range("A" & j).Value, Worksheets( _
"BarcodeLPMatrix").Range("A2:B146"), 2, False)
Next j
End With
Nur übersichtlichkeitshalber:
Die Barcodeliste befindet sich auf dem Tabellenblatt
"BarcodeLPMatrix"
Daten mit den Barcodes werden aus den folgenden 5 Tabellenblättern
"R1", "R2", "R3", "R4" und "R5"
in das Tabellenblatt
"Hilfstabelle"
kopiert und ausgewertet.
Vielen Dank im Voraus!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
und? sollen wir das jetzt nachbauen? (owT)
21.02.2018 11:39:53
EtoPHG

AW: und? sollen wir das jetzt nachbauen? (owT)
21.02.2018 11:43:32
Burak
letzten Endes fehlt da ja nur ein Vlookup; IfNotMatch then next j, oder sehe ich das falsch?
AW: Vlookup, wenn nicht gefunden...
21.02.2018 11:44:48
UweD
Hallo
dann prüfe das vorher..
    Dim WF
    Set WF = Application.WorksheetFunction
    'SVerweis über Barcode für "LP Nutzen" aus BarcodeLPMatrix 
    With Worksheets("Hilfstabelle")
        For j = 2 To Zeilenzahl
            If WF.CountIf(Worksheets("BarcodeLPMatrix").Range("A2:A146"), .Range("D" & j).Value) > 0 Then
                .Range("D" & j).Value = WF.VLookup(.Range("A" & j).Value, Worksheets( _
                    "BarcodeLPMatrix").Range("A2:B146"), 2, False)
            End If
        Next j
    End With

Anzeige
AW: Vlookup, wenn nicht gefunden...
21.02.2018 12:20:39
Burak
Ein Fehler kriege ich nicht mehr, aber dafür sind einige Ergebnisse verfälscht (Nullen).
Hier ein kleiner Beispielausschnitt ohne Makros etc.:
https://www.herber.de/bbs/user/119967.xlsx
Vllt hilft das etwas weiter.
AW: Vlookup, wenn nicht gefunden...
21.02.2018 12:19:53
Rudi
Hallo,
nimm statt WorksheetFunktion.VLookup besser Application.Vlookup. Das liefert einen Fehlerwert, erzeugt aber keinen Fehler.
Schema:
Dim vntRet as Variant
'Code
vntRet= Application.Vlookup(......)
if Not IsError(vntRet) Then
'mach was
End If
Gruß
Rudi
Anzeige
AW: Vlookup, wenn nicht gefunden...
21.02.2018 13:13:42
Burak
Super! habe noch hinzugefügt, dass er bei Error eine 0 reinschreiben soll, damit SumIf kein ErrorWert ausgibt und jetzt funktioniert es. Danke dir und Danke auch an alle anderen :*

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige