Excel Celinhoud vergelijken

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • jvboksel
  • Registratie: Januari 2021
  • Laatst online: 23-01 12:12
Ik wil de inhoud van twee cellen met elkaar vergelijken.

Dit zou waarschijnlijk kunnen via een formule en/of via een voorwaardelijke opmaak.

Nu wil ik als resultaat het verschil zien via een kleur en of arcering ( dus alleen het woord(en) die afwijken )

Ik krijg het helaas online niet gevonden

Voorbeeld:

Cel A1 Digitale Kabel
Cel B1 Digitale Computerkabel

Dan zou dus in cel B1 de waarde Computerkabel een kleur moeten krijgen zodat ik meteen zie wat er afwijkend is van cel A1

Alle reacties


Acties:
  • 0 Henk 'm!

  • m-vw
  • Registratie: Mei 2013
  • Laatst online: 14:06

m-vw

Dus?

Ik kan niet geloven dat je zelf al iets geprobeerd hebt, maar goed.

Als je gewoon =A1=B1 doet krijg je, in tekst, al wat je wilt. Er komt onwaar te staan.

Voor kleuren moet je even zoeken op voorwaardelijke opmaak. Doet precies wat je vraagt.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Welkom :)

Hamvraag: waar denk je zelf aan, waar loop je vast met formules? We zijn er niet echt om kant-en-klare scripts op te leveren. Dat kunnen we beter betaald voor de baas doen :P

Oftewel: kan je alsnog de 'Wat ik al gevonden of geprobeerd heb ...' invullen? Met bovenstaande of aantal als moet je een eind komen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

F_J_K schreef op vrijdag 8 januari 2021 @ 09:40:
Met bovenstaande of aantal als moet je een eind komen.
Niet helemaal vrees ik, hij wil de verschillen in twee cellen accentueren. Imho ontkom je dan niet aan een VBA-routine waarin de twee strings ontleed en vergeleken worden.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Lustucru schreef op vrijdag 8 januari 2021 @ 10:16:
[...]

Niet helemaal vrees ik, hij wil de verschillen in twee cellen accentueren. Imho ontkom je dan niet aan een VBA-routine waarin de twee strings ontleed en vergeleken worden.
Oh wacht. Ik pak eerst wat extra koffie en een bril.
dus alleen het woord(en) die afwijken )
Nee dat gaat 'em niet worden zonder VBA.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Patrick_6369
  • Registratie: April 2010
  • Laatst online: 16:00
Je kunt zelfs in voorwaardelijke opmaak al een formule inbakken. Dus als inhoud cel is gelijk aan inhoud andere cel, dan groen, anders rood. en met een hulpkolom zoals m-vw voorstelt is het nóg eenvoudiger.
Maar ja, nu doen we alsnog wat we proberen te voorkomen met het stukje 'wat ik zelf al geprobeerd heb'...


Pluspunten voor de begrijpend-lezen skills van @Lustucru O-)

Hier zou een handtekening kunnen staan.


Acties:
  • 0 Henk 'm!

  • m-vw
  • Registratie: Mei 2013
  • Laatst online: 14:06

m-vw

Dus?

Hmm, inderdaad.

Heb zo wel een paar ideetjes, maar dat is denk ik geen code die je al beginneling uit je mouw schudt.

Je begint volgens mij in ieder geval met een simpele cel vs cel vergelijking (Hoofdlettergevoelig?)

Dan is het de vraag of je uit B1 Computerkabel of enkel Computer als afwijking wilt zien. Staat in de TS.

Je kan gaan voor een vergelijking per karakter of zoeken naar de verschillende woorden.

Keuzes, keuzes...

Acties:
  • 0 Henk 'm!

  • Aragnut
  • Registratie: Oktober 2009
  • Laatst online: 15:39
Dit is een hele pittige, ik zou neigen naar een regular expression oplossing. Dan nog moet je een hoop randvoorwaarden oplossen zoals:

wat moet ie doen als de tekst mist (dus A1 = Computer Netwerkkabel en B1 = netwerkkabel), of als de tekst omgedraaid is (A1 = netwerkkabel computer, B1 = computer netwerk kabel)?

De mogelijke randvoorwaarden en afwijkingen maakt dit, volgens mij, redelijk pittig.

Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

En dan kan het nog zo zijn - maar dat is een aanname van me - dat in C1 Hard disk en in D1 Harde schijf staat. Dan wordt het nog wat complexer: alleen vergelijken als een significant deel juist wel gelijk is.

Als -alle- cellen gelijk horen te zijn (100% van kolom 1 hoort 'Digitale Kabel' te zijn) dan zou ik het toch houden bij aantal.als: overal waar je 1 ziet, wil je opletten. Maar dat zal wel niet en wordt het complexe VBA.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 01:36

g0tanks

Moderator CSA
Als ik in Google zoek op 'excel compare text differences' krijg ik kant-en-klare VBA-code die precies doet wat jij wil. :)

https://www.extendoffice....ences-for-similarity.html

[ Voor 33% gewijzigd door g0tanks op 08-01-2021 11:06 ]

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

g0tanks schreef op vrijdag 8 januari 2021 @ 11:05:
Als ik in Google zoek op 'excel compare text differences' krijg ik kant-en-klare VBA-code die precies doet wat jij wil. :)

https://www.extendoffice....ences-for-similarity.html
Geeft de complexiteit mooi weer, want zelfs dit niet. Deze vergelijkt positie voor positie, dus die zal
'moeilijk' en ' moeilijk' volledig rood maken. Maar het is zonder meer een goede bron van inspiratie, hoewel ik, a.d.h.v de openingspost meer zat te denken in de richting van:

code:
1
2
3
4
5
6
7
8
9
pseudosub Compare(text1, text2)
       array1=text1.split()
       array=text2.split()
       Do for each in array1
            zoek in array2
            markeer if not found
       Do for each in array2
            zoek in array1
            markeer if not found

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • Afrit13
  • Registratie: Augustus 2007
  • Laatst online: 08:09
jvboksel schreef op vrijdag 8 januari 2021 @ 09:34:

Voorbeeld:

Cel A1 Digitale Kabel
Cel B1 Digitale Computerkabel

Dan zou dus in cel B1 de waarde Computerkabel een kleur moeten krijgen zodat ik meteen zie wat er afwijkend is van cel A1
Maar het verschil tussen A1 en B1 is niet 'Computerkabel' maar 'Computer' en wil je altijd het verschil van cel B1 markeren, of ook een mogelijk verschil in cel A1?

Bijvoorbeeld:
A1 Digitale Audiokabel
B2 Digitale Computerkabel

Moet dan zowel 'Audio' als 'Computer' gemarkeerd worden?

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

F_J_K schreef op vrijdag 8 januari 2021 @ 09:40:
We zijn er niet echt om kant-en-klare scripts op te leveren. Dat kunnen we beter betaald voor de baas doen :P
Je hebt zo enorm gelijk, dus ik hoop maar dat de Ts bij zijn baas erop aandringt wat euro's naar me over te maken. :X

Afbeeldingslocatie: https://tweakers.net/i/V-d-8qT8pqPFu0fGPUp0cGt1DQ4=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/D5yxnrp4RWzZ6C1D5bX33Fpi.png?f=user_large

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit


Sub CompareSelection()
    Dim row As Range
    For Each row In Selection.Rows
        CompareCells row.Cells(1, 1), row.Cells(1, 2), XlRgbColor.rgbRed
        CompareCells row.Cells(1, 2), row.Cells(1, 1), XlRgbColor.rgbBlue
    Next
End Sub

Private Sub CompareCells(Source As Range, CompareWith As Range, Mark As XlRgbColor)
Dim wordsI, wordsII, wordI, wordII
Dim startPos As Long
Dim found As Boolean

wordsI = Split(Source.Text, " ")
wordsII = Split(CompareWith.Text, " ")
startPos = 1
For Each wordI In wordsI
    found = False
    For Each wordII In wordsII
        If wordI = wordII Then
            found = True
            Exit For
        End If
    Next wordII
    If Not found Then
        Source.Characters(startPos, Len(wordI)).Font.Color = Mark
    End If
    startPos = startPos + Len(wordI) + 1
Next wordI
End Sub

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • Aragnut
  • Registratie: Oktober 2009
  • Laatst online: 15:39
Lustucru schreef op vrijdag 8 januari 2021 @ 12:11:
[...]

Je hebt zo enorm gelijk, dus ik hoop maar dat de Ts bij zijn baas erop aandringt wat euro's naar me over te maken. :X

[Afbeelding]

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit


Sub CompareSelection()
    Dim row As Range
    For Each row In Selection.Rows
        CompareCells row.Cells(1, 1), row.Cells(1, 2), XlRgbColor.rgbRed
        CompareCells row.Cells(1, 2), row.Cells(1, 1), XlRgbColor.rgbBlue
    Next
End Sub

Private Sub CompareCells(Source As Range, CompareWith As Range, Mark As XlRgbColor)
Dim wordsI, wordsII, wordI, wordsII
Dim startPos As Long
Dim found As Boolean

wordsI = Split(Source.Text, " ")
wordsII = Split(CompareWith.Text, " ")
startPos = 1
For Each wordI In wordsI
    found = False
    For Each wordII In wordsII
        If wordI = wordII Then
            found = True
            Exit For
        End If
    Next wordII
    If Not found Then
        Source.Characters(startPos, Len(wordI)).Font.Color = Mark
    End If
    startPos = startPos + Len(wordI) + 1
Next wordI
End Sub
Moeten de worden wel netjes via whitespace gescheiden zijn. In het voorbeeld staat het woord computer vast aan het woord kabel. Je zou dan een letter-voor-letter vergelijking moeten doen en in hoeverre een x aantal opeenvolgende karakters overeen komen met de te vergelijken string. X zou dan een minimale waarde moeten hebben om te voorkomen dat net 1 of 2 karakters toevallig in beide strings voor komen.

Acties:
  • +1 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Aragnut schreef op vrijdag 8 januari 2021 @ 13:03:
[...]
Moeten de worden wel netjes via whitespace gescheiden zijn.
Dat schijnt zo te zijn in het Nederlands. Computerscherm en computerkast zijn twee verschillende woorden. ;) En nee, ik beweer nergens dat dit de ultieme code zou moeten zijn. Dan gaat de klok echt wel tikken. :9
Dan zou dus in cel B1 de waarde Computerkabel een kleur moeten krijgen zodat ik meteen zie wat er afwijkend is van cel A1".
>:)

[ Voor 11% gewijzigd door Lustucru op 08-01-2021 13:29 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1