also mich verwirren deine angaben mehr , als dass sie mit einander korrespondieren und sich helfend unterstützen. was ist, wenn in den spalten G bis M mehrere angaben vorhanden sind! was soll passieren wenn angaben nicht zutreffen, etc!
lege doch bitte ein beispiel (tabelle) vor, mit mehreren darstellungen, ohne große formelei...und erkläre diese.
Hallo Janosch,
in der Spalte "C" wird immer nur ein Wert aus den Spalten "G-M" pro Zeile auftauchen. Und dann soll immer der Wert aus "G" genommen werden für alle Varianten der gleichen Zeile.
Beispiel: C5 enthält "FSM". Dies findet EXEL in H2 und übernimmt daher den Wert aus G2 in E5.
Kein Wert ist in Tabelle2 doppelt vorhanden. Wenn in einer Zeile in Tabelle1 nichts gefunden wurde soll E einfach leer bleiben.
ich glaube, so wird das nichts. Du solltest anhand deiner Mustertabelle exakt eintragen, welche Werte fix sind und dann in welchen Bereichen du welche Berechnung ausgeführt haben willst. Mir geht's wie Janosch, je mehr du (be)schreibst, desto wirrer wird es für mich.
Gruß Günter Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen. angebl. von Georg Christoph Lichtenberg (1742-1799)
in "C" befindet sich ein string mit bis zu sieben textteilen. 7 = Anzahl zellen "G" bis"M". in "H" bis "M" können textteile vorhanden oder andere oder keine vorhanden sein und in "G" steht immer ein passendes textteil(????)
lösungsprinzip: oder-verknüpfung
in oder("G" bis"M") steht ein(kein oder anderer) texteil, wenn in "C" textteil vorhanden, dann schreibe "G" nach "E" ansonst "".
in "C" befindet sich ein string mit bis zu sieben textteilen. 7 = Anzahl zellen "G" bis"M". in "H" bis "M" können textteile vorhanden oder andere oder keine vorhanden sein und in "G" steht immer ein passendes textteil(????)
lösungsprinzip: oder-verknüpfung
in oder("G" bis"M") steht ein(kein oder anderer) texteil, wenn in "C" textteil vorhanden, dann schreibe "G" nach "E" ansonst "".
Das klingt schon sehr vielversprechend Janosch. Erschwerend kommt nun noch hinzu, dass nicht nur Zeilenweise von "G" nach "E" übertragen werden soll, sondern sich Tabelle 1 auf mehrere Tausend Zeilen erstreckt und Tabelle 2 bei ca. 30 Zeilen bleibt.
Ich habe meine Tabelle nochmal mit Erläuterung versehen und Atillas Formel ist auch schon in "E". Vielleicht hilft das ja.
ich versuch mal wiederzugeben, was ich jetzt verstehe:
In Tabelle1 wird Zeilenweise in Spalte C der erste String vor dem Leerzeichen, wenn kein Leerzeichen dann der String, in der gesamten Tabelle2 gesucht. Ist die Suche erfolgreich, dann soll der Wert aus der gleichen Zeile der Spalte G in Spalte E eingetragen werden.
Wenn ich das so richtig verstanden habe, dann wird es mit Formeln eher schwierig bis nicht möglich sein. Kannst Du VBA einsetzen? Wenn ja sind die eingestellten Tabellen genau an den Stellen wie eingestellt? Zeilen-Spalten sind identisch mit dem eingestellten Beispiel?
deine Erläuterung passt (fast) genau. Es fehlt der Wert bei E2 so wie du ihn eingetragen hast und der Wert bei E3 (Test 1; ebenfalls aus der Spalte mit Ergebnis "FSR".
ich habs fast befürchtet das Formeln hier nicht mehr reichen.
VBA sollte aber möglich sein. Hab es hier noch nie probiert aber meine Arbeit hat recht hohe Priorität. Daher kann ich im Bedarfsfall der IT Bescheid geben falls sie Sperren im Server haben diese für mich zu öffnen.
Die Tabellen sind identisch mit meiner Originaldatei. Sie heißen dort nur Tabelle 5 und 6 anstatt 1 und 2. Und sind jeweils etwas länger. Aber Spalten passen genau.
noch eine Frage: Wie unterscheidet sich "Test 1" von den anderen Werten in Spalte C? Bei den anderen wird nach dem ersten Teilstring vor dem Leerzeichen gesucht und bei "Test 1" soll nach de gesamten String gesucht werden. Könnte man sagen wenn zwei Teilstrings, dann nach dem gesamten String suchen sonst bei mehr als zwei nur nach den ersten???
eine bitte an brinkhoff: definiere konstruktiv den stringaufbau in spalte "C". in deiner tabelle findet man:
zeile1 = FSM => FSM = textteil1 und keine weiteren textteile (Länge 3 Zeichen) zeile2 = Text 1 => Text 1 = Textteil1 und keine weiteren textteile (Länge 5 Zeichen) oder zeile2 = Text 1 => Text = Textteil1, Leerzeichen = Textteil2, 1 =Textteil3 (Länge 5 Zeichen) zeile3 = FSR 125 X 500 MM. ist hier FSR = Textteil1 oder oder oder
im moment sehe ich es so, dass die strings in spalte "C" aus Textteil(1) bis Texteil(n) mit leerzeichen bestehen und "scheinbar" nur der erste textteil = textteil 1 = FSR oder FSM aus drei zeichen bestehen. hier ist es nötig, dass brinkhoff die genaue struktur der strings aus spalte "C" liefert und erläutert.
(2)
in zeile 1 steht in spalte "C" = FSM und in den Spalten "G" = FSR, "H" = FSM und "I" = Test 1. da nach brinkhoff spalte "C" mit den spalten "G" bis "M" abgeglichen werden soll, frage ich mich was soll in spalte "E" stehen, denn man findet in tabelle2/zeile1 mindesten zwei richtige antworten, aber welche davon gilt !!!!!! und bei vergleich über die gesamte tabelle2 werden sicherlich n lösungen existieren (siehe hierzu zeile 1 aus tabelle2)
(3)
gedankenexperiment:
nehme tabelle1 / spalte "C" / zeile(n) und vergleiche mit tabelle2/ Spalte "H" bis "M" / zeile(n), wenn in zeile(n) textteil(1) in "H" bis "M" vorhanden (achtung, mehre lösungen möglich), dann nehme inhalte von "G" / zeile(n) und schreibe nach "E" / zeile (n).
hier ist brinkhoff gefordert, genau mitzuteilen (dezidierter tabellenausschnitt), so das man in der formelei weiter kommt
unten ein Code, der das macht, was ich in meiner letzten Einlassung beschrieben habe:
Code:
Option Explicit
Sub suche() Dim lngZ As Long, i As Long Dim rngFound As Range lngZ = Cells(Rows.Count, 3).End(xlUp).Row Application.ScreenUpdating = False Range("E2:E" & lngZ).ClearContents For i = 2 To lngZ If Cells(i, 3) <> "" Then Set rngFound = Range("Tabelle6").Find(Cells(i, 3), lookat:=xlWhole) If Not rngFound Is Nothing Then Cells(i, 5) = Cells(rngFound.Row, 7) Else If UBound(Split(Cells(i, 3))) > 1 Then Set rngFound = Range("Tabelle6").Find(Split(Cells(i, 3))(0), lookat:=xlWhole) If Not rngFound Is Nothing Then Cells(i, 5) = Cells(rngFound.Row, 7) End If End If End If End If Next i Application.ScreenUpdating = True End Sub