Formule Als() in Macro

Status
Niet open voor verdere reacties.

Moche56

Gebruiker
Lid geworden
3 aug 2013
Berichten
58
Graag ontvang ik hulp voor onderstaande vraag:

In een Excel bestand zijn er:
Waarden (vanuit een formule) in kolom B1 tot B50
Als er een waarde wordt ingevoerd in A1 t/m A50 wil ik dat de waarde uit de formule in B1 als waarde (zonder formule) in C1 geplakt wordt.
Indien bijv. geen waarde staat in A20 dan mag B20 niet naar C20 gekopieerd worden. Wel moet C20 leeg gemaakt worden.

Dus de Excel formule in C1:

Code:
Als(A1<>"";Waarde(B1);"")

Dit allemaal in een macro die A1 t/m A50 doorloopt
Voor de duidelijkheid: daarna wordt A1 t/m A50 leeg gemaakt voor de volgende keer.

Kan dat?

Bedankt alvast

Moché
 
Wat voor formule staat er in kolom B.
Zonodig kan de formule eruit.
 
De formule in B1 bewerkt de waarde die in A1 is ingevoerd:
Het rond de waarde in A1 naar een meerwaarde van 8 af.
Daarom is de formule nodig.
De formule is niet in de macro nodig

Mvg
Moché
 
Dat begrijp ik, maar was niet mijn vraag.
Het kan ook zonder je formule in kolom B.
Maar het is jouw feestje.
 
Ok
De formule in B is:

Code:
ALS(A1="";"";(AFRONDEN.BENEDEN(A1/8;1)*8))

Waarom is dit van belang voor de macro?

En het is pas feest als ik weet hoe de macro gemaakt kan worden :)

Gr,
Moché
 
Dat heb ik twee keer uitgelegd Moché.

Onderstaande is met jouw formule in kolom B.
Code:
Sub hsv()
Dim cl As Range
    For Each cl In Columns(1).SpecialCells(2)
  cl.Offset(, 2) = cl.Offset(, 1)
     Next
End Sub

Maar met deze code kan jouw formule weg.

Code:
Sub hsvtwee()
Dim cl As Range
For Each cl In Columns(1).SpecialCells(2)
    cl.Offset(, 3) = WorksheetFunction.Floor(cl.Value / 8, 1) * 8
  Next cl
End Sub

Twee feestjes.
 
Harry,

Bedankt het werkt.

Er is alleen nog een voorwaarde die niet werkt:
"Indien bijv. geen waarde staat in A20 dan mag B20 niet naar C20 gekopieerd worden. Wel moet C20 leeg gemaakt worden"
Is de macro daarvoor aan te passen?

Grt,
Moché
 
Hoi,

Welke van de twee moet ik voor je aanpassen.
 
Harry,
Ik waardeer je hulp.
De eerste code aub (met formule in kolom B).
Ik ben ook bezig te proberen de macro pas vanaf rij 5 te laten starten. Maar ik ben nog te groen (wel bezig met een VBA boek)

Grt,
Moché
 
Laatst bewerkt:
Het is graag gedaan hoor.

Zet onderstaande eens in de bladmodule van toepassing.

edit: Ik kom er op terug.
 
Laatst bewerkt:
Harry,
Twee vragen:
Met deze "Private" macro wordt de macro direct actief.
Dat is niet de bedoeling. Eerst moeten alle regels beoordeelt worden. Dan dmv een knop de macro activeren.

Indien Ax is leeg wordt Cx niet leeg gemaakt.

Deze macro wordt steeds mooier :)
Grt,
Moché
 
Probeer het nog eens Moché.
Code:
Sub hsv()
Dim cl As Range
For Each cl In Range("A5:A" & Cells(Rows.Count, 1).End(xlUp).Row + 10)
   cl.Offset(, 2) = cl.Offset(, 1)
 Next
End Sub
 
Harry,
Met jou hulp een succes::thumb:


Onderstaande code doet wat ik nodig heb.
Klopt de code of zie je fouten?

Code:
Sub hsv()
Dim cl As Range, Rng As Range
Set Rng = Range("A5:A" & Cells(Rows.Count, 1).End(xlUp).Row)
For Each cl In Rng 'Columns(1).SpecialCells(2)

    cl.Offset(, 3) = cl.Offset(, 1)

  Next cl
End Sub


Erg bedankt en zo welterusten.
Grt,
Moché
 
Harry,
Bedankt weer.
Je code is natuurlijk eenvoudiger dan wat ik gedaan had.

Welterusten
Grt,
Moché
 
Ook een goede nachtrust Moché.
 
Hallo Harry,
Toch nog een vraag :-(
Ik heb de macro toegepast en kom het volgende probleem tegen:
In kolom A voer ik een waarde die een waarde uit een formule in kolom B overrule.
Dit betekent dat in Kolom B meer waarden zijn dan dat er overgenomen moet worden:
Voorbeeld:
Waarde in B1 = 10 (uit formule). In A1 voer ik 20 dan wordt B1=20. 20 moet naar C1 (met de macro)
Warde in B2 = 20 (uit formule). In A2 vul ik niets. C2 moet leeg gemaakt worden (of leeg blijven)
Nu kopieert de macro alle waarden in kolom B. Dat is niet gewenst.

Is de macro daarvoor aan te passen?

Code:
Sub hsv()
Dim cl As Range
For Each cl In Range("A5:A" & Cells(Rows.Count, 1).End(xlUp).Row + 10)
   cl.Offset(, 2) = cl.Offset(, 1)
 Next
End Sub

Grt,
Moché
 
Hallo Harry,

Nu kopieert de macro alle waarden in kolom B. Dat is niet gewenst.
Code:
   cl.Offset(, 2) = cl.Offset(, 1)

Grt,
Moché

Onmogelijk Moché,
Kolom A = cl
cl.offset(,2) = kolom C.
cl.offset(,1) = kolom B.
Dus in de code staat:
kolom C = kolom B.
 
Dat verklaart een hoop meer.
Code:
Sub hsv()
Dim cl As Range
With Sheets("Blad1")
For Each cl In .Range("A5:A" & .UsedRange.Rows.Count)
 If Not cl.Offset(, 1).HasFormula Then
     cl.Offset(, 2).ClearContents
 Else
     cl.Offset(, 2) = cl.Offset(, 1)
   End If
 Next
 End With
End Sub
 
Oeps :-(
Mijn voorbeeld was verkeerd.
De rode cellen bestaan ook uit formule.
De formule geeft een voorstel die ik overrule of negeer.
"Overrule" mag overgenomen worden. "Negeer" > niet.
De controle om B over te nemen is A wel of niet ingevuld.

Kan je iets hiermee?

Grt,
Moché

Bekijk bijlage Test HSVa.xlsm
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan