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

Unieke waarden filteren uit meerdere kolommen

Status
Niet open voor verdere reacties.

Matthias B

Gebruiker
Lid geworden
10 jan 2008
Berichten
10
Goedenavond,

ik zit met het volgende vraagstuk;

Ik heb een document met daarin 3 sheets. Voor het gemak even 'sheet1' 'sheet2' en 'sheet3'.
In Sheet 1 staan in kolom A allerlei (lees:5000+) artikelcodes vanuit een database, in kolom B staat de bijbehorende product-omschrijving.
In Sheet 2 staat eigenlijk hetzelfde, het enige verschil is dat deze sheet een import van de meest recente database bevat. Dit betekent concreet dat er méér artikelcode's in staan dan in Sheet 1. Dit komt omdat de database door de tijd aangevuld wordt met nieuwe artikelen.

Nu wil ik graag in Sheet 3 de unieke waarden zien. Belangrijk is dat kolom 'A' en 'B' gekoppeld blijven aan elkaar zodat de juiste omschrijving aan het juiste artikelnummer blijft hangen.

De praktische toepassing van dit document is om op deze manier iedere week een update te kunnen maken voor een secundair ERP. De unieke waarden die weergegeven worden in Sheet 3 worden daaraan toegevoegd, dit zijn immers de nieuwe artikelen.

Ik wil graag gebruik maken van een formule, zodat de 'update-handeling' alleen bestaat uit het inladen van de nieuwe database in sheet 2 en vervolgens het handmatig exporteren van de unieke waarden in sheet 3.

Met voorwaardelijke opmaak en vervolgens filteren kom ik een eind, maar dit zijn handelingen die dan wekelijks uitgevoerd moeten worden. Wellicht is het mogelijk om eea in een macro te schrijven maar daar ben ik niet zo in thuis. Hetzelfde geldt voor de snelkoppeling 'duplicaten verwijderen' of 'unieke waarden filteren' in de uitgebreide filter.

Nu heb ik soortgelijke vragen voorbij zien komen op het forum, maar niet specifiek in meerdere sheets met 'gekoppelde' kolommen. Ik kan er natuurlijk overheen gekeken hebben.

Heeft een van jullie zin en gelegenheid om mij hier verder in te helpen?
Als er informatie ontbreekt hoor ik het graag.

Alvast bedankt!

PS: Ik maak anders dan het document in de bijlage gebruik van een Engelstalige versie van Excel.
 

Bijlagen

  • voorbeeld EXCEL.xlsx
    11 KB · Weergaven: 56
het is wel met vba

probeer het eens uit
 

Bijlagen

  • voorbeeld EXCEL met vba.xlsm
    19,2 KB · Weergaven: 122
Laatst bewerkt:
Bedankt. Dit lijkt te werken!

Level 2:

Kan je zo ook een 'vba-code' maken waarin Kolom B/D/E/F van sheet2 vergeleken worden met B/D/E/F van sheet 1? Belangrijk hierin is weer dat de regels 'bevroren' blijven. Dit om te voorkomen dat bijvoorbeeld D10 met E20 vergeleken wordt.

De unieke waarden zullen dan bij voorkeur op onderstaande manier in sheet 3 weergegeven moeten worden.

De resultaten van kolom B >> eerste waarde in cel N2 van sheet 3
De resultaten van kolom D >> eerste waarde in cel O2 van sheet 3
De resultaten van kolom E >> eerste waarde in cel P2 van sheet 3
De resultaten van kolom F >> eerste waarde in cel B2 van sheet 3

Ik ben al een heel eind geholpen, bovenstaande zal een 'nice to have' zijn.

Grt.
 
Met formules (reactie op post#1):
Code:
Sheet3!A1: =ALS.FOUT(INDEX(Sheet2!$A:$A;KLEINSTE(ALS(AANTAL.ALS(Sheet1!$A$1:$A$10000;Sheet2!$A$1:$A$10000)=0;RIJ($A$1:$A$10000);9^9);RIJ($A1)));"")
Sheet3!B1: =VERT.ZOEKEN(A1;Sheet2!$A$1:$B$10000;2;0)
Let op: 1e formule is matrixfunctie, d.w.z afsluiten met Control+Shift+Enter na invoeren/wijzigen.

Zie ook bijlage.
 

Bijlagen

  • voorbeeld EXCEL (AC).xlsx
    12 KB · Weergaven: 74
Laatst bewerkt:
reactie op post#3: dat lijkt geen probleem, maar graag een passend voorbeeld bestandje
 
Laatst bewerkt:
Ik heb een voorbeeld in de bijlage gezet.

PS:
De waarden in kolom N/O/P moeten gecombineerd worden tot 1 artikelnummer.
Nu heb ik zelf op sheet 3 kolom A een formule gezet om 'N/O/P' te combineren. Wellicht is hier een handigere manier voor.

Alvast bedankt!
 

Bijlagen

  • test.xlsx
    19,2 KB · Weergaven: 63
in de kolommen N O P staan bijna geen codes om een artikelnummer van te maken.

geef de kolommen eens aan waar wel een representatief artikelnummer van te maken valt
 
Ik doelde op kolom N, O en P van sheet 3.
In sheet 1 en 2 staan deze waarden in kolom B, D en E. En dan tussen de verschillende waarden een '-' zoals in kolom C.

Eenvoudig gezegd moet het artikelnummer een samenstelling zijn van de waarden op de volgorde B/C/D/C/E (bijvoorbeeld 173-11a001-00)
 
Matthias, ik ga er morgen naar kijken.

ik denk dat het dan allang opgelost is door een ander.
 
Zo gaat dat:

Code:
Sub M_snb()
 sn = Sheet1.Cells(1).CurrentRegion
 sp = Sheet2.Cells(1).CurrentRegion
 
 With CreateObject("scripting.dictionary")
     For j = 1 To UBound(sn)
       .Item(sn(j, 2) & sn(j, 3) & sn(j, 4) & sn(j, 5)) = sn(j, 6)
     Next

     For j = 2 To UBound(sp)
        c00=sp(j, 2) & sp(j, 3) & sp(j, 4) & sp(j, 5)
        If .exists(c00) Then
           .Remove c00
        Else
            .Item(c00) = sp(j, 6)
        End If
     Next

     Sheet3.Cells(10, 1).Resize(.Count, 2) = Application.Transpose(Array(.Keys, .Items))
   End With
End Sub
 
Laatst bewerkt:
kun je vertellen of in sheet2 dubbele sleutels kunnen voorkomen. (met sleutel bedoel ik de samenstelling van de kolommen B,D,E )
 
een beetje aangepaste versie van snb (voor het geval sheet2 dubbele sleutels bevat.
Code:
Sub M_snb()
 sn = Sheets("Sheet1").Cells(1, 1).CurrentRegion
 sp = Sheets("Sheet2").Cells(1, 1).CurrentRegion
 Set d = CreateObject("scripting.dictionary")
    For j = 2 To UBound(sp) 'ontdubbelen van sp
        d(sp(j, 2) & sp(j, 3) & sp(j, 4) & sp(j, 5)) = sp(j, 6)
    Next
    With CreateObject("scripting.dictionary")
        For j = 2 To UBound(sn)
            .Item(sn(j, 2) & sn(j, 3) & sn(j, 4) & sn(j, 5)) = sn(j, 6)
        Next
        For Each j In d.keys
            If .exists(j) Then
            .Remove j
        Else
            .Item(j) = d(j)
        End If
     Next
     Sheets("Sheet3").Cells(10, 1).CurrentRegion.ClearContents
     If .Count > 0 Then Sheets("Sheet3").Cells(10, 1).Resize(.Count, 2) = Application.Transpose(Array(.keys, .Items))
   End With
End Sub
 
Laatst bewerkt:
@SylvP

Lijkt me eenvoudiger:

Code:
Sub M_snb()
 sn = Sheet1.Cells(1).CurrentRegion
 sp = Sheet2.Cells(1).CurrentRegion
 
 With CreateObject("scripting.dictionary")
     For j = 1 To UBound(sn)
       .Item("|" & sn(j, 2) & sn(j, 3) & sn(j, 4) & sn(j, 5)) = sn(j, 6)
     Next

     For j = 2 To UBound(sp)
        c00=sp(j, 2) & sp(j, 3) & sp(j, 4) & sp(j, 5)
        If .exists("|" & c00) Then
           .Remove "|" & c00
        Else
            .Item(c00) = sp(j, 6)
        End If
     Next

     Sheet3.Cells(10, 1).Resize(.Count, 2) = Application.Transpose(Array(.Keys, .Items))
   End With
End Sub
 
snb, mooi opgelost en aan het "|" teken kun je zien uit welke sheet hij komt.

ps bij mij wekt sheet1 niet ik moet sheets("sheet1") gebruiken
 
Dan is de codename van die sheet waarschijnlijk 'Blad1' ? (in Duitsland 'Tabelle1', in Frankrijke 'Feuille1')

Dan werkt bij jou:

Code:
sn = Blad1.Cells(1).CurrentRegion

Duik even in het verschil tussen de eigenschap .Name en de eigenschap .CodeName van een werkblad.
 
Laatst bewerkt:
je hebt gelijk: origineel hete het blad "Blad1"

het is hernoemd naar "Sheet1"

de aanroep mogelijkheden zijn dan:
of Blad1.cells(...
of sheets("Sheet1").cells(...
 
Exact :thumb:

Nu pas begreep ik dat je 'heette' (verleden tijd van heten) bedoelde.
 
Laatst bewerkt:
Als antwoord op sylvester #11: dit zal in theorie kunnen maar normaliter zijn het allemaal unieke waarden.

Ik ben een volledige VBA-leek; hoe schiet ik die formule in Excel? Ik heb het idee dat ik met Devolper>Visual Basic in ieder geval het juiste menu gevonden heb.

Bedankt voor jullie hulp zover
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan