• 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

Status
Niet open voor verdere reacties.

SUVERMO

Gebruiker
Lid geworden
22 dec 2019
Berichten
478
goede morgen iedereen,

heeft iemand een oplossing voor
in C13 een formule voor het aantal unieke waarden in bereik C17:M2063
in N2065 een formule voor een lijst van de unieke waarden in bereik C17:M2063

in C2065:M2065 heb ik geprobeerd, maar verder kom ik niet.
dank bij voorbaat
 

Bijlagen

  • aantal uniek.xlsm
    199,5 KB · Weergaven: 30
Bvb
Code:
=SOM(N(LENGTE(UNIEK(C17:M2063&""))>1))


Edit: dezelfde waarden kunnen in meerdere kolommen voorkomen zie ik. Gebruik dan deze

Code:
=LET(rng;C17:M2063;r;RIJEN(rng);col;KOLOMMEN(rng);c;REEKS(r*col;1;0);x;INTEGER(c/col)+1;y;REST(c;col)+1;z;INDEX(rng;x;y);AANTALARG(UNIEK(FILTER(z;z<>""))))
 
Laatst bewerkt:
Herstel. Deze functie werkt niet. Ik zoek een nieuwe.
Code:
=AANTALARG(UNIEK(C17:M2063))
 
Laatst bewerkt:
En als je het met VBA wilt doen:
Code:
Sub Tel()
    Dim dict
    Set dict = CreateObject("Scripting.Dictionary")
    For r = 17 To 2063
        For k = 3 To 13
            If Cells(r, k) <> vbNullString Then
                If Not dict.exists(Cells(r, k)) Then dict.Add Cells(r, k), 1
            End If
        Next
    Next
    MsgBox dict.Count
    For Each d In dict
        Debug.Print d(1)
    Next
End Sub
Je kunt de inhoud van de dictionary natuurlijk ook op een werkblad plaatsen.
 
@AHulpje, de .exists kan je weglaten. Alle keys in een dictionary zijn uniek
 
Voor Excel 365 insiders (oranje cellen niet meer nodig):
Code:
=LET(x;NAAR.KOLOM(C17:M2063);SORTEREN(UNIEK(FILTER(x;(x>0)*(x<>"");""))))
Voor het aantal gebruik je AANTALARG in de formule.
 
Voor Excel 365 of 2021 gebruikers (niet insiders) werkt deze formule (ook geen oranje cellen nodig)

Code:
=AANTALARG((UNIEK(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(",";WAAR;C17:M2063);",";"</y><y>")&"</y></x>";"//y");)))
Resultaat = 215

Zie cel N2065 in bijgevoegde sheet.
 

Bijlagen

  • aantal uniek HD.xlsm
    199,4 KB · Weergaven: 20
Laatst bewerkt:
Voor de insiders heb ik de volgende formule bedacht die zou moeten werken (mits TEXTSPLIT goed naar Nederlands is vertaald):
Code:
=AANTALARG(TEKST.SPLISTEN(UNIEK(TEKST.COMBINEREN(",";WAAR;C17:M2063));","))
In het Engels is het deze:
Code:
=COUNTA(TEXTSPLIT(UNIQUE(TEXTJOIN(",";TRUE;C17:M2063));",))

Als iemand met insiders deze wil testen graag, zelf heb ik geen insiders.
 
@AHulpje
veiligheidhalve zet je nog deze er achter de set erbij om hoofdletterongevoelig te maken
Code:
dict.CompareMode = vbTextCompare
 
@Hans
Bijna goed vertaald...
TEKST.SPLISTEN moet zijn TEKST.SPLITSEN

En deze gaat niet goed, omdat de TEKST.COMBINEREN slechts 1 tekstwaarde oplevert met heel veel komma's erin, geen ARRAY.
Je zal de functies UNIEK en TEKST.SPLITSEN dus om moeten draaien...
 
Laatst bewerkt:
Reduceer de interaktie met een werkblad tot een minimum en gebruik daarom arrays:

Code:
Sub M_snb()
  sn=range("C17:M2063")

  with CreateObject("Scripting.Dictionary")
    For each it in sn
      x0=.item(it)
    next

    cells(1,20).resize(.count)=application.transpose(.keys)
  end with
End Sub
of gewoon gebruik maken van de ingebouwde Excel-faciliteiten:

Code:
Sub M_snb()
  For Each it In range("C17:M2063").Columns
    it.AdvancedFilter 2, , Cells(Rows.Count, 20).End(xlUp).Offset(1), True
  Next
  
  Columns(20).SpecialCells(2).AdvancedFilter 2, , Cells(1, 22), True
End Sub
 
Laatst bewerkt:
O ja natuurlijk AlexCEL. Dank voor de feedback
en UNIEK moet ook nog de parameter kolommen meekrijgen, anders haalt hij de dubbele er niet uit.

Dan kom ik uit op deze (alleen voor insiders!)
Code:
=AANTALARG(UNIEK(TEKST.SPLITSEN(TEKST.COMBINEREN(",";WAAR;C17:M2063);",");TRUE))
 
Laatst bewerkt:
297 is helaas ook niet het juiste aantal.
In de debug.print staan velen dubbel in.

Zo gaat dat wel goed.
Code:
 dict(Cells(r, k).Value) = Cells(r, k).Value
 
Je hebt gelijk HSV. Het juiste aantal is 215.
Ik heb post #8 gecorrigeerd in deze code (geschikt voor alle EXCEL 365 en 2021 users):
Code:
=AANTALARG((UNIEK(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(",";WAAR;C17:M2063);",";"</y><y>")&"</y></x>";"//y");)))
Resultaat = 215
 
Laatst bewerkt:
Voor alle versies.

Omdat je op voorhand weet dat er lege cellen aanwezig zijn haal je er een vanaf (-1)
Zeer traag, maar toch.

Code:
=SOMPRODUCT(1/(AANTAL.ALS(C17:M2063;C17:M2063&"")))-1
 
Je kunt met de insider versie met VSTACK icm UNIEK direct de juiste waarden vinden.

Edit: zie dat alex deze al had gebruikt
 
Laatst bewerkt:
Met VSTACK/VERT.STAPELEN kun je matrixen op elkaar stapelen i, maar als je het bereik C17:M2063 aangeeft is dit 1 matrix en wordt het NIET gestapeld... Heb het geprobeerd, maar kreeg niet de gewenste resultaten. Als je elke kolom separaat meegeeft als matrix dan lukt het wel. Maar om dat voor 10 kolommen te doen...

NAAR.KOLOM geeft wel meteen het gewenste resultaat.
Dan zit je nog wel met het uitfilteren van lege rijen en de 0-waarden, dus ook nog een FILTER nodig.
Daarna kan je met UNIEK werken de resultaten eventueel sorteren.
 
VBA:
Code:
Sub M_snb()
  sn = range("C17:M2063")
  
  For Each it In sn
    c00 = Replace(c00 & " ", " " & it & " ", " ") & " " & it
  Next
  sn = Split(Application.Trim(c00))
  
  Cells(1, 20).Resize(UBound(sn)) = Application.Transpose(sn)
End Sub
 
Ik bedoelde dus naar.kolom
Zelf heb ik de functies nog niet
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan