Toon posts:

[Excel] opsommen categorieën vallend onder hoofdcategorie Y

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb in een Excel document verschillende categorieën, die op hun beurt onder hoofdcategorieën vallen. Nu wil ik dat alle categorieën die in het document aanwezig zijn en vallen onder hoofdcategorie Y in een aparte cel opgesomd worden.

Een voorbeeld om dit te verduidelijken:

Stel, ik heb de hoofdcategorie ‘Voertuigen’.
De categorieën die daaronder vallen zijn:
- Fiets
- Personenauto
- Race auto
- SUV
- Truck
- Motor

In kolom A staat de hoofdcategorie (dus van A1 tot A6 staat er telkens ‘Voertuigen’ in de cel)
In kolom B de categorie (B1 tot B6)
Nu wil ik dat in (blanco) cel X alle in kolom B aanwezige categorieën die onder de betreffende hoofdcategorie vallen worden opgesomd.

Waarom schrijf ik dit cursief: Wel, het is zo dat in het ene Excel document alle categorieën voorkomen, maar in andere Excel documenten bijvoorbeeld alleen maar Personenauto en SUV. Dan wil ik dus dat in cel X ook alleen maar “Personenauto SUV” komt te staan.

Ik ben al met draaitabellen aan de slag geweest. Maar dat lijkt eigenlijk te zwaar geschut voor wat ik wil. Misschien moet ik het toch zoeken in (een combinatie van) functies? :?

[ Voor 4% gewijzigd door Verwijderd op 08-03-2007 18:52 ]


Verwijderd

Topicstarter
ondertussen ben ik iets verder en heb het volgende bedacht:

Ik maak op een nieuw werkblad voor elke hoofdcategorie een kolom aan. Via VERT.ZOEKEN vul ik deze kolom met de juiste categorieeen (namelijk de categorieen die aanwezig zijn in het Excel document).

Vervolgens tel ik via TEKST.SAMENVOEGEN alle categorieen in de kolom op, ontdubbel ze en plaats ze via TEKST.SAMENVOEGEN weer terug op het oude werkblad in kolom C.

Voor het geval er mensen hun hoofd schudden bij deze aanpak.... Ik sta open voor een efficientere oplossing.

  • onkl
  • Registratie: Oktober 2002
  • Nu online
Even in mijn codearchief geduikeld, ik heb geloof ik ooit een functie geschreven die dit doet.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Public Function concatenateif(ByVal evaluate As Range, criterium As Variant, Optional ByVal concatenate_range As Range, Optional ByVal separator As String) As Variant
If concatenate_range Is Nothing Then
    Set concatenate_range = evaluate
End If
'hebben evaluate en concatenate_range dezelfde vorm?
If Not (evaluate.Rows.Count = concatenate_range.Rows.Count And evaluate.Columns.Count = concatenate_range.Columns.Count) Then
    concatenateif = CVErr(2015)
    Exit Function
End If
'bepaal type
Dim c_type As Integer
If IsNumeric(criterium) Then
    c_type = 1
Else
    Select Case Left(criterium, 1)
    Case "="
        c_type = 1
        criterium = CDbl(Right(criterium, Len(criterium) - 1))
    Case ">"
        c_type = 2
        criterium = CDbl(Right(criterium, Len(criterium) - 1))
    Case ">"
        c_type = 3
        criterium = CDbl(Right(criterium, Len(criterium) - 1))
    Case Else
        c_type = 4
    End Select
End If
Dim cel As Range
Dim OK As Boolean
For Each cel In evaluate
    OK = False
    Select Case c_type
    Case 1
        OK = (cel.Value = criterium)
    Case 2
        OK = (cel.Value > criterium)
    Case 3
        OK = (cel.Value < criterium)
    Case 4
        OK = (cel.Value = criterium)
    End Select
    If OK Then
        concatenateif = concatenateif & IIf(concatenateif = "", "", IIf(separator = "", " ", separator)) & concatenate_range.Cells(cel.Row - evaluate.Row + 1, cel.Column - evaluate.Column + 1)
    End If
Next cel
End Function

Plak duit in een macromodule.
Je kan dan in excel de functie "concatenateif" gedruiken.
Vier argumenten:
1:De range waarin gezocht wordt. In dit geval, de kolom waar "voertuigen" staat.
2: Het gezochte. Als het eerste teken =, > of < is wordt dat eruit gefilterd, maar dat kan je negeren. gewoon "Voertuigen" invoeren (incl. aanhalingstekens)
3: De range die moet worden teruggegeven. Moet dezelfde vorm hebben als 1., mag leeg worden gelaten, dan wordt 1 gepakt.
4: het scheidingsteken, tussen aanhalingstekens. Als leeg, dan wordt een spatie gebruikt.

Geen garantie, ik heb dit al een tijdje geleden in elkaar geflansd. :)

Verwijderd

Topicstarter
Dat ziet er gelikter uit dan mijn houtje-touwtje oplossing.
Ik ga er mee aan de slag. Ook bedankt voor de toelichting want ben niet erg thuis in VB.