Excel filtert niet op datum in toekomst

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • __R__
  • Registratie: Juni 2008
  • Laatst online: 17:41
Ik probeer in een Excel file het volgende te doen: Filter een kolom op datum vergeleken met de huidige datum. Verberg alle kolommen die niet vandaag en morgen zijn.

In cellen G:T3 staan de data vermeld. Dus b.v. 13-5-2024 14-5-2024 15-5-2024 16-5-2024 17-5-2024

Vandaag is het 15-5 en ik gebruik de volgende MACRO

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Vandaag_en_Morgen()
ActiveSheet.Unprotect
    Dim rng As Range
    Dim cell As Range
    Application.ScreenUpdating = False
    Set rng = ActiveSheet.Range("G3:T3")
    For Each cell In rng
        If cell.Value < Date Then
            cell.EntireColumn.Hidden = True
        Else
            Exit For
        End If
        Next cell
    Application.ScreenUpdating = True
    
End Sub


Het frapante is dat nu met deze code alle kolommen met een datum lager dan vandaag netjes gefilterd worden. Maar het de extra eis van morgen krijg ik maar niet werkend. Dus voor de test even geprobeerd om alle datums groter dan vandaag dan te filteren. Onder het mom van dan maar twee macro`s. Maar zodra ik het "kleiner als" teken in regel 8 een "groter dan"' teken geef gebeurd er helemaal niks. Ook geen foutmelding.

Ook geprobeer om de hele code dubbel op te schrijven maar dan loop ik (Excell) vast op het feit dat er twee keer een range gebruikt gaat worden.

Dus op een of andere manier zal ik naar een and functie moeten gaan maar ook daar loop ik vast.

Wie kan er helpen?

Ik

Beste antwoord (via __R__ op 16-05-2024 18:33)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Dit gedeelte:
code:
1
2
3
4
5
6
If cell.Value < Date Then
   cell.EntireColumn.Hidden = True
End If
If cell.Value > Date + 1 Then
   cell.EntireColumn.Hidden = True
End if

kun je (zoals ik hierboven al schreef) verkorten tot:
code:
1
2
3
If cell.Value < Date Or cell.Value > Date + 1 Then
   cell.EntireColumn.Hidden = True
End If

Alle reacties


Acties:
  • +1 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 16:19

SinergyX

____(>^^(>0o)>____

Else
Exit For

Daar zit je probleem, de eerste dagen voldoen namelijk niet aan jouw 'if' (zijn immers kleiner dan) en gaat je script naar Else->Exit. De exit for weghalen (en gewoon elke keer de loop laten afmaken, het zijn toch maar een paar kolommen) werkt wel.

[ Voor 3% gewijzigd door SinergyX op 15-05-2024 13:13 ]

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
__R__
De if-opdracht moet je inderdaad aanpassen: niet alleen de 'exit for' er uithalen, maar ook de datums aanpassen waarvan de kolommen moeten worden verborgen. Je schrijft in je inleiding dat alle kolommen moeten worden verborgen waarin niet de datum vandaag of morgen staat, maar als if-opdracht laat je alleen de kolommen met datums kleiner dan vandaag verbergen ( 'If cell.Value < Date' ). Je moet ook opdracht geven om de kolommen waarin de datum ná morgen ligt, te verbergen. Je krijgt dan dit:
code:
1
2
3
4
5
For Each cell In rng
  If cell.Value < Date Or cell.Value > Date + 1 Then
     cell.EntireColumn.Hidden = True
  End If
Next cell

Acties:
  • 0 Henk 'm!

  • __R__
  • Registratie: Juni 2008
  • Laatst online: 17:41
Uiteindelijk met de tips van @SinergyX en @dix-neuf en nog wat gegoole er helemaal uitgekomen. Dank jullie!

Grootste fout die ik maakte was bij uitbreiding van de If statement ik niet doorhad dat na elk IF statement er een END IF moest komen. Uiteindelijk filter ik nu op vandaag en morgen met de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Vandaag_en_Morgen()
ActiveSheet.Unprotect "Pl@nning"
    Dim rng As Range
    Dim cell As Range
    Application.ScreenUpdating = False
    Set rng = ActiveSheet.Range("G3,H2,I3,J2,K3,L2,M3,N2,O3,P2,Q3,R2,S3,T2")
    For Each cell In rng
        If cell.Value < Date Then
            cell.EntireColumn.Hidden = True
         
        End If
        If cell.Value > Date + 1 Then
            cell.EntireColumn.Hidden = True
        End If
        Next cell
    Application.ScreenUpdating = True
 ActiveSheet.Protect
 Call Hide_Honderd_klus
End Sub

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Dit gedeelte:
code:
1
2
3
4
5
6
If cell.Value < Date Then
   cell.EntireColumn.Hidden = True
End If
If cell.Value > Date + 1 Then
   cell.EntireColumn.Hidden = True
End if

kun je (zoals ik hierboven al schreef) verkorten tot:
code:
1
2
3
If cell.Value < Date Or cell.Value > Date + 1 Then
   cell.EntireColumn.Hidden = True
End If

Acties:
  • 0 Henk 'm!

  • __R__
  • Registratie: Juni 2008
  • Laatst online: 17:41
Dat maakt het geheel wel compacter ja. Ga ik doen!
Pagina: 1