Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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

Excel oder VBA?

Excel oder VBA?
02.02.2016 16:30:36
Svenler
Guten Tag zusammen,
ich habe mal wieder ein Problem und hoffe Ihr könnt mir dabei helfen.
Ich habe 2 Zellen die jeweils unterschiedliche Text,Zahlen und Zeichen Kombinationen enthalten. Ein Teilbereich der Inhalte beider Zellen kann identisch sein. Und genau diese muss ich finden.
In Feld A2 steht zum Beispiel: "S-X12SAU-BR4-O"
In Feld D5 in Tabellenblatt 2 steht zum Beispiel: "120AB Lachmann X12SA, X12SS Serie"
Ich brauche nun eine Funktion die erkennt das "X12SA" aus D5 auch in A2 steht und als Ergebnis C5 nach A1 kopiert. Problematisch ist auch das der Zellinhalt variiert. Die Position (innerhalb der Zelle)der übereinstimmenden Zeichenfolge kann variieren sowie die Zeichenfolge selbst auch. Also ein undefinierbarer Bereich (für mich).
Vielleicht denke ich auch zu umständlich und es geht ganz einfach :-)
Danke und Gruß
Svenler

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel oder VBA?
02.02.2016 17:11:29
Michael
Hi Svenler,
gibt es eine Mindestlänge? Im Prinzip sind ja "S", "X" und "A", aber auch "12" Treffer...
Oder ein weiteres Kriterium á la muß mit Buchstaben anfangen?
Schöne Grüße,
Michael

AW: Excel oder VBA?
02.02.2016 17:40:26
Peter
Hallo Svenler,
evtl. wäre das eine Lösung für dich, wenn es nur die Zellen A2 und D5 betrifft und die Zelle D5 immer in Teilstücken durch Leerstelle getrennt vorkommt.
Option Explicit
Public Sub Abgleich()
Dim vTemp  As Variant
Dim iTemp  As Integer
With ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen
vTemp = Split(.Range("D5").Value, " ")
For iTemp = LBound(vTemp) To UBound(vTemp)
vTemp(iTemp) = Replace(vTemp(iTemp), ",", "")
If InStr(.Range("A2").Value, vTemp(iTemp)) > 0 Then
MsgBox "der Text  """ & vTemp(iTemp) & """  wurde in der Zelle ""A2"" gefunden."
Exit For
End If
Next iTemp
End With
End Sub

Gruß Peter

Anzeige
Wenn, dann VBA
02.02.2016 20:06:35
Michael
Hi zusammen,
das Ding hat mich jetzt gejuckt!
Um es gedanklich griffig zu machen & zu testen, habe ich zunächst Zwischenergebnisse ins Blatt 3 geschrieben.
Da das zu laufen scheint, habe ich alle Tabellenzugriffe entfernt; die Ausgabe erfolgt via msgbox.
Damit stehen alle Daten zur Verfügung: die Länge der gefundenen Übereinstimmung & selbige als String; hier muß man nur noch entscheiden, ob es eine Mindestlänge gibt usw. und den Code um ein, zwei Zeilen ergänzen.
Die Datei: https://www.herber.de/bbs/user/103240.xls
Das Makro:
Sub vergleichenDirekt()
Dim s$(1 To 3), l&(1 To 3)
Dim i&, j&
Dim iMax&, jmax&, Ausgabe$
Dim puffer&()
s(1) = Tabelle1.Range("A2")
s(2) = Tabelle2.Range("D5")
For i = 1 To 2: l(i) = Len(s(i)): Next
If l(1)  iMax Then
iMax = puffer(j)
Ausgabe = iMax & " Zeichen. Begriff: " & Mid(s(3), j - iMax + 1, iMax)
End If
End If
Else
puffer(j) = 0
End If
Next j
Next i
MsgBox "Max. Übereinstimmung: " & Ausgabe
End Sub
Schöne Grüße,
Michael

Anzeige
Wahnsinn, ich bin beeindruckt
03.02.2016 09:06:43
Svenler
Guten Morgen zusammen,
vorab vielen Dank für die Hilfe! Ich bin wirklich beeindruckt.
Ich werde mal versuchen mich durch diesen Code zu arbeiten, aber ich befürchte dieser übersteigt mein Verständnis von VBA um längen.
Michael, ich habe deinen Code mit mehreren Orignaldaten getestet und verglichen. Dieser funktioniert super. Zu deiner Frage, Mindestlänge sind 4 Zeichen, alle Zeichenkombinationen fangen immer mit A, B, C, H, P oder X an.
Ich werde jetzt versuchen die Abfrage auf die gesamte Liste auszuweiten. Statt A2 = A:A und D5 = D:D.
Ich schau mit den Code erstmal in Ruhe an und versuche zu verstehen was passiert!
@Peter, auch dir vielen Dank für deine Mühe!
Beste Grüße
Svenler

Anzeige
Vielen Dank, hier noch ne Erweiterung
03.02.2016 10:30:46
Michael
Hallo Svenler,
ich habe noch ein bißchen herumgespielt, insbesondere wegen Deines Bedarfs, beliebige Zellen zu vergleichen.
Dazu gibt es eine UDF (user-defined-function, also eine selbstgebastelte Funktion, die man direkt in einer Zelle im Tabellenblatt aufrufen kann) und eine "optimierte" Function zur Benutzung innerhalb von VBA. Letztere wird über eine extra Sub aufgerufen, die nur die zu vergleichenden Strings übergibt.
Die kannst Du Dir mal anschauen, um dann selbst eine Schleife nach Deinem Bedarf aufzusetzen.
Die Datei: https://www.herber.de/bbs/user/103252.xls
Ach so, schau mal am Anfang des Moduls, da findest Du eine Konstante mit Deinen Anfangsbuchstaben...
Schöne Grüße & happy exceling,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige