Excel macro (VBA) om cellen te kopiëren met datum

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Telin
  • Registratie: Januari 2020
  • Laatst online: 16:47
Mijn vraag
Voor mijn werk ben ik met een Excel sheet bezig waarbij het handig zou zijn als ik het voor elkaar krijg om bepaalde cellen te kopiëren naar een ander werkblad aan de hand van de (huidige) datum.

Ik zal met screenshots duidelijker proberen te maken wat ik bedoel.

Hieronder blad "Data"
Je ziet dat er getallen staan in cellen U40:Y40

Afbeeldingslocatie: https://tweakers.net/i/9gAH3T5cHD9zZq5Pw4KWf1fQ_eM=/800x/filters:strip_icc():strip_exif()/f/image/q2CFFAVrEQ9XvQ54rfPu157E.jpg?f=fotoalbum_large

Deze getallen wil ik kopiëren naar blad "Overzicht"
Dan op de regel met de datum die gelijk is aan de datum die is aangegeven in cel H1 (dit is de cel met de forumule =VANDAAG() )

Afbeeldingslocatie: https://tweakers.net/i/ryQsxI-oNA4mj2KrzNqvFnO61Z0=/800x/filters:strip_icc():strip_exif()/f/image/vjzHKNtEdqMMXjtuKGcTHWfP.jpg?f=fotoalbum_large

Het zou er dus als volgt uit moeten komen te zien na het uitvoeren van de macro:

Afbeeldingslocatie: https://tweakers.net/i/iI5DqC8OnduqP7Eqrtf4KGCCJ6w=/800x/filters:strip_icc():strip_exif()/f/image/qOTB5JYZIjBJVjQ3Tama4Snc.jpg?f=fotoalbum_large

Belangrijk is de datumvergelijking. Als ik dus een week zou overslaan en daarna de macro draai zou de reeks getallen uit het blad "Data" op de regel ingevuld moeten worden met de datum 24-11-2023 in het blad "Overzicht"

Relevante software en hardware die ik gebruik
Microsoft Windows 11 Pro
Microsoft Office 365

Wat ik al gevonden of geprobeerd heb
Cellen kopiëren met een macro lukt mij wel. Maar ik krijg het nog niet goed voor elkaar om die datum "afhankelijkheid" er goed in te krijgen.

Wie kan mij helpen? :)

Beste antwoord (via Telin op 24-11-2023 08:58)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Twee opmerkingen vooraf:
1. De naam 'Overzicht' moet je niet voor de naam van een werkblad gebruiken. Omdat 'Revisieoverzicht' een door Excel gereserveerde naam is, wordt ook de naam 'Overzicht' in bv. Excel 2010 niet geaccepteerd. Ik zal hier de naam 'Overz' gebruiken.
2. Het gebruik van samengevoegde cellen (zoals je voor de datum in H1 in het blad 'Overz' hebt gedaan, is af te raden; het leidt nogal eens tot problemen, zeker als je met vba werkt. En voor 1 datum is het gebruik van 1 cel meer dan voldoende.
a. Oplossing zonder vba:
Typ in B1 van het blad 'Overz': =als($A2=$H$1;Data!U$40;"")
Kopieer die formule naar rechts t/m F2, en kopieer A2:F2 naar beneden tot zover als nodig.

b. Oplossing met vba:
Plaats in een module onderstaande macro en voer die uit.
Er is vanuit gegaan dat de bladen de namen 'Overz' en 'Data' hebben.
code:
1
2
3
4
5
6
7
8
9
10
11
Sub macro1()
Dim x As Integer
With Sheets("Overz")
.Columns("b:f").ClearContents
For x = 2 To Range("a" & .Rows.Count).End(xlUp).Row
If .Range("a" & x).Value = .Range("h1").Value Then
Sheets("Data").Range("u40:y40").Copy Destination:=.Range("b" & x & ":f" & x)
End If
Next x
End With
End Sub

Alle reacties


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Het zou helpen als je de code geeft die je al hebt, waar loop je vast in de code? :)

Bekijk datum, doe loopjes, plaats gegevens.

Maar: is VBA nodig? Enige reden om VBA te gebruiken lijkt de vandaag() te zijn, maar als de data in blad Data ook wordt voorzien wordt van datums is dat niet nodig?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Op het blad 'Overzicht' doorloop je kolom A van A1 t/m de cel met de laatste datum in kolom A. Dat kan bv. met een For-Nextlus. Als die bewerking in kolom A een cel tegenkomt met een datum die gelijk is aan de datum in H1, kopieer je van het blad 'Data' U40:Y40 naar de overeenkomstige rij in B:F van het blad 'Overzicht'. Dat is alles.

Acties:
  • 0 Henk 'm!

  • Telin
  • Registratie: Januari 2020
  • Laatst online: 16:47
dix-neuf schreef op zaterdag 18 november 2023 @ 10:16:
Op het blad 'Overzicht' doorloop je kolom A van A1 t/m de cel met de laatste datum in kolom A. Dat kan bv. met een For-Nextlus. Als die bewerking in kolom A een cel tegenkomt met een datum die gelijk is aan de datum in H1, kopieer je van het blad 'Data' U40:Y40 naar de overeenkomstige rij in B:F van het blad 'Overzicht'. Dat is alles.
Was/ben niet bekend met de For-Nextloop dus heb wat YouTube videos bekeken hierover maar wordt mij nog niet echt duidelijk hoe ik die dan kan ombouwen naar mijn use case.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Met for () kan je elk element van een lijst een voor een langslopen. Per cel kijk je of de datum overeenkomt met de gegeven datum. (Wel even opletten dat beide cellen hetzelfde formaat aanhouden, "3 jan 2024 13:00" is niet gelijk aan "3 jan 2024").

Over loops, advies: begin niet met alleen bekijken van voorbeelden op Youtube om te zien of je dat kunt hanteren. Probeer - los van je concrete vraag - wat voorbeelden uit waar je zelf het voorbeeld namaakt. Dan snap je sneller wat het doet. https://learn.microsoft.c...ce-help/fornext-statement is heel simpel, iets als https://excelmacromastery...p/#VBA_For_Loop_Example_3 (willekeurig voorbeeld) is al wat dichter bij je vraag.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Twee opmerkingen vooraf:
1. De naam 'Overzicht' moet je niet voor de naam van een werkblad gebruiken. Omdat 'Revisieoverzicht' een door Excel gereserveerde naam is, wordt ook de naam 'Overzicht' in bv. Excel 2010 niet geaccepteerd. Ik zal hier de naam 'Overz' gebruiken.
2. Het gebruik van samengevoegde cellen (zoals je voor de datum in H1 in het blad 'Overz' hebt gedaan, is af te raden; het leidt nogal eens tot problemen, zeker als je met vba werkt. En voor 1 datum is het gebruik van 1 cel meer dan voldoende.
a. Oplossing zonder vba:
Typ in B1 van het blad 'Overz': =als($A2=$H$1;Data!U$40;"")
Kopieer die formule naar rechts t/m F2, en kopieer A2:F2 naar beneden tot zover als nodig.

b. Oplossing met vba:
Plaats in een module onderstaande macro en voer die uit.
Er is vanuit gegaan dat de bladen de namen 'Overz' en 'Data' hebben.
code:
1
2
3
4
5
6
7
8
9
10
11
Sub macro1()
Dim x As Integer
With Sheets("Overz")
.Columns("b:f").ClearContents
For x = 2 To Range("a" & .Rows.Count).End(xlUp).Row
If .Range("a" & x).Value = .Range("h1").Value Then
Sheets("Data").Range("u40:y40").Copy Destination:=.Range("b" & x & ":f" & x)
End If
Next x
End With
End Sub

Acties:
  • 0 Henk 'm!

  • Telin
  • Registratie: Januari 2020
  • Laatst online: 16:47
Bedankt voor de (extra) toelichting.
Met jouw code heb ik het werkend gekregen en vervolgens hier en daar wat aangepast om in de alweer wat veranderede situatie toe te passen.
Pagina: 1