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

Cel zoeken met VBA functie FIND a.h.v. datum

Status
Niet open voor verdere reacties.

Boerlo

Gebruiker
Lid geworden
14 jan 2021
Berichten
40
In kolom A staan data in de format DD-MM-YY.
Ik wil nu met de FIND functie aan de hand van een ingegeven datum het bijbehorende celnummer opzoeken, zodat ik een naam kan definiëren als waardenset voor een grafiek.
Heb de volgende code geprobeerd, maar hij kan niets vinden. Wat doe ik verkeerd?

Code:
Sub Test()
Dim begindatum As Date
begindatum = Application.InputBox(MsgGP, TitleMsg, FormatDateTime(Date, vbShortDate), Type:=1)
begindatum = DateValue(begindatum)
On Error Resume Next
Set bdatum = Worksheets("Random").Range("A420:A440").Find(What:=begindatum)
On Error GoTo 0
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

De datum die ik ingeef, staat in de aangegeven zoekrange, en toch vindt 'ie 'm niet.
 
Laatst bewerkt:
Gebruik eens Cdate i.p.v. Datevalue, en verwijder die Error onderdrukking.
 
Ok, heb ik geprobeerd. Lukt nog niet....

Code:
Sub Test()
Dim begindatum As Date
begindatum = Application.InputBox(MsgGP, TitleMsg, FormatDateTime(Date, vbShortDate), Type:=1)
begindatum = CDate (begindatum)
Set bdatum = Worksheets("Random").Range("A420:A440").Find(What:=begindatum)
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Als ik de inputbox even weglaat en gewoon een datum uit de range haal waarin gezocht wordt, dan zou ie 'm moeten vinden:

Code:
Sub Test()
Dim begindatum As Date
begindatum = Worksheets("Random").Range("A425")      'begindatum in cel A425 is een datum die uit de range komt waarin gezocht wordt (A420:A440)
begindatum = CDate (begindatum)
Set bdatum = Worksheets("Random").Range("A420:A440").Find(What:=begindatum)     'er wordt gezocht in range A420:A440 waarvan we weten dat de gezochte datum in A425 staat...
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Blijkbaar gebruik ik de FIND functie niet juist... geef ik te weinig argumenten in?
 
Laatst bewerkt:
Ik schreef: Cdate
 
Oeps, sorry. Ik had het ook geprobeerd met Cdate, maar heb in het bijgevoegde voorbeeld verkeerd overgenomen. HEb 't inmiddels aangepast
 
Als ik tussendoor controleer met MsgBox of de juiste datum gezocht wordt, dan klopt ie

Code:
Sub Test()
Dim begindatum As Date
begindatum = Worksheets("Random").Range("A425")      'begindatum in cel A425 is een datum die uit de range komt waarin gezocht wordt (A420:A440)
begindatum = CDate (begindatum)

'MsgBox begindatum         

Set bdatum = Worksheets("Random").Range("A420:A440").Find(What:=begindatum)     'er wordt gezocht in range A420:A440 waarvan we weten dat de gezochte datum in A425 staat...
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

De MsgBox geeft een correcte datum weer (20-12-2021) die ook daadwerkelijk in de opgegeven range staat. Maar hij vindt 'm niet. Uitslag is "niet gevonden" ...
 
Staan de datums in kolom A als datum of als tekst in de cellen? Staat er alleen een datum in de cel of staat er meer tekst?
 
Ze staan als datum in de cellen, maar met een formule.
Dus in A1 staat bijvoorbeeld 01-01-2020, in A2 vervolgens =A1+1, in A3 vervolgens =A2+1 etc. etc. Bij iedere regel wordt er 1 dag bij geteld.
Ik heb zojuist ook geprobeerd de gezochte datum als datum in te vullen (dus als "20-12-2021" i.p.v. "=A426+1") maar ook dan wordt 'ie niet gevonden..
 
Code:
Sub Test()
Set bdatum = Worksheets(1).Range("A1:A10").Find(CDate(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), , xlValues, xlWhole)
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Exotische opmaak kan beter gevonden worden met Match.
Code:
Sub Test()
 Set bdatum = Cells(Application.Match(CLng(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), Worksheets(1).Range("A1:A10"), 0), 1)
 If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub
 
Laatst bewerkt:
Met deze code werkte het ook niet.....

Heb nu een nieuwe sheet gemaakt met opnieuw een reeks data, en diezelfde code erop los gelaten, nu werkt het allemaal prima!

Er is dus iets aan de hand met de opmaak van die data in de andere sheet, maar ik weet nog niet wat....
 
Heb het aangepast in vorig bericht.
 
Code:
Sub Test()
Set bdatum = Worksheets(1).Range("A1:A10").Find(CDate(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), , xlValues, xlWhole)
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Dit werkt prima.

Als ik dit dan aanpas naar het tabblad waar de data in staan:

Code:
Sub Test()
Set bdatum = Worksheets("Random").Range("A439:A446").Find(CDate(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), , xlValues, xlWhole)
If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Dan werkt het niet meer.
Om te controleren of de verwijzing wel klopt:

Code:
Sub Test()
Set bdatum = Worksheets("Random").Range("A439:A446").Find(CDate(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), , xlValues, xlWhole)

Msgbox Worksheets("Random").Range("A440")

If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

De MsgBox geeft keurig de datum weer uit cel A440: 2-1-2022
Vervolgens geef ik diezelfde datum in om op te zoeken, en hij vindt hem niet.

Vervolgens typ ik de data in deze reeks handmatig in (1-1-2022, 2-1-2022, etc.) dus NIET met een formule (=a439+1) en ook dat helpt niet.

Ik snap er geen sikkel meer van.
 
Laatst bewerkt:
Plaats dan het bestand eens
 
Exotische opmaak kan beter gevonden worden met Match.
Code:
Sub Test()
 Set bdatum = Cells(Application.Match(CLng(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), Worksheets(1).Range("A1:A10"), 0), 1)
 If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub
 
@HSV - deze code met Match geef inderdaad wel een waarde terug, maar eentje die ver boven de range ligt

Code:
Sub Test()
 Set bdatum = Cells(Application.Match(CLng(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), Worksheets("Random").Range("A439:A446"), 0), 1)
 If bdatum Is Nothing Then MsgBox "niet gevonden" Else MsgBox bdatum
End Sub

Ik krijg nu als resultaat de waarde uit cel A1. Terwijl er eigenlijk gezocht moet worden in A439:A446
 
Even anders.
Code:
Sub Test()
With Sheets("random")
 Set bdatum = .Cells(Application.Match(CLng(Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)), .Range("[COLOR=#3E3E3E] A439:A446[/COLOR]"), 0), 1)
 If bdatum Is Nothing Then MsgBox "niet gevonden" Else Application.Goto bdatum
End With
End Sub

Beter, mocht je eens op annuleren klikken.
Code:
Sub Test()
With Sheets("random")
datum = Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)
  If datum Then
   Set bdatum = .Cells(Application.Match(CLng(datum), .Range("A1:A10"), 0), 1)
   If bdatum Is Nothing Then MsgBox "niet gevonden" Else Application.Goto bdatum
  End If
End With
End Sub
 
Laatst bewerkt:
Kan het originele bestand niet sturen, is veel te groot en zit vol met allerlei dingen die opstarten bij openen, verwijzingen, etc.
Maar heb het tabblad waar dit probleem speelt apart opgeslagen, en de codes hierboven besproken bijgevoegd.
Hoop dat attachment goed is gelukt..
 

Bijlagen

Test het maar eens weer.
Code:
Sub Test()
With Sheets("stroomverbruik")
datum = Application.InputBox("title", "title2", FormatDateTime(Date, vbShortDate), Type:=1)
  If datum Then
   bdatum = Application.Match(CLng(datum), .Columns(1), 0)
   If IsNumeric(bdatum) Then Application.Goto .cells(bdatum,1) Else MsgBox "niet gevonden"
  End If
End With
End Sub
 
Laatst bewerkt:
Super! Dit werkt! Dank.
Enig idee waarom het op de andere manier niet werkte in dit bestand, maar wel in testbestandje..?

Deze code geeft als resultaat dat het vakje met de gezochte datum wordt geselecteerd (Goto)
Hoe kan ik met deze code als resultaat niet "Goto.Cell" gaan maar de celnaam gebruiken? (bijv. "A3")

Het ingeven van deze datum is de begindatum van een te definiëren naam voor opstelling grafiek.
 
Hiermee geef je een naam aan de cel.
Code:
 If IsNumeric(bdatum) Then .Cells(bdatum, 1).Name = "Boerlo" Else MsgBox "niet gevonden"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan