Vergelijking waardes 2 kolommen

Status
Niet open voor verdere reacties.

martindb

Gebruiker
Lid geworden
24 aug 2016
Berichten
6
Ik ben op zoek naar de expressie waarmee ik de inhoudt van 2 kolommen kan vergelijken en daar waar deze afwijkt dit inzichtelijk maakt

Kolom1 = Custom waarde
Kolom2 = Waarde ingevoerd

Voorbeeld 1
Kolom1 = AKBCDEFG
Kolom2 = CA

Ingevoerd waarde voldoen aan default dus is correct

Voorbeeld 2
Kolom1 = AKBCDEFG
Kolom2 = CAX

Ingevoerd waarde X voldoen aan niet default en is dus niet correct

vergelijk kolom.png

Wie weet de oplossing ?
 
Wacht even, wat wil je precies? Ik zie twee voorbeeldjes die allebei Fout zouden moeten opleveren, gezien je vraag:
Ik ben op zoek naar de expressie waarmee ik de inhoudt van 2 kolommen kan vergelijken en daar waar deze afwijkt dit inzichtelijk maakt
Dat levert namelijk een simpel antwoord op: met een IIF functie.
Code:
IIF([Veld1]=[Veld2];"";"x")
Maar dat wil je niet, zo te zien...
 
Nee, in voorbeeld 1 zie je dat de waarde die ingevoerd zijn in kolom 2 (CA) voorkomen in (default)waardes van kolom 1 (AKBCDEFG) en dus toegestane waardes zijn.
In voorbeeld 2 zie je dat de waarde X niet voorkomt in de (default) waardes van kolom 1 en dus deze waarde in kolom niet juist is wat ik wil tonen in een aparte kolom (VERBODEN)

Het probleem is dus ook dat de waardes in beide kolommen niet altijd in alfabetische volgorde staan
 
Dat vermoedde ik al, maar ik wou het je nog even laten zeggen :). Je zult daar een apart functie voor moeten maken die de twee velden als input heeft, en met een dubbele lus alle letters uit veld2 vergelijkt met alle letters uit veld1. Die functie moet een Boolean retourneren. Ik zou daar een teller bij gebruiken i.c.m. de functie Instr. Elke keer als een letter gevonden wordt verhoogt de teller dus met de waarde 1. Resultaat: als alle letters voorkomen is de waarde van teller gelijk aan het aantal letters in Veld2 en krijgt de functie de uitkomst True. Is dat minder (x komt niet voor) dan is teller kleiner dan het aantal letters en is de functie False.
 
Ik begrijp je antwoord alleen heb jij hier een voorbeeld van want mijn kennis mbt deze expressie opbouw laat mij op dit moment in de steek :confused:
 
Probeer deze functie eens:
Code:
Function CheckVeld(fld1 As String, fld2 As String) As Boolean
Dim i As Integer, y As Integer, iTel As Integer
    For i = 1 To Len(fld2)
        For y = 1 To Len(fld1)
            If InStr(1, fld1, Mid(fld2, i, 1)) > 0 Then
                iTel = iTel + 1
                Exit For
            Else
                CheckVeld = False
                Exit Function
            End If
        Next y
    Next i
    If iTel = Len(fld2) Then CheckVeld = True
End Function

En die gebruik je dan zo in een query:
Code:
Verboden: IIf(CheckVeld([Veld1];[Veld2])=Onwaar;"X";"")
 
Bedankt voor deze info, ik zal dit gaan proberen om dit in onze database te bouwen.
 
Laatst bewerkt:
@Octafish: Krijg het niet voor elkaar VB scipt icm SQL Query vanwege mijn beperkte kennis hierin, heb even een voorbeeld database toegevoegd zodat als je er tijd en zin in heb misschien jouw voorstel hierin kan verwerken.

Alvast dank
 

Bijlagen

  • Kolommen_check.zip
    23,8 KB · Weergaven: 19
De code werkt perfect, heb ik net geconstateerd. Dus laat ik het proberen met een stukje uitleg, dan kun je het eerst zelf proberen :).

Stap 1: druk op <ALt>+<F11> om de VBA editor te openen.
Stap 2: Kies <Invoegen>, <Module>. Je krijgt een VBA module in je project (had je nog niet gedaan, dus daar gaat het vermoedelijk fout)
Stap 3: Plak de functie uit bericht #6 in de nieuwe module en sla deze op. Mag elke naam hebben, als je die wilt veranderen.
Stap 4: Vervang jouw veld Verboden door de code in bericht #6.
Stap 5: Voer de query uit. That's it!
 
Graag gedaan. Mag je de vraag nog op <Opgelost> zetten :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan