entschuldige die späte Antwort. Aber ja du hast auf jeden Fall weitergeholfen!! Vielen Dank dafür. Würde es eigentlich etwas bringen, wenn eine Lieferantenliste existiert die alle Lieferanten enthält nach denen man dann die Formel erweitern kann?
06.03.2020, 11:21 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2020, 11:21 von ABC_15.)
Hallo atilla,
nochmals Danke für die Hilfe. Du hast mich nochmals auf eine Idee gebracht! Evtl. kann ich ja so mein Problem lösen.
Zur Erklärung: (siehe Excel Liste)
- In Spalte C sind die Lieferanten (in den manchmal unterschiedlichen Schreibweisen) - In Spalte D sind die Bestellungen (in denen manchmal der Lieferant steht, meistens in einer anderen Schreibweise, etc.) - In Spalte H stehen etwas weiter unten die einzelnen Lieferanten
Ziel: Die Lieferanten in Spalte H sollen mit den Lieferanten-Namen in Spalte C verglichen werden und wenn ein Name übereinstimmt, dann soll der Name des Lieferanten in Spalte E ausgegeben werden, ansonsten soll ein Achtung oder Fehlermeldung kommen.
BSP: Spalte C Zeile 4: Huber AG in Spalte H (Lieferantenliste) steht Huber AG Ausgabe in Spalte E: Huber AG
ich habe bereits ein ähnliches Problem beschrieben, leider konnte man mir aufgrund meiner kryptischen Problemstellung nicht weiterhelfen. Daher neuer Versuch in (hoffentlich) verständlicher Schreibweise und vielleicht neuen Ideen.
Folgendes Problem:
- In Tabelle 1 existiert eine Tabelle mit unterschiedlichen Lieferanten - In Tabelle 2 eine Tabelle indem die Lieferanten (Spalte G) und die Bestellung (Spalte H) einsehbar ist - In Tabelle 2 sind neben den Lieferanten auch noch andere Namen (z.B. Herr Ralf Schmidt) oder Lückenfüller (z.B. CpD LUL) angegeben. Zusätzlich ist manchmal die Lieferantenschreibweise anders (z.B. Müller GMBH statt Müller GmbH), was aber nur selten vorkommt.
Mein Ziel: Excel soll mir in einer extra Spalte (Spalte I) ausgeben wenn der Lieferant in Spalte G mit der Tabelle der Lieferanten übereinstimmt, ansonsten soll ein Achtung oder Fehlermeldung kommen
Hier eine Beispiel Datei:
Zur Erklärung: (siehe Excel Liste)
In Tabelle 2 Zieldatei - In Spalte C sind die Lieferanten (in den manchmal unterschiedlichen Schreibweisen) - In Spalte D sind die Bestellungen (in denen manchmal der Lieferant steht, meistens in einer anderen Schreibweise, etc.)
In Tabelle 1 Lieferantenliste - In Spalte C stehen die Lieferanten
Ziel: Die Lieferanten aus Tabelle 1 Lieferantenliste sollen mit den Lieferanten-Namen in Tabelle 2 Zieltabelle in Spalte C verglichen werden und wenn ein Name übereinstimmt, dann soll der Name des Lieferanten in Spalte E in der Tabelle 2 Zieldatei ausgegeben werden, ansonsten soll ein Achtung oder Fehlermeldung kommen.
BSP: Spalte C Zeile 4: Huber AG (Tabelle 2 Zieltabelle) in Spalte C (Tabelle 1 Lieferantenliste) steht Huber AG Ausgabe in Spalte E: Huber AG (Tabelle 2 Zieltabelle)
Sub prüfen() Dim i As Long, j As Long, n As Long Dim lngSuche As Long, lngL Dim suchFeld Dim Lieferanten Dim strgWarnung As String
strgWarnung = "ACHTUNG"
'Lieferantentabelle With Sheets("Tabelle 1 Lieferantenliste") lngL = .Cells(.Rows.Count, 3).End(xlUp).Row Lieferanten = .Range("C6:C" & lngL) End With
'Suchtabelle With Sheets("Tabelle 2 Zieltabelle") lngSuche = .Cells(.Rows.Count, 3).End(xlUp).Row suchFeld = .Range("C4:E" & lngSuche) For i = 1 To lngSuche - 3 For j = 1 To lngL - 5 If InStr(1, UCase(Replace(Replace(suchFeld(i, 1), " ", ""), ".", "")), UCase(Replace(Replace(Lieferanten(j, 1), " ", ""), ".", ""))) Then suchFeld(i, 3) = Lieferanten(j, 1) 'Bei Fund wird die Bezeichnung aus Lieferantenliste zurückgegeben Exit For Else suchFeld(i, 3) = strgWarnung End If Next j Next i .Range("E4:E" & lngSuche).ClearContents 'Bereich zum schreiben löschen .Range("E4:E" & lngSuche) = (Application.Index(suchFeld, 0, 3)) 'Ergebnisse schreiben End With End Sub
VBA hat super funktioniert! Allerdings bekomme ich es nicht ganz auf meine eigentliche Excel Tabelle hin... Ich habe es geschafft eine weitere Spalte zu erstellen die alle Lieferanten auswirft. Allerdings in unterschiedlicher Schreibweise (z.B.: Müller GmbH, MÜLLER GMBH, Müller, Müller GMBH, usw.) Zusätzlich habe ich eine Lieferantenliste mit den Originalnamen der Lieferanten (z.B.: Müller GmbH, Maier AG, etc.) kann ich die beiden Spalten nun gegeneinander "Matchen" lassen und ein eindeutiger Lieferant erscheint in einer neuen Spalte?
BSP: Spalte A Spalte B (Lieferantenliste) Spalte C (Ziel) Müller GMBH Müller GmbH Müller GmbH Müller Müller GmbH Müller GmbH Maier ag Maier AG Maier AG Maier Maier AG Maier Ag MAIER AG Maier AG Maier AG
dzu brauchte es im vorigen Code nur zwei Zeilen Code. Das ist der gesamte Code:
Code:
Sub prüfen() Dim i As Long, j As Long, n As Long Dim lngSuche As Long, lngL Dim suchFeld Dim Lieferanten Dim strgWarnung As String
strgWarnung = "ACHTUNG"
'Lieferantentabelle With Sheets("Tabelle 1 Lieferantenliste") lngL = .Cells(.Rows.Count, 3).End(xlUp).Row Lieferanten = .Range("C6:C" & lngL) End With
'Suchtabelle With Sheets("Tabelle 2 Zieltabelle") lngSuche = .Cells(.Rows.Count, 3).End(xlUp).Row suchFeld = .Range("C4:E" & lngSuche) For i = 1 To lngSuche - 3 For j = 1 To lngL - 5 If InStr(1, UCase(Replace(Replace(suchFeld(i, 1), " ", ""), ".", "")), UCase(Replace(Replace(Lieferanten(j, 1), " ", ""), ".", ""))) Then suchFeld(i, 3) = Lieferanten(j, 1) 'Bei Fund wird die Bezeichnung aus Lieferantenliste zurückgegeben Exit For ElseIf InStr(1, UCase(Replace(Replace(Lieferanten(j, 1), " ", ""), ".", "")), UCase(Replace(Replace(suchFeld(i, 1), " ", ""), ".", ""))) Then suchFeld(i, 3) = Lieferanten(j, 1) 'Bei Fund wird die Bezeichnung aus Lieferantenliste zurückgegeben Exit For Else suchFeld(i, 3) = strgWarnung End If Next j Next i .Range("E4:E" & lngSuche).ClearContents 'Bereich zum schreiben löschen .Range("E4:E" & lngSuche) = (Application.Index(suchFeld, 0, 3)) 'Ergebnisse schreiben End With End Sub
nochmals vielen vielen Dank! Das ist genau das was ich brauche und womit mein Problem auch gelöst wird. Ich habe nur noch Schwierigkeiten bei der Übertragung auf meine Originaldatei. Ich habe eigentliche alle Namen, Bezeichnungen und auch Bereiche (also die Zellen und Spalten) entsprechend abgeändert.
Nun kommt der Fehlertext: Laufzeitfehler 9 "Index außerhalb des gültigen Bereichs"
Vielleicht kannst du aus dem Stegreif schreiben, wo mein Fehler ist?
Diese Tabellenblätter müssen auch in der Datei existieren, so wie in Deiner Beispieldatei. Dann müssen dei Spalten und Zeilen der Daten genau an den Stellen sein, wie in der Beispieldatei.
Sonst musst Du eine Beispieldatei hochladen, die dem Original entspricht. Die Zellinhalte können anders sein.