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

Clusteren + aantallen optellen o.b.v. 3 waardes

Status
Niet open voor verdere reacties.

mike564

Gebruiker
Lid geworden
11 dec 2015
Berichten
83
Beste allemaal,

In onderstaand voorbeeld heb ik links de hoofdtabel staan. Binnen deze tabel kunnen aan een merk 3 waardes worden gehangen: de soort, waarde 1 en waarde 2.
Als er meerdere van dezelfde merk zijn, komt deze combinatie vaker voor, dit vormt het aantal. Echter kunnen verschillende merken wel precies
dezelfde 3tal combinatie hebben, wat de eigenschappen aan elkaar gelijk maakt.

Wat zou willen, is de merken laten clusteren en de aantallen van de 3tal combinaties bij elkaar op te laten tellen.
Als voorbeeld heb ik dit in de rechter tabel in het bestand handmatig gedaan.
Is dit mogelijk? En zonder brutaal te zijn, ook zonder VBA?

Bekijk bijlage Clustering obv 3 waardes.xlsb

Alvast dank voor de reacties!

Mvg,

Mike
 
Ik kan u wel van dienst zijn

Helpmij forum is geen commerciële site
 
Laatst bewerkt door een moderator:
Enkel een oplossing in VBA.
Code:
Sub hsv()
Dim sv, i As Long, obj As Object, a, b(4)
With ListObjects(1)
sv = .Range
Set obj = CreateObject("scripting.dictionary")
 For i = 1 To .ListRows.Count + 1
  a = obj(sv(i, 2) & sv(i, 3) & sv(i, 4))
               If IsEmpty(a) Then a = b
                 a(0) = a(0) & IIf(a(0) = "", sv(i, 1), IIf(InStr(a(0), sv(i, 1)), "", "/" & sv(i, 1)))
                 a(1) = sv(i, 2)
                 a(2) = sv(i, 3)
                 a(3) = sv(i, 4)
                 a(4) = a(4) + sv(i, 5)
               obj(sv(i, 2) & sv(i, 3) & sv(i, 4)) = a
    Next i
 Cells(1, 13).Resize(obj.Count, 5) = Application.Index(obj.items, 0, 0)
 End With
End Sub
 
Laatst bewerkt:
Wauw super, dit is inderdaad precies wat ik bedoel, bedankt!

Maar zou je mij de code iets beter kunnen laten begrijpen?
Als ik bijvoorbeeld 3 extra informatiekolommen (deze zijn soortafhankelijk) achter de kolom aantal heb zoals in het voorbeeld hieronder.
Hoe kan ik de code dan zo aanpassen dat deze er ook direct achter komen. Met de informatie in deze kolommen hoeft niks worden gedaan, dit is puur tekst.

Wat ik nog meer zou willen weten is: stel ik heb in plaats van 3 waardes, 4 waardes welke overeen moeten komen, wat moet ik dan aanpassen om het werkend te krijgen?

Bekijk bijlage Clustering obv 3 waardes (kolommen info).xlsb

Alvast dank voor de uitleg :D
 
Laatst bewerkt:
Ik weet niet of je ze wil combineren zoals in de eerste kolom.
In onderstaande code is dat wel het geval.
Code:
Sub hsv()
Dim sv, i As Long, obj As Object, a, b(7)
With ListObjects(1)
sv = .Range
Set obj = CreateObject("scripting.dictionary")
 For i = 1 To .ListRows.Count + 1
  a = obj(sv(i, 2) & sv(i, 3) & sv(i, 4))
               If IsEmpty(a) Then a = b
                 a(0) = a(0) & IIf(a(0) = "", sv(i, 1), IIf(InStr(a(0), sv(i, 1)), "", "/" & sv(i, 1)))
                 a(1) = sv(i, 2)
                 a(2) = sv(i, 3)
                 a(3) = sv(i, 4)
                 a(4) = a(4) + sv(i, 5)
                 a(5) = a(5) & IIf(a(5) = "", sv(i, 6), IIf(InStr(a(5), sv(i, 6)), "", "/" & sv(i, 6)))
                 a(6) = a(6) & IIf(a(6) = "", sv(i, 7), IIf(InStr(a(6), sv(i, 7)), "", "/" & sv(i, 7)))
                 a(7) = a(7) & IIf(a(7) = "", sv(i, 8), IIf(InStr(a(7), sv(i, 8)), "", "/" & sv(i, 8)))
               obj(sv(i, 2) & sv(i, 3) & sv(i, 4)) = a
    Next i
 Cells(1, 13).Resize(obj.Count, 8) = Application.Index(obj.items, 0, 0)
 End With
End Sub
 
Dankzij je antwoord snap ik de essentie van de code helemaal en heb ik hem op verschillende scenario's aan kunnen passen.
Alles werkt top, heel erg bedankt!:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan