arjoderoon
Gebruiker
- Lid geworden
- 2 mei 2007
- Berichten
- 474
vanuit een collega uit een ander land heb ik een excel bestand aangeleverd gekregen met een datadump. Helaas in een voor mij nu onbruikbare structuur. Ik wil deze omzetten naar een pivot-ready structuur maar dat is met de hand een nogal tijdrovend klusje (en ik heb in totaal zo'n 30 bestanden op die manier gekregen).
Nu is er 1 voordeel: alle waarden die ik moet gebruiken om er een pivot-ready indeling van te kunnen maken, staan in dezelfde kolom. En er is nog een 2e voordeel: gelukkig zijn er wel verschillende niveaus gebruikt die de verschillende kenmerken aanduiden: ieder ander niveau begint met 2 voorloop spaties extra:
het 1e niveau heeft 1 voorloop spatie
het 2e niveau heeft 3 voorloop spaties
het 3e niveau heeft 5 voorloop spaties etc.
Dus op basis van het aantal spaties dat voor de echte waarde staat, kan ik in principe bepalen in welke kolom het moet komen.
Maar....
Onderstaande zijn alle niveaus die in het bestand zitten:
1. markt
2. type product
3. subsegment
4. fabrikant
5. merk
6. sku
bij niveau 6 (dus de sku's) wil ik alle voorlopende niveaus in een aparte kolom hebben.
voor niveau 5 (dus merk) wil ik alle voorlopende niveau in een aparte kolom hebben etc.
je krijgt dus eigenlijk zoiets als onderstaande:
Waarbij uiteraard per fabrikant het aantal merken weer kan verschillen, waar per merk het aantal sku's weer kan verschillen etc.
Maar ik probeer nu te bedenken hoe ik een script kan maken dat dit voor mij doet, obv van het aantal voorloopspaties in de cel (en op basis van het aantal voorloop spaties moet er omhoog gezocht worden naar het hogere niveau dat minder voorloop spaties heeft, etc).
Maar alles begint met de waarden die in kolom I staan.
Hoe kan ik dit doen met een VBA script?
onderstaande zijn de excel formules voor de verschillende kolommen die ik nu heb en die kijken naar het aantal spaties:
Dank!
[edit]voorbeeld bestand nu toegevoegd[/edit]
Nu is er 1 voordeel: alle waarden die ik moet gebruiken om er een pivot-ready indeling van te kunnen maken, staan in dezelfde kolom. En er is nog een 2e voordeel: gelukkig zijn er wel verschillende niveaus gebruikt die de verschillende kenmerken aanduiden: ieder ander niveau begint met 2 voorloop spaties extra:
het 1e niveau heeft 1 voorloop spatie
het 2e niveau heeft 3 voorloop spaties
het 3e niveau heeft 5 voorloop spaties etc.
Dus op basis van het aantal spaties dat voor de echte waarde staat, kan ik in principe bepalen in welke kolom het moet komen.
Maar....
Onderstaande zijn alle niveaus die in het bestand zitten:
1. markt
2. type product
3. subsegment
4. fabrikant
5. merk
6. sku
bij niveau 6 (dus de sku's) wil ik alle voorlopende niveaus in een aparte kolom hebben.
voor niveau 5 (dus merk) wil ik alle voorlopende niveau in een aparte kolom hebben etc.
je krijgt dus eigenlijk zoiets als onderstaande:
markt | type | subsegment | fabrikant | merk | sku |
x | |||||
x | x | ||||
x | x | x | |||
x | x | x | x | ||
x | x | x | x | x | |
x | x | x | x | x | x |
x | x | x | x | x | x |
x | x | x | x | x | x |
x | x | x | x | x | |
x | x | x | x | x | x |
x | x | x | x | x | x |
x | x | x | x | ||
x | x | x | x | x | |
x | x | x | x | x | x |
x | x | x | x | x | x |
Waarbij uiteraard per fabrikant het aantal merken weer kan verschillen, waar per merk het aantal sku's weer kan verschillen etc.
Maar ik probeer nu te bedenken hoe ik een script kan maken dat dit voor mij doet, obv van het aantal voorloopspaties in de cel (en op basis van het aantal voorloop spaties moet er omhoog gezocht worden naar het hogere niveau dat minder voorloop spaties heeft, etc).
Maar alles begint met de waarden die in kolom I staan.
Hoe kan ik dit doen met een VBA script?
onderstaande zijn de excel formules voor de verschillende kolommen die ik nu heb en die kijken naar het aantal spaties:
Code:
Kolom A:
"=IF(LEFT(RC[8],1)="" "",IF(LEFT(RC[8],3)="" "","""",RC[8]),"""")"
Kolom B:
"=IF(LEFT(RC[7],3)="" "",IF(LEFT(RC[7],5)="" "","""",RC[7]),"""")"
Kolom C:
"=IF(LEFT(RC[6],5)="" "",IF(LEFT(RC[6],7)="" "","""",RC[6]),"""")"
Kolom D:
"=IF(LEFT(RC[5],7)="" "",IF(LEFT(RC[5],9)="" "","""",RC[5]),"""")"
Kolom E:
"=IF(LEFT(RC[4],9)="" "",IF(LEFT(RC[4],11)="" "","""",RC[4]),"""")"
Kolom F:
"=IF(LEFT(RC[3],11)="" "",IF(LEFT(RC[3],13)="" "","""",RC[3]),"""")"
Kolom G:
"=IF(RC[-2]="""","""",RC[-2]&RC[-3])"
Kolom H:
"=IF(RC[-2]="""","""",RC[-3]&RC[-2])"
Dank!
[edit]voorbeeld bestand nu toegevoegd[/edit]
Bijlagen
Laatst bewerkt: