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

Waarde van kolommen over meerdere rijen verdelen, met dezelfde rijwaarde ervoor

Status
Niet open voor verdere reacties.

Coachmans81

Gebruiker
Lid geworden
2 dec 2015
Berichten
5
Ik ben bezig geweest om bepaalde gegevens die ik in excel heb staan naast elkaar te krijgen. Punt is, dat het aantal rijen niet altijd hetzelfde is, omdat er op verschillende momenten een extractie vanuit een database wordt gemaakt en er dus veranderende gegevens zijn. Echter wil ik wel elke keer dezelfde logica op toepassen. Bijgaan heb ik een excel bijgevoegd, waar een voorbeeld in staat met 3 rijen en 4 kolommen gegevens.
In werkelijkheid zijn het dus een onbekend aantal rijen en 40 kolommen met daarbij behorende waarden.
Ik verwacht dat hier een macro gebruikt zal moeten gaan worden, maar mijn kennis van macro's is te beperkt om dit zelf op te kunnen lossen.

Ik heb een voorbeeld bestandje gemaakt om aan te duiden wat ik bedoel.

Bekijk bijlage Omzetten gegevens excel.xlsx
 
Hoi,
Welkom op dit forum:)
Werkt een oplossing met draaitabellen niet voor u? zie voorzetje

Dank je, overigens was ik al eens lid onder andere naam, maar kon ermee niet inloggen;)
Draaitabel werkt niet, omdat ik de kolomnamen er niet achter krijg, dus in dit geval A, B, C en D.
 
Deze vorm van normalisatie doe je met:

Code:
Sub M_snb()
  sn = Blad1.Cells(1).CurrentRegion
  ReDim sp((UBound(sn) - 1) * (UBound(sn, 2) - 1) - 1, 2)
  
  For j = 0 To UBound(sp)
    x = j \ (UBound(sn, 2) - 1) + 2
    y = j Mod (UBound(sn, 2) - 1) + 2
    sp(j, 0) = sn(x, 1)
    sp(j, 1) = sn(1, y)
    sp(j, 2) = sn(x, y)
  Next
    
  Blad1.Cells(20, 1).Resize(UBound(sp) + 1, UBound(sp, 2) + 1) = sp
End Sub

P.S. In je voorbeeldbestand moet je kolom F wel eerst even leegmaken.
 
Laatst bewerkt:
Deze vorm van normalisatie doe je met:

Code:
Sub M_snb()
  sn = Blad1.Cells(1).CurrentRegion
  ReDim sp((UBound(sn) - 1) * (UBound(sn, 2) - 1) - 1, 2)
  
  For j = 0 To UBound(sp)
    x = j \ (UBound(sn, 2) - 1) + 2
    y = j Mod (UBound(sn, 2) - 1) + 2
    sp(j, 0) = sn(x, 1)
    sp(j, 1) = sn(1, y)
    sp(j, 2) = sn(x, y)
  Next
    
  Blad1.Cells(20, 1).Resize(UBound(sp) + 1, UBound(sp, 2) + 1) = sp
End Sub

P.S. In je voorbeeldbestand moet je kolom F wel eerst even leegmaken.

Dat doet inderdaad wat ik zocht. Is het ook nog mogelijk om de nieuwe data in een nieuw tabblad te plaatsen?
 
Svp niet citeren (quoten) !
Kan zomaar met:

Code:
Sub M_snb()
  sn = Blad1.Cells(1).CurrentRegion
  ReDim sp((UBound(sn) - 1) * (UBound(sn, 2) - 1) - 1, 2)
  
  For j = 0 To UBound(sp)
    x = j \ (UBound(sn, 2) - 1) + 2
    y = j Mod (UBound(sn, 2) - 1) + 2
    sp(j, 0) = sn(x, 1)
    sp(j, 1) = sn(1, y)
    sp(j, 2) = sn(x, y)
  Next
    
  Sheets.Add.Cells(1).Resize(UBound(sp) + 1, UBound(sp, 2) + 1) = sp
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan