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

VBA formule toepassen op gehele kolom.

  • Onderwerp starter Onderwerp starter Rnie
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Rnie

Gebruiker
Lid geworden
19 jun 2009
Berichten
63
Goedemiddag,

Ik heb een vraag over een formule in VBA.

In de bijlage heb ik een Excel voorbeeld toegevoegd. De vraag is:

- Ik wil het aantal dagen berekenen tussen de data in kolom C en cel A1. Dus zodra ik in kolom C een datum invul wil ik automatisch in kolom D het verschil in dagen zien.

Momenteel heb ik de volgende formule:

Private Sub CommandButton1_Click()
Dim Start_Date As Date
Dim End_Date As Date
Dim Diff As Integer
Start_Date = Cells(1, 1).Value
End_Date = Cells(3, 3).Value
'Aantal dagen berekenen
Diff = DateDiff("D", Start_Date, End_Date)
Cells(3, 4).Value = Diff
End Sub

Ik ben benieuwd naar de reactie.

Groet,
Rnie
 

Bijlagen

Waarom niet gewoon met een standaard excel formule? Tel je vakantiedagen niet mee?
 
Waarom niet gewoon met een standaard excel formule? Tel je vakantiedagen niet mee?

De bedoeling is om gewoon de volle week te berekenen. Ik houd geen rekening met vakantie en weekenden.
Met de standaard Excel formule gaat het wel eens verkeerd met regels invoegen. Dan word formule niet altijd standaard meegenomen.
 
Doe ons een lol, en stop met nodeloos quoten. Nergens voor nodig.
 
Zoiets dan
Edit: datediff niet nodig
Code:
Sub j()
Set ar = Range("C3:C" & Cells(Rows.Count, 3).End(xlUp).Row)
 For Each cell In ar
  cell.Offset(, 1).Value = cell.Value - Cells(1, 1).Value
 Next
End Sub
 
Laatst bewerkt:
Met de standaard Excel formule gaat het wel eens verkeerd met regels invoegen. Dan word formule niet altijd standaard meegenomen

En als je de gegevens in een Excel-tabel zet?
 
En als je de gegevens in een Excel-tabel zet?

Het leek mij netter. Bovendien heb ik nog niet overal een datum in kolom C staan. Wanneer kolom C nog niet is ingevoerd krijg je "#getal!" in de cel te zien. Vind ik niet mooi.
 
Dat kun je ondervangen met een Als.fout functie
 
Zoiets dan
Edit: datediff niet nodig
Code:
Sub j()
Set ar = Range("C3:C" & Cells(Rows.Count, 3).End(xlUp).Row)
 For Each cell In ar
  cell.Offset(, 1).Value = cell.Value - Cells(1, 1).Value
 Next
End Sub
Deze formule werkt niet bij mij.
 
Code:
Set ar = Range("C3", Cells(Rows.Count, 3).End(xlUp))

Of:
Code:
Sub hsv()
 Range("c3", Cells(Rows.Count, 3).End(xlUp)).Name = "b"
 [b].Offset(, 1) = [b-a1]
End Sub

Of zonder A1.
Code:
Sub hsv()
 Range("c3", Cells(Rows.Count, 3).End(xlUp)).Name = "b"
 [b].Offset(, 1) = [b-today()]
End Sub

Maak er anders een echte tabel van.
Met regels invoegen wordt gewoon de formule meegenomen.
Geen Vba voor nodig.
 
Laatst bewerkt:
klik eens op de blauwe knop

Deze doet toch hetzelfde als mijn eerste voorbeeld in de OP? Ik had er een CommandButton van gemaakt. Maar in jou voorbeeld moet ik nog steeds op een button klikken om het verschil in dagen te zien in kolom D. Ik wil eigenlijk van die hele knop af.
 
Het quoten is niet nodig, je bent al zo lang lid dat je weet dat er een "reageer op bericht" knop is.

In dezelfde module als waar nu je code van de commandbutton staat.

Cel A1 mag je wissen: =Date in de code.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count = 1 Then
 Application.EnableEvents = False
  If Target.Column = 3 And Target.Row > 2 And Target <> "" Then Target.Offset(, 1) = Target - Date
 Application.EnableEvents = True
 End If
End Sub

Of:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count = 1 Then
  If Target.Column = 3 And Target.Row > 2 And Target <> "" Then
    Application.EnableEvents = False
      Target.Offset(, 1) = Target - Date
    Application.EnableEvents = True
  End If
 End If
End Sub
 
Laatst bewerkt:
Die laatste formule doet wat ik wil. Bedankt HSV. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan