formules toevoegen variabel bereik

Status
Niet open voor verdere reacties.

josdendief

Nieuwe gebruiker
Lid geworden
16 apr 2013
Berichten
3
ik heb sinds kort pas VBA ontdekt. heb er veel interesse in, maar merk dat mijn codes nogal traag werken. hieronder een voorbeeld.

doel is een in een variabel bereik formules toe te voegen. heb tot hiertoe 2 versies, maar de loop-functie werkt (verassend voor mij) veel trager dan via copy-paste formules.
graag wat hulp om een efficiëntere code te vinden.

versie 1 met copy paste variabel bereik

Code:
Range("G2").FormulaR1C1 = "=RC[-2]/100"
    Range("H2").FormulaR1C1 = "=RC[-2]/100"
    Range("O2").FormulaR1C1 = "=RC[-8]-RC[-7]"
    
    Dim MyCount As Integer
    MyCount = Range("a1").CurrentRegion.Rows.count
    
    Range("g2").Select
    Selection.Copy
    Range(Cells(2, 7), Cells(MyCount, 7)).Select
    ActiveSheet.Paste
    
    Range("h2").Select
    Selection.Copy
    Range(Cells(2, 8), Cells(MyCount, 8)).Select
    ActiveSheet.Paste
    
    Range("o2").Select
    Selection.Copy
    Range(Cells(2, 15), Cells(MyCount, 15)).Select
    ActiveSheet.Paste
versie 2 via loop
Code:
Dim i As Range
Cells(2, 1).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select

For Each i In Selection

i.Offset(0, 6).FormulaR1C1 = "=RC[-2]/100"
i.Offset(0, 7).FormulaR1C1 = "=RC[-2]/100"
i.Offset(0, 14).FormulaR1C1 = "=RC[-8]-RC[-7]"
Next i

alvast bedankt...

mvg,newbee
 
Visual Basic is iets anders dan Visual Basic for Applications, VBA is programmeren binnen Office applicaties. Verplaatst naar juiste sectie.
 
Zo misschien (zonder select)
Code:
Sub Spaarie()
    With Sheets(1)
        For Each cl In .Range("G2:G" & .Range("A" & Rows.Count).End(xlUp).Row)
            cl.FormulaR1C1 = "=RC[-2]/100"
            cl.Offset(, 1).FormulaR1C1 = "=RC[-2]/100"
            cl.Offset(, 8).FormulaR1C1 = "=RC[-8]-RC[-7]"
        Next cl
    End With
End Sub
 
@ huijb : zal er beter op letten. heb mij blijkbaar een lijntje miskeken


@ spaarie : jouw code ziet er in ieder geval veel beter uit, en ze werkt ook.

Toch blijft mijn eerste code met select en copy-paste veel sneller.
Heb je enig idee waarom een loop-code trager zou zijn? Zijn toch maar hetzelfde aantal cellen die moeten ingevuld worden? En dan lijkt mij dat vba minder moeite zou moeten hebben als er niet geselecteerd dient te worden.

so much to learn... :rolleyes:
 
Denk dat het meer met de formules te maken heeft die telkens moeten 'weggeschreven' worden en deze dan berekend. Met kopieren en plakken 'schrijft' die niet de formule....
Hang me er niet aan op, maar grote kans dat dat het is.

Je zou het zo eens kunnen proberen (zonder formules invoegen)
Code:
Sub Spaarie()
    With Sheets(1)
        For Each cl In .Range("G2:G" & .Range("A" & Rows.Count).End(xlUp).Row)
            cl.Value = cl.Offset(, -2) / 100
            cl.Offset(, 1).Value = cl.Offset(, -1) / 100
            cl.Offset(, 8).Value = cl - cl.Offset(, 1)
        Next cl
    End With
End Sub
 
lijkt me wel een zinvolle uitleg waarom copy-paste sneller gaat.

ga het ook bij copy past houden voorlopig. je code komt me wel van pas om analoge zaken efficiênter te maken!

hartelijk dank spaarie
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan