Sub MaakPivotLijst()
' Zet de gegevens in een lijst die geschikt is
' om een draaitabel van te maken.
Dim LeesRijTeller As Integer, SchrijfRijTeller As Integer
Dim CategorieTeller As Integer, KolomTeller As Integer
Dim BronCel As Range, DoelCel As Range
Dim StartTijd As Single
StartTijd = Timer
Set BronCel = Sheets("Lijst").Range("A1")
Set DoelCel = Sheets("PivotLijst").Range("A1")
' Kolomtitels
For KolomTeller = 0 To 5
DoelCel.Offset(0, KolomTeller).Value = _
BronCel.Offset(0, KolomTeller).Value
Next KolomTeller
DoelCel.Offset(0, 6).Value = "Categorie"
DoelCel.Offset(0, 7).Value = "Uren"
' Gegevensrijen
SchrijfRijTeller = 1
For LeesRijTeller = 1 To Sheets("Lijst").UsedRange.Rows.Count - 1
For CategorieTeller = 1 To 3
' Kolommen A-F
For KolomTeller = 0 To 5
DoelCel.Offset(SchrijfRijTeller, KolomTeller).Value = _
BronCel.Offset(LeesRijTeller, KolomTeller).Value
Next KolomTeller
' Kolom G uit rij 1
DoelCel.Offset(SchrijfRijTeller, 6).Value = _
BronCel.Offset(0, 5 + CategorieTeller).Value
' Kolom H uit kolommen G-I
DoelCel.Offset(SchrijfRijTeller, 7).Value = _
BronCel.Offset(LeesRijTeller, 5 + CategorieTeller).Value
SchrijfRijTeller = SchrijfRijTeller + 1
Next CategorieTeller
Next LeesRijTeller
MsgBox Timer - StartTijd
End Sub
--
Amedee
Excel is een rekenbladprogramma; Excell is een computerwinkel.
Excel kan je dus kopen bij Excell.
> Onderstaande sub doet 54" over een blad met 426 rijen. Ik ben er zeker
> van dat dit sneller kan, wie kan me tips geven?
1. Voor start berekenen op manueel zetten:
Application.Calculation=xlManual
(niet vergeten terug te zetten aan het einde)
2. Scherm verversen uitzetten:
Application.Screenupdating=False
Groetjes,
Jan Karel Pieterse
Excel MVP
www.jkp-ads.com
Dedoeme, da's de klassieker natuurlijk! Dat ik die vergeten ben, doe ik
anders altijd. Nu is 't maar 4,3" meer, of 100 rijen/seconde. Mercikes
hee!
Ik bedoelde eigenlijk ook structurele verbeteringen.
Is er een manier om het nóg sneller te doen?
Mijn definitieve gegevens kunnen enkele duizenden rijen bevatten en dan
duurt het toch nog vrij lang.
Uitgetest met 9 kolommen van 875 rijen: resulteert in 2623 regels in "PivotLijst"
Duur op m'n labtop: 1.8 seconden
Met calculatie op handmatig: 1.2 seconden.
--
Peter
"Amedee Van Gasse" wrote in message ...
> Is er een manier om het nóg sneller te doen?
>
Ja, je macro herschrijven. Je kunt hele bereiken tegelijk toewijzen:
Worksheets("Sheet1").Range("A1:H1400")=Worksheets("Sheet2").Range("A2:H
1401")
Maar dat is een heel gepuzzel, dat ik graag aan jou overlaat <vbg>.
Wordt moeilijk, want 1 rij op Sheet1 wordt telkens 3 rijen op Sheet2.
Dus de grootte van de ranges verschilt. Effe denken...
DoelSheet.Range(DoelCel.Offset(SchrijfRijTeller, 0), _
DoelCel.Offset(SchrijfRijTeller, 5)).Value = _
BronSheet.Range(BronCel.Offset(LeesRijTeller, 0), _
BronCel.Offset(LeesRijTeller, 5)).Value
Yesssss! Werkt 2x sneller dan
For KolomTeller = 0 To 5
DoelCel.Offset(SchrijfRijTeller, KolomTeller).Value = _
BronCel.Offset(LeesRijTeller, KolomTeller).Value
Next KolomTeller
Bedankt he!
;-)