Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Suchen und Sortieren
#21
Hallo,

und hier eine andere Variante:


Code:
Sub suche2()
 Dim lngZ As Long, i As Long
 Dim Zelle As Range
 Dim rngFound As Range
 lngZ = Cells(Rows.Count, 3).End(xlUp).Row
 Application.ScreenUpdating = False
 Range("E2:E" & lngZ).ClearContents
 For Each Zelle In Range("Tabelle6")
   If Zelle <> "" Then
     Set rngFound = Range("C1:C" & lngZ).Find(Zelle, lookat:=xlPart)
     If Not rngFound Is Nothing Then
       Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
     End If
   End If
 Next Zelle
 Application.ScreenUpdating = True
End Sub


Hier wird jeder Wert aus Tabelle2 in Spalte C der Tabelle1 gesucht. Der Suchwert wird in Teilen des Strings der Spalte c gesucht. Der Suchwert kann als an beliebiger Stelle (am Anfang, mittendrin oder auch am Ende) des Strings stehen.
Gruß Atilla
Antworten Top
#22
(13.01.2016, 10:54)radagast schrieb: heje excelfreunde,

(1)

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

Hallo Janosch,

Zu 1: der Stringaufbau in "C" ist leider nicht immer gleich. Aber ich bin meine Daten gerade so weit durch gegangen, dass man von folgendem Aufbau ausgehen kann:
Es soll immer nach den ersten 3 Zeichen gesucht werden. Es folgt nicht immer ein Leerzeichen und es sind teilweise Zeichen vorgesetzt. Die Anzahl der "Ausnahmen" ist jedoch überschaubar und in wenigen Tagen manuell abgearbeitet.

Zu 2: Es gibt in Tabelle 2 keine doppelten Werte. Jeder Zellwert ist einmalig in Tabelle 2 vorhanden. 

Zu 3: Deine Formulierung trifft es genau. (soweit ich das als Laie beurteilen kann)
Antworten Top
#23
(13.01.2016, 10:57)atilla schrieb: Hallo,

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

Bitte teste den Code in einer Kopie Deiner Datei!

Atilla, der erste Code funktioniert solange der String alleine steht.
Wenn direkt darauf etwas folgt nimmt er es nicht mehr an.
Beispiel FSR 250W geht, FSR/2 250W geht nicht.

Ich probier den anderen Code...
Antworten Top
#24
(13.01.2016, 11:13)atilla schrieb: Hallo,

und hier eine andere Variante:


Code:
Sub suche2()
 Dim lngZ As Long, i As Long
 Dim Zelle As Range
 Dim rngFound As Range
 lngZ = Cells(Rows.Count, 3).End(xlUp).Row
 Application.ScreenUpdating = False
 Range("E2:E" & lngZ).ClearContents
 For Each Zelle In Range("Tabelle6")
   If Zelle <> "" Then
     Set rngFound = Range("C1:C" & lngZ).Find(Zelle, lookat:=xlPart)
     If Not rngFound Is Nothing Then
       Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
     End If
   End If
 Next Zelle
 Application.ScreenUpdating = True
End Sub


Hier wird jeder Wert aus Tabelle2 in Spalte C der Tabelle1 gesucht. Der Suchwert wird in Teilen des Strings der Spalte c gesucht. Der Suchwert kann als an beliebiger Stelle (am Anfang, mittendrin oder auch am Ende) des Strings stehen.

Hier hört er bei der ersten Wiederholung in "C" auf.
Sobald er etwas 2 mal findet schreibt er nicht mehr weiter.
Habe es gegen getestet und einen Wert verändert.
Er schreibt dann immer eine Zeile weiter bis er etwas 2 mal gefunden hat.
Antworten Top
#25
Hallo,

ok, muss mit FindNext arbeiten. Teste mal:


Code:
Sub suche2()
 Dim lngZ As Long, i As Long
 Dim Zelle As Range
 Dim rngFound As Range
 Dim firstAddress As String
 lngZ = Cells(Rows.Count, 3).End(xlUp).Row
 Application.ScreenUpdating = False
 Range("E2:E" & lngZ).ClearContents
 For Each Zelle In Range("Tabelle6")
   If Zelle <> "" Then
     With Range("C1:C" & lngZ)
       Set rngFound = .Find(Zelle, lookat:=xlPart)
       If Not rngFound Is Nothing Then
         firstAddress = rngFound.Address
         Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
         Do
           Set rngFound = .FindNext(rngFound)
           If Not rngFound Is Nothing Then
             Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
           End If
         Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
       End If
     End With
   End If
 Next Zelle
 Application.ScreenUpdating = True
End Sub
Gruß Atilla
Antworten Top
#26
heje excelfreunde,

fasse brinkhoff's aussagen zusammen:

tabelle1 / spalte "C" => string = FSM oder FSR 125 X 500 MM oder *#FSR 125 X 500 MM oder *#FSR125X500MM.
fazit, brinkhoff benötigt eine hilfspalte, die exakt alle suchparameter enthält. die kann dann zum vergleichen string in spalte "C" mit
hilfsspalte herangezogen werden. oooooder, ich vermute, hoffe, dass eventuell tabelle2 / spalte "G" genau die suchparameter enthält.

gedankenexperiment_2:

nehme string aus tabelle1 / spalte "C" / zeile(n) und vergleiche tabelle2 / spalte "G" / Zeile(1 bis k), ob string aus tabelle1 / spalte "C" / zeile(n) eine textteil aus tabelle2 / spalte"G2" / zeile(K) enthält, wenn nein dann Tabelle1 / spalte "E" / zeile(n) nichts eintragen. ansonst, merke dir zeile(k), welche den übereinstimmenden textteil enthält.
dann suche in tabelle2/ Spalte "H" bis "M" / zeile(k) eine textteil der mit textteil in string aus tabelle1 / spalte "C" / zeile(n) übereinstimmt, wenn nein, dann Tabelle1 / spalte "E" / zeile(n) nichts eintragen, ansonst nehme inhalte von "G" / zeile(k) und schreibe nach "E" / zeile (n).
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#27
(13.01.2016, 12:34)atilla schrieb: Hallo,

ok, muss mit FindNext arbeiten. Teste mal:


Code:
Sub suche2()
 Dim lngZ As Long, i As Long
 Dim Zelle As Range
 Dim rngFound As Range
 Dim firstAddress As String
 lngZ = Cells(Rows.Count, 3).End(xlUp).Row
 Application.ScreenUpdating = False
 Range("E2:E" & lngZ).ClearContents
 For Each Zelle In Range("Tabelle6")
   If Zelle <> "" Then
     With Range("C1:C" & lngZ)
       Set rngFound = .Find(Zelle, lookat:=xlPart)
       If Not rngFound Is Nothing Then
         firstAddress = rngFound.Address
         Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
         Do
           Set rngFound = .FindNext(rngFound)
           If Not rngFound Is Nothing Then
             Cells(rngFound.Row, 5) = Cells(Zelle.Row, 7)
           End If
         Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
       End If
     End With
   End If
 Next Zelle
 Application.ScreenUpdating = True
End Sub

Das klappt!!
Ich teste nochmal durch aber bisher sind alle Werte aus der Tabelle eingetragen.
Sogar die 2Stelligen die ich grad als Test hinzu gefügt habe.
Echt klasse!
Sag mal um sowas selbst hin zu kriegen muss ich mindestens nen VB Kurs machen oder?!
Antworten Top
#28
Hallo,

nee, ich habe mir das selber beigebracht.
Meist durch nachstellen und rekapitulieren von solchen Aufgaben hier im Forum.
Gruß Atilla
Antworten Top
#29
heje excelfreunde,

ergänzung zur vorherigen einlassung. ich vermute(siehe auch spaltenüberschriften tabelle2), dass in tabelle2 / Spalte "G" die suchparameter enthalten sind, welche im string tabelle1 / spalte "C" / zeile(n) zu suchen sind. wenn das zutrifft, dann dürfen nur noch in den spalten "H" bis "M" / zeile(k) übereinstimmungen gesucht werden. würde man in die suche auch die spalte "G" mit einbinden, dann bräuchten die anderen spalten nicht durchsucht werden, da in spalte "G" schon einmal ein textteil enthalten ist.
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#30
(13.01.2016, 13:59)radagast schrieb: heje excelfreunde,

ergänzung zur vorherigen einlassung. ich vermute(siehe auch spaltenüberschriften tabelle2), dass in tabelle2 / Spalte "G" die suchparameter enthalten sind, welche im string tabelle1 / spalte "C" / zeile(n) zu suchen sind. wenn das zutrifft, dann dürfen nur noch in den spalten "H" bis "M" / zeile(k) übereinstimmungen gesucht werden. würde man in die suche auch die spalte "G" mit einbinden, dann bräuchten die anderen spalten nicht durchsucht werden, da in spalte "G" schon einmal ein textteil enthalten ist.

Hey Janosch,

"G" muss mit in die Suche eingebunden werden, da es den ersten Suchbegriff enthält. Dieser ist gleichzeitig dann der Begriff der auf "E" übertragen werden soll.
Allerdings hat Atilla das ganze schon mit VBA gelöst.
Falls du noch eine Formel suchen willst mit der andere Nutzer eine ähnliche Problematik ohne VBA lösen wollen sag ich nicht nein.
Ich lass dir den Tröt hier noch offen.
Aber für mich ist mein Problem erledigt.

Danke an alle für die Hilfe.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste