Zitat:Also mit dem SVERWEIS funktioniert dies leider definitv nicht, da Excel so viele Funktionen in einem nicht möglich sind. Das hießt es muss wahrscheinlich echt in einem Macro erfüllt werden.
ich würde die vier Blätter in einem neuen Blatt zusammenfügen und dann mit diesem Blatt weiterarbeiten.
ich bin schneller fertig geworden als erwartet. Beispieldatei mit neuem Makro zurück. Ich benutze dabei Spalte H+I als Hilfsspalten für Fehlermeldung. Mein Programm erkennt ob die gleiche ID Nummer in mehreren Lagern vorkommt und meldet einen Fehler zurück wenn die Artikelnamen unstimmig sind. Einen Namen habe ich zum Testen geaendert!
Nach dem ersten Suchlauf erfolgt ein zweiter Suchlauf nach Part ID-Nummern. Findet er eine Teil Nummer wird sie mit dem Artikelnamen in Rot aufgelistet. Das muss man dann selbst erkennen ob ein Schreibfehler vorliegen könnte??
Ich hoffe das die neue Makro Version das Problem zufriedenstellend löst. Würde mich freuen.
Sub ItemIDÜberMehrereBlätterSuchen() Dim Treffer As Range Dim Blatt As Worksheet Dim z AsLong
ForEach Blatt In ThisWorkbook.Worksheets If Blatt.Name Like"Artikel*"Then For z = 3To Tabelle1.Cells(Rows.Count, 3).End(xlUp).Row Set Treffer = Blatt.Columns(2).Find(what:=Tabelle1.Cells(z, 3).Value, lookat:=xlWhole) IfNot Treffer IsNothingThen Tabelle1.Cells(z, 4).Value = Treffer.Offset(0, 2).Value Tabelle1.Cells(z, 7).Value = Treffer.Offset(0, 3).Value EndIf Next z EndIf Set Treffer = Nothing Next Blatt
24.10.2016, 10:09 (Dieser Beitrag wurde zuletzt bearbeitet: 24.10.2016, 10:09 von snb.)
'Structuring precedes coding' : so die Integration von alle Lagerdaten wäre die beste Lösung, sowie schon erwähnt. Für ein strukturell suboptimale Situation könnte diese UDF verwendet werden.
Ein UDF mit Dictionary:
Code:
Public d_00 As Object
Function F_snb(c00, y) If d_00 Is Nothing Then Set d_00 = CreateObject("scripting.dictionary") For Each sh In Sheets If Left(sh.Name, 1) = "A" Then sn = sh.UsedRange For j = 1 To UBound(sn) d_00("A_" & sn(j, 2)) = Application.Index(sn, j) Next End If Next End If
F_snb = d_00("A_" & c00)(y) End Function
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28 • MedusaLeiche