VBA constante formule in kolom

Status
Niet open voor verdere reacties.

Mannie1968

Gebruiker
Lid geworden
27 nov 2006
Berichten
15
Hallo,

Ik wil vanalles doen maar in de basis zoek ik een vba formule in private sub of zo waar de rijen in kolom c automatisch berekend worden (A * B).

Lijkt mij vrij simpel maar ik kom er niet uit!:o

Groet,

Mannie
 
wil je alleen het antwoord hebben in C of wil je de formule a*b in C hebben?

Moet het een statische macro worden die dit voor je uitvoerd na indrukken van een knop?

A*B is natuurlijk wel een beetje triviaal om met macro's te doen :P
 
Ik wil een dynamische berekening in kolom C (ongeacht het aantal gevulde regels).
Ik weet dat deze berekening simpel is maar ik wil het verwerken in een macro....
 
bijvoorbeeld:

Code:
Cells(1, 3).FormulaR1C1 = "=RC[-2] * RC[-1]"

het cells(1,3) deel kan vervangen worden door for loops etc.
 
Mannie1968,

Je hoef FormulaR1C1 niet te gebruiken.
Code:
Cells(1, 3) = "=RC[-2] * RC[-1]"
 
Ik heb nu dit in de code staan:

Private Sub calc()
Cells(1, 3) = "=RC[-2] * RC[-1]"
End Sub

Maar dit werkt niet. Hoekan ik er voor zorgen dat kolom c continu kolom a * kolom B berekend?
 
Mannie1968,

Zet deze code achter het blad.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  For Each cl In Columns(3)
    cl.Value = "=IF(RC[-1]="""","""",RC[-2]*RC[-1])"
  Next
End Sub
 
Test deze eens
Code:
Sub tst()
sq = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
sq2 = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(sq)
    sq(i, 1) = sq(i, 1) * sq2(i, 1)
Next
Range("C1").Resize(UBound(sq)) = sq
End Sub
 
Warme bakkertje,

Deze macro werkt ook geweldig.
Bij deze code vult hij alleen de cellen van kolom C als er in Kolom A & B wat staat.

Bij de code van mij als Amateur is de hele kolom C gevuld met de formule.

De keuze is aan Mannie1968
 
Goedemorgen,

Het werkt alle 2 fantastisch. Het voordeel van de code van ExcelAmateur is dat het dynamisch is en dus niet de sub hoeft aan te roepen.

Een klein puntje echter: er is wat verwerkingstijd zodat na dat je een cel gevuld hebt de macro even bezig is omdat hij dus schijnbaar alle rijen berekend. Als je heb opslaat met wat voorbeelden is de grootte bijna 10 mB?!

Maar.....het werkt wel!


Greetz,

Mannie
 
Laatst bewerkt:
Mannie1968,

Het werkt alle 2 fantastisch.
Als je de code van mij gebruikt zou je deze na de eerste keer uit kunnen schakelen.
Omdat de cellen immers al gevuld zijn met de formule.
Dus hoef deze macro niet meer gebruikt te worden en werkt het sneller.

Het uitschakelen doe je door voor elke regel code een ' te plaatsen.

Vergeet je niet om de vraag als opgelost te zetten. :thumb:
 
Zo, jij bent ook al vroeg op ExcelAmateur!

Heb je geprobeerd een rij of 3 te vullen en dan op te slaan? Is erg groot.
In mijn totaal macro moet het dynamisch zijn er kunnen dus ten aller tijde rijen bijkomen en dus ben ik niet zo gelukkig met het aan en uitzetten van de macro....

Greetz,

Mannie
 
Het is toch normaal als je een volledige kolom met onnodige formules vult dat je bestand enorm groot wordt
Op deze manier wordt de code ook dynamisch en slechts uitgevoerd op het aantal aanwezige rijen :shocked: :eek:
Toch niet zo moeilijk, toch :(
Code:
Private Sub Selection_Change(ByVal Target As Range)
sq = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
sq2 = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(sq)
    sq(i, 1) = sq(i, 1) * sq2(i, 1)
Next
Range("C1").Resize(UBound(sq)) = sq
End Sub
 
Laatst bewerkt:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On error resume next
sq = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
sq2 = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(sq)
    sq(i, 1) = sq(i, 1) * sq2(i, 1)
Next
Range("C1").Resize(UBound(sq)) = sq
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan