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

Macro 'als functie'

Status
Niet open voor verdere reacties.

hermes79

Gebruiker
Lid geworden
22 mei 2006
Berichten
48
Ik heb het volgende probleem.
Ik kan een kleine macro schrijven die er voor zorgt dat een cel wordt leeggemaakt binnen een bepaalde range.
In mijn bijgevoegde file wordt een cel in kolom C leeggemaakt indien deze de waarde 04 heeft.

Probleem is echter dat ik niet wil dat de cel in deze kolom leeggemaakt wordt maar deze in kolom D.

Dus concreet; de cel in kolom D moet leeg zijn indien:

- de cel (op dezelfde rij uiteraard) in kolom C niet de waarde 03 heeft

Maar daarenboven, en daar ben ik nog volledig niet uit, wens ik dezelfde uitkomst (cel C leeg) in onderstaande gevallen
- de cel in kolom H groter is dan 20100120 (datum van vandaag)
- de waarde in kolom E – de waarde in kolom F groter is dan 0

Weet het, vraag waarschijnlijk niet het meest éénvoudige, maar vermoed wel dat het kan.
Had kennis van deze zaken maar m’n studietijd is blijkbaar al een ganse tijd achter de rug.

Bedankt

Hermes
 

Bijlagen

Laatst bewerkt:
Onderstaande zet de waarde in kolom D op <leeg>

Code:
Sub test()
Set Rng = Range("C2:C100")
    For Each cell In Rng
    If cell.Value = "04" Then
    cell.Offset(0, 1).Value = ""
    End If
    Next cell
End Sub

Je zult je If Then structuur moeten uitbreiden voor je andere opties, want het is mij niet precies duidelijk wat nu wanneer moet gebeuren.

Richard
 
Is gelijk.
Van zodra aan één van de 3 voorwaarden voldaan moet de cel in kolom D geledigd worden.
 
Beste Zoiets,

Maar ik weet niet hoe ik de inhoud van kolom H in VBA als datum moet krijgen. :-(
Code:
Sub test()
' Als de waarde van een cel in kolom C leeg is,
' dient de cel op dezelfde rij in kolom D te worden uitgeveegd
Set Rng = Range("C2:C100")
    For Each cell In Rng
    If cell.Value = "04" Then
    cell.Offset(0, 1).Value = ""
    End If
    Next cell
' Als de waarde van een cel in kolom H groter is dan vandaag,
' dient de cel op dezelfde rij in kolom D te worden uitgeveegd
Set Rng = Range("H2:H100")
    For Each cell In Rng
    If cell.Value > Day(Now()) Then
    cell.Offset(0, -4).Value = ""
    End If
    Next cell
' Als de waarde van een cel in kolom E groter is dan de waarde van
' de cel op dezelfde rij in kolom F, dient de cel op dezelfde rij
' in kolom D te worden uitgeveegd
Set Rng = Range("E2:E100")
    For Each cell In Rng
    If cell.Value > cell.Offset(0, 1).Value Then
    cell.Offset(0, -1).Value = ""
    End If
    Next cell

End Sub

Richard
 
@Richard,

dan kan simpeler
Code:
Sub test()
  for each cl in Range("C2:C100").specialcells(2)
    if cl.offset(,1)<>"03" or datevalue(cl.offset(,5))>date or cl.offset(,2)>cl.offset(,3) then cl.clearcontents
  next
End Sub
 
@ snb, uiteraard. Ik had ook reactie verwacht van iemand zoals jij :-) Maar ik ben dan ook pas een beginneling op VBA-gebied. (En dat blijft ook nog wel even zo gezien mijn weekindeling)

'k Hoop dat hermes79 er blij mee is.

Richard
 
Ik ben er heel tevreden mee, heb wel de korte versie gebruikt. :-)

Enige probleem nog dat ik heb is dat ik best eerst m'n datum nog zal wijzigen in een 'normale' vorm.
Ik weet hoe ik dit kan door gebruik te maken van een formule
=DATUM(LINKS(E2;4);DEEL(E2;5;2);DEEL(E2;7;2))
Maar zou dit graag in de macro verwerken om alles in één beweging te kunnen uitvoeren.

Bedankt
 
Nu staat er 20100120, jaarmaanddag, waardoor ik fout krijg op
datevalue(cl.offset(,5))>date in m'n formule.

Dit zijn gegevens die ik upload in excel en komt jammer genoeg zo in de cel, waardoor dit niet als datum erkend wordt in excel.

Groeten,

hermes79
 
Ik heb het geprobeerd met DateSerial maar ik kom er maar niet uit.
Functie in de cel plaatsen is geen probleem, maar wil dit graag in éénzelfde macro vervatten.
 
hermes79, Je kan met je vergelijking...
Code:
datevalue(cl.offset(,5))>date
...2 kanten uit werken. Zo kan je de waarde die je krijgt uit 'cl.offset(,5)' omzetten naar een juist datumformat. Hoe je dit doet heb je jezelf al geleerd met functies in de sheet.
Of doe het omgekeerde en zet de 'date' om naar het format van 'cl.offset(,5)'.
Het wordt dus óf
12/01/2010 > 0102/2010
óf
20100112 > 20100201

Probeer daar eens mee te stoeien (= een leuke oefening namelijk)

Groet, Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan