• 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 uit een matrix in een lijst weergeven

Status
Niet open voor verdere reacties.

stenkate

Gebruiker
Lid geworden
11 mei 2010
Berichten
8
Beste Helpmij forumleden,

Ik heb al een tijd gezocht, maar geen eenvoudige oplossing kunnen vinden voor het volgende:
Ik wil uit een Excel matrix de unieke waarden waarden filteren. Het uitgebreid filter werkt prima voor een enkele rij of kolom, maar niet voor een matrix.

Ik ben op zoek naar een eenvoudige manier om alle unieke waarden van een matrix in 1 kolom te krijgen.
Bijgaand treffen jullie een voorbeeldbestand aan. De eerste rij zijn de labels, maar die zijn niet relevant voor deze opdracht.

Mijn Excel bestand bestaat eigenlijk uit meerdere werkbladen, maar als er een oplossing is voor 1 werkblad kom ik daar ook prima mee uit te voeten.
Erg benieuwd naar jullie antwoorden, als er vragen zijn: stel ze gerust :)

Bekijk bijlage helpmij-voorbeeld1.xlsx
 
Laatst bewerkt:
Dus alle unieke waarde van het hele tabblad?
En waar moeten deze komen te staan?

Niels
 
Beste Niels,
Klopt helemaal: alle unieke waarden van het werkblad.
Het mooiste is dat de unieke waarden vervolgens in een kolom in een nieuw werkblad komen te staan, of een nieuw bestand.
 
Laatst bewerkt door een moderator:
Maar wat verwacht je te zien als antwoord? Wat maakt iets uniek? Elke rij in het voorbeeld is namelijk uniek (de definitie die standaard wordt genomen)

Je kunt eventueel met een macro door elke kolom apart lopen en de duplicaten per kolom verwijderen.
 
plaats het nu op blad4 in kolom f.
Ik zou niet weten wat je met deze resultaten zou willen maar volgens mij is dit wat je bedoelt.

voor deze macro uit.

Code:
Sub Unieke()
For Each cl In Sheets("blad1").Range("A:L").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "|" & cl.Value
End If
Next
Sheets("blad4").Range("f1").Resize(UBound(Split(c01, "|")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "|"))
End Sub

Niels
 
Maar wat verwacht je te zien als antwoord? Wat maakt iets uniek? Elke rij in het voorbeeld is namelijk uniek (de definitie die standaard wordt genomen)

Je kunt eventueel met een macro door elke kolom apart lopen en de duplicaten per kolom verwijderen.
Beste Wampier,
Ik begrijp dat elke rij uniek is, het gaat mij eigenlijk om de unieke waarden binnen een kolom, maar aangezien ik in mijn oorspronkelijke bestanden veel kolommen heb zoek ik een snelle manier om alle unieke waarden te laten weergeven.

plaats het nu op blad4 in kolom f.
Ik zou niet weten wat je met deze resultaten zou willen maar volgens mij is dit wat je bedoelt.

voor deze macro uit.

Code:
Sub Unieke()
For Each cl In Sheets("blad1").Range("A:L").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "|" & cl.Value
End If
Next
Sheets("blad4").Range("f1").Resize(UBound(Split(c01, "|")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "|"))
End Sub

Niels
Heel erg bedankt Niels, werkt prima!
Ik ben een leek op het gebied van macro's, dus hier kan ik wel even mee aan de slag :)
En ja, de resultaten zijn misschien een beetje verwarrend, maar ik ga het gebruiken om de verschillende bestanden te standaardiseren.
 
Laatst bewerkt door een moderator:
Nog een kleine toevoeging: stel ik wil deze macro voor alle tabbladen werkend krijgen, is onderstaande oplossing de netste manier?

Code:
Sub uniekewaarden()

Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
For Each cl In Sh.Range("F:Z").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "|" & cl.Value
End If
Next
Sheets("blad1").Range("A1").Resize(UBound(Split(c01, "|")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "|"))
Next Sh
End Sub
 
Ligt eraan wat je wilt,
alle unieke waarde van alle bladen samen in 1 kolom of per tabbblad?

alles samen:

Code:
Sub uniekewaarden()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
For Each cl In Sh.Range("F:Z").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "|" & cl.Value
End If
Next
Next Sh
Sheets("blad1").Range("A1").Resize(UBound(Split(c01, "|")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "|"))
End Sub


per tabblad in kolom:

Code:
Sub uniekewaarden()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
c01=""
For Each cl In Sh.Range("F:Z").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "|" & cl.Value
End If
Next
i = i + 1
Sheets("blad1").cells(1,i).Resize(UBound(Split(c01, "|")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "|"))
Next Sh
End Sub
 
Bedankt weer Niels,
Het ging om de eerste optie en die werkt nu fijn :)
 
Ben ik nog een keer Niels: het lijkt er op dat cellen die een | bevatten opgedeeld worden in 2 cellen in de resultaten?
Ik zie bijvoorbeeld dat een cel als "1-persoons | 2-persoons" terugkomt als:
1-persoons
2-persoons

Dus 2 resultaten in plaats van "1-persoons | 2-persoons".
Hoor graag of ik hier iets aan kan doen, bedankt alvast!
 
Het teken | wordt normaal niet zo snel gebruikt dus is een ideaal scheidingsteken.
dan gaan we voor || of heb je die ook in gebruik?

Code:
Sub uniekewaarden()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
For Each cl In Sh.Range("F:Z").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "||" & cl.Value
End If
Next
Next Sh
Sheets("blad1").Range("A1").Resize(UBound(Split(c01, "||")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "||"))
End Sub

Niels
 
Het teken | wordt normaal niet zo snel gebruikt dus is een ideaal scheidingsteken.
dan gaan we voor || of heb je die ook in gebruik?

Code:
Sub uniekewaarden()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
For Each cl In Sh.Range("F:Z").SpecialCells(2)
If cl.Row <> 1 Then
If InStr(c01, cl.Value) = 0 Then c01 = c01 & "||" & cl.Value
End If
Next
Next Sh
Sheets("blad1").Range("A1").Resize(UBound(Split(c01, "||")) + 1, 1).Value = WorksheetFunction.Transpose(Split(c01, "||"))
End Sub

Niels
Bedankt Niels, works like a charm!
(ik gebruik || inderdaad niet)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan