• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Teksten vergelijken tussen 2 verschillende cellen met percentuele match?

Status
Niet open voor verdere reacties.
Het probleem met #NAAM? heb ik opgelost, de macros stonden niet allemaal aan. Maar hoe zou ik ze dan onderling nog kunnen vergelijken? Alvast bedankt.
 
In principe kun je een matrix maken met de functie. Het is natuurlijk een beetje afhankelijk van waar je de matrix plaatst, maar zoiets kan werken:

Code:
=PercentageHeleWoorden($A1;VERSCHUIVING($A$1;KOLOM()-7;1);0)

hiermee wordt elke waarde in kolom "A" vergeleken met iedere waarde van kolom "B" zoveel als je de formule naar rechts sleept.

Bijvoorbeeld als je begint in "G1" bevat de formule de uitkomst van de vergelijken van A1 met B1. H1, de vergelijking van A1 met B2, etc.

De aanpak van sylvester is sneller dan mijn originele code. Het nadeel is dat de tekst "wij zijn" een 100% match geeft met "zij zijn". Dit komt omdat "zij" ook matched met "zijn". Als dat voor je eigen gebruik geen probleem is, is deze code wel veel sneller. Als je exacte matches wilt of alleen deelmatches van woorden van een minimum lengte (in mijn originele oplossingen minimaal 5 letters) dan kan ik mijn code aanpassen. Nadeel is wel dat deze veel langzamer in uitvoering is dan de oplossing van Sylvester.
 
deze is beter ( niet hoofdletter gevoelg )
Code:
Function PercentageTweeKantenHeleWoorden(Tekst As String, Woorden As String, Optional MinWoordlengte As Integer = 5)
    Dim Lengte As Integer, T, W, Teller, Nw, Nt, Wteller
    Woorden = Replace(Woorden, ",", " ")
    Woorden = Replace(Woorden, ";", " ")
    Woorden = Replace(Woorden, "(", " ")
    Woorden = Replace(Woorden, ")", " ")
    Woorden = Replace(Woorden, ".", " ")
    Tekst = Replace(Tekst, ",", " ")
    Tekst = Replace(Tekst, ";", " ")
    Tekst = Replace(Tekst, "(", " ")
    Tekst = Replace(Tekst, ")", " ")
    Tekst = Replace(Tekst, ".", " ")
    Do
        Lengte = Len(Woorden)
        Woorden = Replace(Woorden, "  ", " ")
    Loop Until Lengte = Len(Woorden)
    Do
        Lengte = Len(Tekst)
        Tekst = Replace(Tekst, "  ", " ")
    Loop Until Lengte = Len(Tekst)
    Tekst = Trim(Tekst)
    Woorden = Trim(Woorden)
    W = Split(Woorden, " ")
    T = Split(Tekst, " ")
    For Nw = 0 To UBound(W)
        If Len(W(Nw)) > MinWoordlengte Then
            Wteller = Wteller + 1
            For Nt = 0 To UBound(T)
                If LCase(T(Nt)) = LCase(W(Nw)) Then
                    Teller = Teller + 1
                    Exit For
                End If
            Next Nt
        End If
    Next Nw
    PercentageTweeKantenHeleWoorden = Teller / Wteller
End Function
 
Is deze ook snel sylvester? en zou je die voor me in een excel bestand kunnen zetten net als de vorige keer want ik weet niet hoe dat werkt.

Bedankt!
 
open je werkboek -> Alt-F11 -> invoegen -> module

en dan gewoon de tekst boven knippen en plakken. indien het werkboek de vorige oplossing al bevat:

open werkboek -> alt-F11 -> module1 in de browser aan de linkerkant dubbelklikken (indien niet al automatisch geopend) -> bestaande code overschrijven met de nieuwe.

Deze oplossing is nog steeds even snel en geeft nog steeds een match tussen "zij" en "zijn". Er veranderd dus weinig aan mijn "betoog" ;)
 
hallo wampier,

heb je het voorbeeld hierboven al getest?
volgens mij is er geen match tussen "zij" en "zijn"

groet sylvester
 
Het ligt wat anders. Ik dacht dat mijn resultaten van 100% kwamen door de match. Maar er is een verschil in telling tussen beide versies.

Bij de oude versie wordt uitgegaan van gewoon het aantal woorden in de zin. Bij de tweede versie wordt uitgegaan van het aantal "legale" woorden afhankelijk van de woordlengte.

Ik had per abuis mijn woordlengte op 3 staan.

Bij je eerste versie is een match tussen "zij zijn" en "zijn zij" met de formule =per...(a1;b1;3) 50%. "zij" wordt niet gematched, dus 50%. Bij de tweede versie wordt "zij" ook niet gematched maar ook niet meegenomen in het zintotaal. De match wordt dan dus 100%.

In de praktijk is de tweede oplossing overigens praktischer, omdat het een beter beeld geeft van de overeenkomsten in relevante woorden. Sorry voor de verwarring.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan