• 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.

zoeken van de 'mis-match' letter in twee text-strings in twee kolommen

Status
Niet open voor verdere reacties.

Excelaration

Gebruiker
Lid geworden
27 feb 2011
Berichten
12
Hallo,

Graag zou ik een methode (formule) weten die bij het vergelijken van twee tekst-'strings' (van circa 30 letter), die in twee kolommen naast elkaar staan, de foute letter (meestal is er maar één letter fout in de 'string') kan aangeven.

Hoe precies dat maakt me (nu nog) niet zoveel uit; opties
1) bijvoorbeeld door de letter een andere kleur te geven; of dik te drukken
2) of misschien nog wel beter voor mij door in een nieuwe kolom de positie (in de text'string') van de mis-match letter aan te geven. Dus het positie nummer aan te geven: bij een string van 30 letters kan dat lopen van P1 t/m P30 (P voor positie).
3) beste zou nog zijn beide manieren: dus zowel een visuele manier (zie 1) EN een numerieke manier (zie 2)

Een voorbeeld:
Kolom 1: Kolom 2
VGVDFTGSNGDPRSPDSLHYISPNGVNEYLTALWSVGLV VGVDFTGSNGDPRSPDSLYYISPNGVNEYLTALWSVGLV

Je kan zien dat er in de tekst string in kolom 2 in het midden (op Positie 19 = 19e letter) een 'Y' staat in plaats van de 'H' op die plaats (P19) in kolom 1 links.
Dat verschil zou ik dus graag snel willen zien / categoriseren.

Het gaat om ZEER veel tekst strings onder elkaar in kolom 1 en kolom 2 (paar duizend). Vandaar is automatisering nodig.

Alvast bedankt voor de moeite om je hierin te verdiepen.
Groeten,
Excelarator (ps. later hopelijk)
 
Voor methode 1 is vba nodig.
Ik beperk me hier tot methode 2.
In kolom C staat een formule die de positie van het eerst gevonden afwijkende karakter vanaf links weergeeft.
 

Bijlagen

  • Excalibur.xlsx
    8 KB · Weergaven: 39
Laatst bewerkt:
In kolom A en B staat de tekst, kolom C moet je leeg laten en in kolom D komt al dan niet de "p 19 - " = plek 19 en als er meerdere zijn "p 19 - p 25 -" enz.
Er wordt niet gekeken naar hoofdletters of kleine letters.

Code:
Option Compare Text

Sub vergelijk()

kolomA = Sheets("sheet1").Cells(1).CurrentRegion
 For i = 1 To UBound(kolomA, 1)
 w1 = Len(kolomA(i, 1))
 w2 = Len(kolomA(i, 2))
 w = kolomA(i, 1) = kolomA(i, 2)
  If Not w Then
 
 
   wMin = IIf(w1 > w2, w2, w1)
   wMax = IIf(w1 > w2, w1, w2)
 
  
     For ii = 1 To wMax
      If wMin < ii Then
        teller = teller & "P " & ii & " - "
      Else
      If Asc(UCase(Mid(kolomA(i, 1), ii, 1))) <> Asc(UCase(Mid(kolomA(i, 2), ii, 1))) Then
        teller = teller & "P " & ii & " - "
      End If
      End If
     Next
   
   Sheets("sheet1").Cells(i, 4) = teller
   teller = ""

  End If
 Next i
End Sub
 
Of ?

{ =MATCH(0;N(MID(A1;ROW(1:50);1)=MID(B1;ROW(1:50);1));0) }

of

{
=SUM(N(LEFT(A$1;ROW(1:50))=LEFT(B$1;ROW(1:50))))+1 }
 
Laatst bewerkt:
@ pasan

Gebruik de correcte inspringpunten voor de duidelijkheid van je code en schrijf ook het resultaat in 1X terug naar het werkblad ipv voor elke regel apart.
Code:
Option Compare Text

Sub vergelijk()
    kolomA = Sheets("sheet1").Cells(1).CurrentRegion.Resize(, 3)
    For i = 1 To UBound(kolomA, 1)
        w = kolomA(i, 1) = kolomA(i, 2)
        If Not w Then
            w1 = Len(kolomA(i, 1)): w2 = Len(kolomA(i, 2))
            wMin = IIf(w1 > w2, w2, w1): wMax = IIf(w1 > w2, w1, w2)
            For ii = 1 To wMax
                If wMin < ii Then
                    teller = teller & "P " & ii & " - "
                Else
                    If Asc(UCase(Mid(kolomA(i, 1), ii, 1))) <> Asc(UCase(Mid(kolomA(i, 2), ii, 1))) Then
                        teller = teller & "P " & ii & " - "
                    End If
                End If
            Next
            kolomA(i, 3) = Left(teller, Len(teller) - 2)
            teller = ""
        End If
    Next i
    Sheets("sheet1").Cells(1).Resize(UBound(kolomA), UBound(kolomA, 2)) = kolomA
End Sub
 
Code:
Sub M_snb()
   sn = Cells(1).CurrentRegion.Resize(, 4)
   
   For j = 1 To UBound(sn)
     For jj = 1 To Len(sn(j, 1))
        If Left(sn(j, 1), jj) <> Left(sn(j, 2), jj) Then Exit For
     Next
     sn(j, 4) = jj
  Next
  
  Cells(1).CurrentRegion.Resize(, 4) = sn
End Sub
 
@ snb

Aangezien character per character vergeleken moet worden zou ik dan eerder voor deze gaan.
Code:
Sub M_snb()
   sn = Cells(1).CurrentRegion.Resize(, 4)
   For j = 1 To UBound(sn)
     sn(j, 4) = vbNullString
     For jj = 1 To Len(sn(j, 1))
        If Mid(sn(j, 1), jj, 1) <> Mid(sn(j, 2), jj, 1) Then sn(j, 4) = sn(j, 4) & "P" & jj & "-"
     Next
     sn(j, 4) = Left(sn(j, 4), Len(sn(j, 4)) - 1)
  Next
  Cells(1).CurrentRegion.Resize(, 4) = sn
End Sub
 
Dat doet mijn code juist. Laat hem eens lopen en kijk naar het resultaat.
 
meestal is er maar één letter fout in de 'string'
Jouw code stopt bij het 1ste gevonden verschil terwijl het er ook meerdere kunnen zijn.
 
Ik houd me aan de beginvraag/titel.
De vragensteller heeft zich niet meer gemeld; wacht ik liever af.
 
Hallo Timshel, Pasan, SNB & warme bakker,

Veel dank voor jullie oplossingen hierboven!

Ik ga even studeren op de antwoorden, want als Excel gebruiker met slechts huis-tuin-en-keuken-werk ervaring is het niet alleen zo dat ik op het eerste gezicht bovenstaande antwoorden (nog geheel) niet snap, maar (voor nu) zelfs nog even niet weet welke doorvraag ik moet stellen om meer inzicht te krijgen in (het gebruik van) de verschillende antwoorden.
Ik meld me zeker weer - maar kan 1 of 2 dagen duren wegens drukte.
Groeten, Excelaration
 
Update:

De formule van Timshel werkt (natuurlijk) prima: Dank!
Ik ga even kijken of deze formule in alle gevallen van mijn probleem inderdaad goed werkt.
En kom ook misschien nog met een doorvraag wat deze formule nu eigenlijk voor opdracht geeft.

De andere oplossingen en commentaren zijn (betreffende) code taal isn't it...?
Is dat nu het beroemde VBA? (never heard about until now) - Vast wel - ga even wat achtergrond info opzoeken.
Is dit bijvoorbeeld een goede website om hier een beetje basis info over te leren:
http://www.excel-easy.com/vba.html (=> Excel VBA (Visual Basic for Applications) is the name of the programming language of Excel.)
Of hebben jullie andere / betere suggesties?

Lijkt me leuk en het is zinnig voor mijn werk om hier meet te leren werken. Dus alle (background) info is welkom (links waar cursussen; of waar de beste online tutorials te vinden zijn)

Dank nogmaals voor bovenstaande input ! : zeer behulpzaam en interessant.

Excelaration
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan