Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
776to780
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
776to780
776to780
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Spalte auf Ähnlichkeit prüfen

Spalte auf Ähnlichkeit prüfen
04.07.2006 10:53:50
Matthias
Hallo,
ich muss zwei Textspalten miteinander vergleichen. Die Texte sind sehr ähnlich (max 40 Zeichen). Häufig sind nur Worte voran oder dahinter gestellt, ein Punkt/Leerzeichen eingefügt oder Groß/Kleinschreibung anders. Vielleicht hat jemand von euch schonmal ein ähnliches Problem gehabt. Ich stelle mir so etwas wie eine prozentuale Übereinstimmung vor. Selber jetzt ein Progamm zu entwickeln, schaffe ich zeitlich nicht. Da es nur um ca. 2.500 Sätze geht bin ich auf dem Fussweg schneller. Es sei denn, jemand hätte bereits so etwas.
Gruss
Matthias A.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte auf Ähnlichkeit prüfen
04.07.2006 15:05:51
fcs
Hallo Mathias
hier mein Kreation zu deinem Problem

Sub TextAehnlich()
'Vergleicht Texte in 2 Spalten auf Ähnlichkeit
Dim Text1 As Range, Text2 As Range, wks As Worksheet, X As Integer, I As Long, J As Integer
Dim Ausgabe1() As Double, Ausgabe2() As Double, Ausgabe3() As Double, Ausgabe4() As Double
Dim Wort As String, Worte As Integer, Zeile As Long, Sonderzeichen As Boolean
Set wks = ActiveWorkbook.Sheets("Tab1")
Zeile = 2 '1 Zeile mit Text
With wks
Set Text1 = .Range(.Cells(Zeile, "A"), .Cells(.Rows.Count, "A").End(xlUp)) 'Spalte A
Set Text2 = .Range(.Cells(Zeile, "B"), .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 1)) ' Spalte B
ReDim Ausgabe1(1 To Text1.Rows.Count) ' Ähnlichkeit links nach rechts
ReDim Ausgabe2(1 To Text1.Rows.Count) ' Ähnlichkeit rechts nach links
ReDim Ausgabe3(1 To Text1.Rows.Count) ' Ähnlichkeit Worte in Text1 in Text2
ReDim Ausgabe4(1 To Text1.Rows.Count) ' Ähnlichkeit Worte in Text2 in Text1
ReDim Ausgabe5(1 To Text1.Rows.Count) ' Maximalwert Ähnlichkeit
ReDim Ausgabe6(1 To Text1.Rows.Count) ' Durchschnitt der 4 Ähnlichkeiten
End With
'Buchstabenvergleich 1:1 von Links
For I = 1 To Text1.Rows.Count
X = 0
For J = 1 To Len(Text1(I))
If UCase(Mid(Text1(I), J, 1)) = UCase(Mid(Text2(I), J, 1)) Then
X = X + 1
End If
If J = Len(Text2(I)) Then Exit For
Next
Ausgabe1(I) = X / Len(Text1(I))
Next
'Buchstabenvergleich 1:1 von Rechts
For I = 1 To Text1.Rows.Count
X = 0
For J = 1 To Len(Text1(I))
If UCase(Mid(Text1(I), Len(Text1(I)) - J + 1, 1)) = UCase(Mid(Text2(I), Len(Text2(I)) - J + 1, 1)) Then
X = X + 1
End If
If J = Len(Text2(I)) Then Exit For
Next
Ausgabe2(I) = X / Len(Text1(I))
Next
'Wortvergleich Worte in Text1 in Text2, Groß-/Kleinschreibung ist egal
For I = 1 To Text1.Rows.Count
X = 0
Worte = 0
For J = 1 To Len(Text1(I))
Wort = ""
Sonderzeichen = False
Do Until Sonderzeichen = True
Select Case Asc(Mid(Text1(I), J, 1))
Case 48 To 57 'Ziffern
Wort = Wort & Mid(Text1(I), J, 1)
Case 65 To 90 'Großbuchstaben
Wort = Wort & Mid(Text1(I), J, 1)
Case 97 To 122 'Kleinbuchstaben
Wort = Wort & UCase(Mid(Text1(I), J, 1))
Case 192 To 223 'landesspezifische Großbuchstaben
Wort = Wort & Mid(Text1(I), J, 1)
Case 224 To 255 'landesspezifische Kleinbuchstaben
Wort = Wort & UCase(Mid(Text1(I), J, 1))
Case Else
Sonderzeichen = True
End Select
If J = Len(Text1(I)) Then Exit Do
J = J + 1
Loop
If Len(Wort) > 0 Then
Worte = Worte + 1
If InStr(1, UCase(Text2(I)), Wort) > 0 Then
X = X + 1
End If
End If
Next
Ausgabe3(I) = X / Worte
Next
'Wortvergleich Worte in Text2 in Text1, Groß-/Kleinschreibung ist egal
For I = 1 To Text1.Rows.Count
X = 0
Worte = 0
For J = 1 To Len(Text2(I))
Wort = ""
Sonderzeichen = False
Do Until Sonderzeichen = True
Select Case Asc(Mid(Text2(I), J, 1))
Case 48 To 57 'Ziffern
Wort = Wort & Mid(Text2(I), J, 1)
Case 65 To 90 'Großbuchstaben
Wort = Wort & Mid(Text2(I), J, 1)
Case 97 To 122 'Kleinbuchstaben
Wort = Wort & UCase(Mid(Text2(I), J, 1))
Case 192 To 223 'landesspezifische Großbuchstaben
Wort = Wort & Mid(Text2(I), J, 1)
Case 224 To 255 'landesspezifische Kleinbuchstaben
Wort = Wort & UCase(Mid(Text2(I), J, 1))
Case Else
Sonderzeichen = True
End Select
If J = Len(Text2(I)) Then Exit Do
J = J + 1
Loop
If Len(Wort) > 0 Then
Worte = Worte + 1
If InStr(1, UCase(Text1(I)), Wort) > 0 Then
X = X + 1
End If
End If
Next
Ausgabe4(I) = X / Worte
Next
' Maxwert/Mittelwert, Groß-/Kleinschreibung ist egal
For I = 1 To Text1.Rows.Count
Ausgabe5(I) = Application.WorksheetFunction.Max(Ausgabe1(I), Ausgabe2(I), Ausgabe3(I), Ausgabe4(I))
Ausgabe6(I) = (Ausgabe1(I) + Ausgabe2(I) + Ausgabe3(I) + Ausgabe4(I)) / 4
Next
'Werte in Tabelle eintragen
For I = 1 To Text1.Rows.Count
With wks
.Cells(I + Zeile - 1, "C") = Ausgabe1(I)
.Cells(I + Zeile - 1, "D") = Ausgabe2(I)
.Cells(I + Zeile - 1, "E") = Ausgabe3(I)
.Cells(I + Zeile - 1, "F") = Ausgabe4(I)
.Cells(I + Zeile - 1, "G") = Ausgabe5(I)
.Cells(I + Zeile - 1, "H") = Ausgabe6(I)
End With
Next
ReDim Ausgabe1(0) ' Ähnlichkeit links nach rechts
ReDim Ausgabe2(0) ' Ähnlichkeit rechts nach links
ReDim Ausgabe3(0) ' Ähnlichkeit Worte in Text1 in Text2
ReDim Ausgabe4(0) ' Ähnlichkeit Worte in Text2 in Text1
ReDim Ausgabe5(0) ' Maximalwert Ähnlichkeit
ReDim Ausgabe6(0) ' Durchschnitt der 4 Ähnlichkeiten
End Sub

gruss Franz
Anzeige
AW: Spalte auf Ähnlichkeit prüfen
04.07.2006 15:53:14
Matthias
Hallo Franz,
danke für Dein Programm. Ich werde es etwas für meine Zwecke anpassen müssen (meine Texte sind teilweise Zahlen orientiert).
Also nochmal vielen Dank
Gruss
Matthias
AW: Spalte auf Ähnlichkeit prüfen
04.07.2006 16:13:24
fcs
Hallo Mathias,
Zahlen sind kein Problem, diese werden korrekt verglichen. Hier ein Auswertebeispiel
Tabellenblattname: Tab1
A                B               C             D             E              F          G         H
1          Text1             Text2   LinksRechts   RechtsLinks   Worte 1 in 2   Worte 2 in 1    Max   Mittelwert
2           Aber              Aber             1             1              1              1      1            1
3           Beta             .Beta             0             1              1              1      1         0,75
4      Aber Beta         Aber.Beta          0,89          0,89              1              1      1         0,94
5   An Aber Beta        Aber  Beta          0,08          0,42           0,67              1      1         0,54
6           ABER              Aber             1             1              1              1      1            1
7      ABER Beta        Aber. Beta          0,44          0,56              1              1      1         0,75
8     Aber  Beta   Aber  Beta nach             1           0,3              1           0,67      1         0,74
9  Hier ist Text    :Text ist hier          0,08          0,38              1              1      1         0,62
10         3 fach            3-fach          0,83          0,83              1              1      1         0,92
11    Für ähnlich       Für Ähnlich             1             1              1              1      1            1
12        1234XYZ           1234XYZ             1             1              1              1      1            1
13           1235              1236          0,75          0,75              0              0   0,75         0,38   

gruss Franz
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige