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

Vergleich Wörter m.Tabelle v Wörtern-Ausgabe neueW

Vergleich Wörter m.Tabelle v Wörtern-Ausgabe neueW
12.03.2015 18:57:15
Nickles
Hallo Sorry für den kryptischen Titel, die Beschränkung der Zeichen hat es nötig gemacht.
Nach meiner letzten Frage bin ich auf ein Hindernis gestoßen (https://www.herber.de/forum/archiv/1412to1416/t1414008.htm#1414008) und ich dachte mir, vielleicht gehe ich das Thema "falsch herum" an.
Kann ich einen Bereich in Excel in den verschiedenste Wörter stehen, mit einer Tabelle an Wörtern vergleichen und dann die Wörter die NICHT gefunden werden ausgeben lassen untereinander in Zellen, jeweils einmal? Klappt das vielleicht über eine String Comparison in VBA?
Als Beispiel mal eine Excel Datei
https://www.herber.de/bbs/user/96329.xlsx
Grüße und danke!

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vergleich Wörter m.Tabelle v Wörtern-Ausgabe neueW
12.03.2015 19:28:33
ransi
HAllo,
Ich hab mich mal dran versucht.
Schau es dir mal an:
Tabelle1

 DEFGH
5     
6 TabelleAusgabe Zu überprüfender Bereich
7 Hallofisch hallo mann frau fisch
8 Mannsebastian koch sebastian thomas armin
9 Fraurenate renate fisch koch sebastian
10 ThomasGeld Arm Bein Geld Menge
11 ArminMenge Wort, Satz Komma
12 KochSatz  
13 ArmKomma  
14 Bein#BEZUG!  
15 Wort#BEZUG!  
16     
17     

Formeln der Tabelle
ZelleFormel
F7=INDEX(machs($E$7:$E$15;$H$7:$H$11); ZEILE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Dazu muss dieser Code in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function machs(Tabelle, Zu_ueberpruefender_Bereich) As Variant
    Dim regex As Object
    Dim str_Zu_ueberpruefender_Bereich
    Dim arr As Variant
    Dim objMatches As Object
    Dim objMatch As Object
    Dim myDic As Object
    arr = Zu_ueberpruefender_Bereich
    str_Zu_ueberpruefender_Bereich = Join(WorksheetFunction.Transpose(arr), " ") 'Alle Zellen verketten
    Set regex = CreateObject("vbScript.Regexp")
    With regex
        .Pattern = "[A-ZÄÖÜß]+"
        .ignorecase = True
        .Global = True
        If .test(str_Zu_ueberpruefender_Bereich) = True Then
            Set objMatches = .Execute(str_Zu_ueberpruefender_Bereich) 'Wörter suchen
            Set myDic = CreateObject("Scripting.Dictionary")
            For Each objMatch In objMatches 'Prüfen ob einzelnes Wort in Tabelle vorhanden
                If IsError(Application.Match(objMatch, Tabelle, 0)) Then 'Wenn nein dann ins Dictionary aufnehmen
                    myDic(objMatch.Value) = 0
                End If
            Next
        End If
    End With
    machs = myDic.keys 'enthält jetzt alle Worte die Nicht in "TAbelle" vorhanden
End Function


Habe aber irgendwie das Gefühl das ich da zu umständlich unterwegs bin...
ransi

Anzeige
AW funktioniert! 2 Fragen
12.03.2015 20:10:16
Nickles
Hallo Ransi,
funtioniert super!
2 kleine Fragen vielleicht : Warum wird objmatch nie ein Wert zugewiesen bis auf die Deklaration als Objekt?
Warum myDic(objMatch.Value) = 0 ? Ich sehe das es funktioniert, aber warum die null?
Grüße und danke!

AW: AW funktioniert! 2 Fragen
13.03.2015 11:23:07
Nickles
Hallo Ransi,
habe das jetzt versucht auf meine Daten umzusetzen, allerdings funktioniert es noch nicht, denke es hängt an der Menge der Zeichen, lässt sich das ändern?
Mal ein Beispiel
https://www.herber.de/bbs/user/96343.xlsm
Grüße

Worksheetfunction.Transpose(Array) streikt.
13.03.2015 15:57:06
ransi
Hallo Nickles
Hast recht.
Worksheetfunction.Transpose(Array) streikt wenn ein Element im Array mehr als 255 Zeichen hat.
Ist mir neu.
Ich lass mir was einfallen.
ransi

Anzeige
Worksheetfunction.Transpose(Array) streikt.
13.03.2015 16:09:31
ransi
Hallo Nickles
Hast recht.
Worksheetfunction.Transpose(Array) streikt wenn ein Element im Array mehr als 255 Zeichen hat.
Ist mir neu.
Wenn man die Werte mit einer Schleife in ein neuse Array umschaufelt gehts...
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function machs(Tabelle, Zu_ueberpruefender_Bereich) As Variant
    Dim regex As Object
    Dim str_Zu_ueberpruefender_Bereich
    Dim arrTmp As Variant, arr As Variant
    Dim objMatches As Object
    Dim objMatch As Object
    Dim myDic As Object
    Dim L As Long
    arrTmp = Zu_ueberpruefender_Bereich
    'Umschaufeln in ein Array. Dann kann Transpose(arr) entfallen.
    Redim arr(1 To UBound(arrTmp))
    For L = 1 To UBound(arrTmp)
        arr(L) = arrTmp(L, 1)
    Next
    str_Zu_ueberpruefender_Bereich = Join(arr, " ") 'Alle Zellen verketten
    Set regex = CreateObject("vbScript.Regexp")
    With regex
        .Pattern = "[A-ZÄÖÜß]+"
        .ignorecase = True
        .Global = True
        If .test(str_Zu_ueberpruefender_Bereich) = True Then
            Set objMatches = .Execute(str_Zu_ueberpruefender_Bereich) 'Wörter suchen
            Set myDic = CreateObject("Scripting.Dictionary")
            For Each objMatch In objMatches 'Prüfen ob einzelnes Wort in Tabelle vorhanden
                If IsError(Application.Match(objMatch, Tabelle, 0)) Then 'Wenn nein dann ins Dictionary aufnehmen
                    myDic(objMatch.Value) = 0
                End If
            Next
        End If
    End With
    machs = myDic.keys 'enthält jetzt alle Worte die Nicht in "TAbelle" vorhanden
End Function


ransi

Anzeige
AW: Worksheetfunction.Transpose(Array) streikt.
13.03.2015 17:32:25
Nickles
Hi Ransi, das funktionert, super!
Wie auch im anderen Beitrag erwähnt...Habe eure ganzen Antworten erst jetzt gesehen nachdem ich auf "Beitragsliste" geklickt habe. Tut mir sehr leid...in der Verästelten Forumsdarstellung wird das mir irgendwie nicht angezeigt!

Worksheetfunction.Transpose(Array) streikt wieder?
17.03.2015 12:29:02
Nickles
Hallo ransi,
wie gesagt, vielen Dank nochmal!
Bin mittlerweile auf eine erneute Begrenzung gestoßen glaube ich.
Meine Tabelle mit Wörtern die schon vorhanden sind geht von Zeile 4 bis 271.
Wenn ich Zeile 4 bis 270 aufnehme klappts, also =INDEX(machs($H$4:$H$270;$J$4:$J$41); ZEILE(A1))
sobald ich aber 271 aufnehme wird wieder "Wert" angezeigt....
Erneutes umschaufeln?

Anzeige
AW: Worksheetfunction.Transpose(Array) streikt wieder?
17.03.2015 15:26:21
Nickles
Hallo,
habe deine UDF mal nachgebaut mit meinen Variablennamen ums besser zu verstehen :D
Option Explicit
Public Function ausgabe(vorhanden, pruefen) As Variant
Dim matrix As Variant, tempmatrix As Variant
Dim temppruefen
Dim buchstaben As Object
Dim trefferfunktion As Object
Dim treffer As Object
Dim woerterbuch As Object
Dim zaehlen As Long
tempmatrix = pruefen
ReDim matrix(1 To UBound(tempmatrix))
For zaehlen = 1 To UBound(tempmatrix)
matrix(zaehlen) = tempmatrix(zaehlen, 1)
Next
temppruefen = Join(matrix, " ")
Set buchstaben = CreateObject("vbScript.Regexp")
With buchstaben
.Pattern = "[A-ZÄÖUß]+"
.ignorecase = True
.Global = True
If .test(temppruefen) = True Then
Set trefferfunktion = .Execute(temppruefen)
Set woerterbuch = CreateObject("Scripting.Dictionary")
For Each treffer In trefferfunktion
If IsError(Application.Match(treffer, vorhanden, 0)) Then
woerterbuch(treffer.Value) = 0
End If
Next
End If
End With
ausgabe = woerterbuch.keys
End Function
Könnte es sein, das der limitierende Faktor hier der upper bound des zu prüfenden Bereiches ist?
Wenn "pruefen" größer wäre würde durch die Redimensionierung doch auch "matrix" größer.
Grüße

Anzeige
AW: Worksheetfunction.Transpose(Array) streikt wieder?
17.03.2015 16:06:26
Nickles
Jetzt funktionierts! Passt :)

Object = Variant?
13.03.2015 16:28:48
Nickles
Hallo,
tut mir leid für die vielen Posts, alte Beiträge lassen sich irgendwie nicht bearbeiten.
Das Problem das bei zu vielen Zeichen in der Zelle die UDF nicht mehr funktioniert dachte ich könnte ich lösen indem ich alles statt object als variant definiere. Hat aber nicht geholfen.
Was habe ich hierbei nun übersehen?
Grüße und danke!

Object = Variant?
13.03.2015 16:29:11
Nickles
Hallo,
tut mir leid für die vielen Posts, alte Beiträge lassen sich irgendwie nicht bearbeiten.
Das Problem das bei zu vielen Zeichen in der Zelle die UDF nicht mehr funktioniert dachte ich könnte ich lösen indem ich alles statt object als variant definiere. Hat aber nicht geholfen.
Was habe ich hierbei nun übersehen?
Grüße und danke!

Anzeige
AW: Schau hier:
13.03.2015 17:23:24
Nickles
Hallo Ransi,
vielen Dank für deine Hilfe, allerdings stehe ich dermaßen auf dem Schlauch...
Meintest du damit die Lösung von Luc? (Finde in der Online Suche zig Vjoint Vsplit, kann ich da jede nehmen? :) )
Oder das ich den Beitrag im Nachhinein noch verändern kann? (Sehe keinen Button oder ähnliches)
Bin etwas verwirrt, sorry.

Alternativ geht's auch mit 2 bereits im Herber-...
12.03.2015 21:21:51
Luc:-?
Archiv (!) vorhandenen universellen UDFs, Nickles;
evtl verstehst du die daraus resultierende MatrixFml besser. Deine Frage beantwortet diese ggf auch. Ransi hat das quasi intern in seine spezielle UDF eingebaut.
 EFGHIJK
6TabelleAusgabe Zu überprüfender Bereich
7HalloFisch hallo mann frau fisch
8MannSebastian koch sebastian thomas armin
9FrauRenate renate fisch koch sebastian
10ThomasGeld Arm Bein Geld Menge
11ArminMenge Wort Satz Komma
12KochSatz     
13ArmKomma     
14Bein      
15Wort      
16       
17F7:F13: {=GROSS2(MTRANS(VSplit(VJoin(WENN(ISTNV(VERGLEICH(VSplit(VJoin(H7:H11));KLEIN(E7:E15);0));VSplit(VJoin(H7:H11));"");;1))))}
Allerdings habe ich das überzählige Komma nach Wort manuell entfernt, sonst hätte ich noch eine 3.UDF benötigt.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Alternativ geht's auch mit 2 bereits im Herber-...
13.03.2015 11:05:47
Nickles
Hallo Luc,
danke für deine Hilfe!
Nach einfügen der Funktion in F7 funktioniert es noch nicht, da fehlt noch die UDF Vjoin und VSplit oder?
Diese sollt ich im Archiv finden oder? Meintest du mit Archiv "Forumsarchiv" ?
Grüße und danke nochmal!

Ja! RECHERCHE-Button! owT
13.03.2015 14:16:17
Luc:-?
:-?

AW: Ja! RECHERCHE-Button! owT
13.03.2015 17:30:41
Nickles
Danke sehr! Habe eure ganzen Antworten erst jetzt gesehen nachdem ich auf "Beitragsliste" geklickt habe. Tut mir sehr leid...in der Verästelten Forumsdarstellung wird das mir irgendwie nicht angezeigt!

Die beiden UDFs findest du auch in dieser ...
13.03.2015 15:24:25
Luc:-?
hochgeladenen Mappe in der auch die neueste Version von VJoin enthalten ist. Hoffe, du kannst sie mit deiner Xl-Version öffnen. Ansonsten dem Link in diesem BT folgen (im Archiv ist auch eine .xls-Version) oder hier auf den UDF-Namen klicken. Unter diesem Link findest du eine Datei, die die UDF SplitVx enthält, mit der man auch bei mehreren Zeichen(-Kombinationen) trennen kann (vor, auf bzw nach dem Zeichen), womit auch das Komma nach Wort miterledigt wäre (Angabe dort als MatrixKonstante {", "." "}).
Luc :-?

Anzeige
AW: Die beiden UDFs findest du auch in dieser ...
13.03.2015 17:31:24
Nickles
Hallo Luc, auch hier, danke vielmals! Habe eure ganzen Antworten erst jetzt gesehen nachdem ich auf "Beitragsliste" geklickt habe. Tut mir sehr leid...in der Verästelten Forumsdarstellung wird das mir irgendwie nicht angezeigt!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige