Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VBA Excel 2007] Zoeken op datum *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,
ik zou graag in VBA Excel het volgende doen:

in mijn blad staat er een knop met onderstaande code (LijstZaal1). Als ik daarop druk moet er in D1 "DAGPLANNING HD1" komen (done) en moet er in de cel J1 telkens een zaalnummer staan. Dit zaalnummer staat in dezelde werkmap maar op een ander blad ("jan-mei"). In "jan-mei" staat het als volgt: rij A = datum, rij B = weeknummer, rij C = acute zaal. Dus moet ik werken met een offset, wat ik ook gedaan heb. Nu zit ik toch al 2 avonden te sukkelen met onderstaande code, 't wil gewoon niet werken |:(

Is er soms een VBA "specialist" die dit eenvoudige probleem zou kunnen oplossen aub? :$

De code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub LijstZaal1() 'Aanmaken van de macro voor de lijst van zaal 1.

Dim strDatum As String
Dim intAcuteZaal As Integer
Dim rngBereik As Range

'Werkblad "front" activeren. (niet echt nodig, ...)
Sheets("front").Activate
'Titel in de cel D1 zetten.
Range("D1").Value = "DAGPLANNING HD1"
'Datum uit de cel A1 halen.
strDatum = Day(Range("A1").Value) & "/" & Month(Range("A1").Value)
'Sheet "jan-mei" activeren en er de acute zaal uithalen.
Sheets("jan-mei").Activate


Set rngBereik = Cells.Find(What:=CDate(strDatum), After:="A1", LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate
        
ActiveCell.Offset(2, 0).Value = CStr(intAcuteZaal)
Sheets("front").Activate
Range("J1") = intAcuteZaal


End Sub


Of moet dit nog anders gedaan worden? Misschien met VERT. ZOEKEN maar ik weet niet of dat kan in een bereik etc.

Alle hulp is welkom! _/-\o_
Mvg,
N.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
PRG >> OFF

En doe even een TR ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif ) voor een degelijke topictitel a.u.b. ;) Daarbij wil ik je er even op wijzen dat we hier uit principe niet doen aan "Is er iemand die dit zou kunnen oplossen aub?". We wijzen je in de juiste richting maar voorkauwen en kant-en-klaar oplossingen doen we niet aan. We zijn geen afhaalchinees ;)

[ Voor 51% gewijzigd door RobIII op 19-10-2008 19:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op zondag 19 oktober 2008 @ 19:06:
Waar hoort mijn topic?
PRG >> OFF

En doe even een TR ( [afbeelding] ) voor een degelijke topictitel a.u.b. ;) Daarbij wil ik je er even op wijzen dat we hier uit principe niet doen aan "Is er iemand die dit zou kunnen oplossen aub?". We wijzen je in de juiste richting maar voorkauwen en kant-en-klaar oplossingen doen we niet aan. We zijn geen afhaalchinees ;)
Ik heb inderdaad vergeten m'n topictitel in te vullen, maar ik kan het zo te zien niet meer editen.
Ook zei ik dat alle hulp welkom is, misschien was ook de zin "Is er iemand die dit zou kunnen oplossen aub?" wat slecht geformuleerd.

Nuja goed, iemand die wel een helpend antwoord heeft? ;)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zondag 19 oktober 2008 @ 19:13:
[...]

Ik heb inderdaad vergeten m'n topictitel in te vullen, maar ik kan het zo te zien niet meer editen.
Klopt, daar is die TR voor ;) ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif, bovenaan de pagina; zie ook Schop een Modje richtlijnen)

[ Voor 24% gewijzigd door RobIII op 19-10-2008 20:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op zondag 19 oktober 2008 @ 20:08:
[...]

Klopt, daar is die TR voor ;) ( [afbeelding], bovenaan de pagina; zie ook Schop een Modje richtlijnen)
Zo, done!
Bedankt en sorry, ben nieuw hier B)
Moge de VBA-related antwoorden nu snel komen :P

[ Voor 6% gewijzigd door Verwijderd op 19-10-2008 20:30 ]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Waarom met VBA? Volgens mij kan dit best met een 'gewone' zoek-functie in Excel.

Als VBA: waar loop je vast / wat gaat er fout / welke melding krijg je (en waar?)

Maar ik denk dat het fout gaat bij de dataformaten. Begin met het niet steeds van datum naar string en weer terug te gaan met strDatum. Verder wil je intAcuteZaal gebruiken voor je hem op een waarde zet. Gaat niet werken ;)

Los daarvan: staat je offset wel goed? Ik zou aan (0,2) denken.

En welkom :Y)

Als het allemaal straks werkt: bouw het om z.d.d. je helemaal geen activate / ActiveSheet / ActiveCell meer gebruikt. Dat is in een 'productie'-omgeving vragen om fouten. Je zet keurig de variabele rngBereik maar gebruikt 'em helemaal niet.

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


Verwijderd

Topicstarter
F_J_K schreef op zondag 19 oktober 2008 @ 21:21:
Waarom met VBA? Volgens mij kan dit best met een 'gewone' zoek-functie in Excel.

Als VBA: waar loop je vast / wat gaat er fout / welke melding krijg je (en waar?)

Maar ik denk dat het fout gaat bij de dataformaten. Begin met het niet steeds van datum naar string en weer terug te gaan met strDatum. Verder wil je intAcuteZaal gebruiken voor je hem op een waarde zet. Gaat niet werken ;)

Los daarvan: staat je offset wel goed? Ik zou aan (0,2) denken.

En welkom :Y)

Als het allemaal straks werkt: bouw het om z.d.d. je helemaal geen activate / ActiveSheet / ActiveCell meer gebruikt. Dat is in een 'productie'-omgeving vragen om fouten. Je zet keurig de variabele rngBereik maar gebruikt 'em helemaal niet.
Ik dacht in VBA misschien met een do-while-loop (weet wel niet precies hoe dit moet)? Met het gewone VERT. ZOEKEN lukt het mijns inziens niet omdat er moet gezocht worden in een bereik, en niet in 1 cel. Daarom ook weer die do-while-loop.

In VBA krijg ik inderdaad errors à la "types komen niet overeen" etc. De datum staat in mijn ene sheet (front) als 15/12/2006 en als ik de functie Month(Range("A1")) gebruik, dan geeft hij "dec" weer.

Qua offset zou het inderdaad (0,2) moeten zijn, maar dit is nog niet van toepassing, eerst moet het "zoeken" lukken :*)

Ook bedankt voor het antwoord en de welkomst :D

Zo ziet het er uit op blad "jan-mei"

Afbeeldingslocatie: http://i50.photobucket.com/albums/f325/a2bass/excel.jpg

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Het bereik waarbinnen moet worden gezocht is een parameter van vert.zoeken. Maar je wilt zo te zien de boel nog ombouwen z.d.d. een zaal maar eenmaal kan voorkomen, dat gaat in formules inderdaad lastiger.

De datums wil je 'onder de motorkap' overal gelijk schrijven: als datum. Een andere weergave voor beeld/print kan je dan regelen met de celeigenschappen. Dat scheelt een aantal geforceerde conversieslagen.

Er is afaik geen reden om niet te kunnen zoeken op datums, maar eerlijk gezegd heb ik in VBA/Excel geen ervaring daarmee (en kan nu ook niet gaan kijken :+ ). Maak het jezelf makkelijk door eerst een hele simpele zoekopdracht te doen met voorbeelddata (begin bijv. met code zoals in F1 staat en vaste velden van hetzelfde formaat: (A2:A10) = (1-1-2008; 2-2-2008;etc). Als dat werkt kan je het omzetten naar wat je zoekt.

[ Voor 5% gewijzigd door F_J_K op 20-10-2008 08:40 ]

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


Verwijderd

Topicstarter
Vandaag heb ik het volgende eens geprobeerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
'Werkblad "front" activeren. (niet echt nodig, ...)
Sheets("front").Activate
'Titel in de cel D1 zetten.
Range("D1").Value = "DAGPLANNING HD1"
'Datum uit de cel A1 halen.
strDatum = Day(Range("A1").Value) & "/" & Month(Range("A1").Value)
'Sheet "jan-mei" activeren en er de acute zaal uithalen.
Sheets("jan-mei").Activate

Do Until Range("E1", "EX1").Value = strDatum
ActiveCell.Copy Destination:=front.Range("J1")
Loop
...


Ik krijg nu een error "Types komen niet overeen".
Mijn strDatum heeft als vorm "5/jan" en niet "5/1" zoals het in het blad "jan-mei" staat. Hoe maak ik Excel duidelijk dat het met cijfers moet en niet met jan, feb, ...:? Als dit zou lukken, zou mijn code ook moeten lukken denk ik B)

Mvg,
N. :w

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zoals gezegd: het juiste datatype aanhouden. Dus geen String maar Date. En geen Day() of Month(). Of, doe alles als string (incl in de cellen) maar dat maakt het zoeken onzinnig (behalve als er een precieze hit is).

Wat zou die loop trouwens moeten doen?

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


  • -JeeDee-
  • Registratie: November 2007
  • Laatst online: 24-02 13:56
Datum is op te lossen door rechtermuisknop celeigenschappen en dan tekst te selecteren.
Misschien kun je daar ook een regel van maken?

Verwijderd

Topicstarter
F_J_K schreef op maandag 20 oktober 2008 @ 22:46:
Zoals gezegd: het juiste datatype aanhouden. Dus geen String maar Date. En geen Day() of Month(). Of, doe alles als string (incl in de cellen) maar dat maakt het zoeken onzinnig (behalve als er een precieze hit is).

Wat zou die loop trouwens moeten doen?
Volgens mij kan ik niet anders dan Month() en Day() gebruiken, ik geef mijn datum in als "15/01/2006" en de 15/01 moet gebruikt worden. Die loop zou er moeten voor zorgen dat er gezocht wordt in de range "E1:EX1" en als de cel die wordt bekeken niet gelijk is aan de datum moet hij naar de volgende cel springen tot de datum wel gevonden is, en dan met offset, ... :?
-JeeDee- schreef op maandag 20 oktober 2008 @ 22:51:
Datum is op te lossen door rechtermuisknop celeigenschappen en dan tekst te selecteren.
Misschien kun je daar ook een regel van maken?
Dit was alreeds ingesteld als "tekst", toch bedankt :)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ik snap er eerlijk gezegd niets van. Het enige wat ik er uit op kan maken is dat je een datum in A1 op wilt zoeken in het bereik E1:EX1 en vervolgens de waarde wilt ophalen in dezelfde kolom twee rijen lager. Dat is exact waar horizontaal zoeken voor is bedoeld?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

wat Lustrucru zegt, je hebt horizontaal zoeken nodig. bovendien is de te vinden waarde geen datum maar een combinatie van dag, scheidingsteken en maand (een gewone tekststring maw).
je dient de zoekwaarde aan te passen aan de te vinden waarde om resultaat te hebben uiteraard. dus dit zal dan iets worden als :
code:
1
=HORIZ.ZOEKEN(dag(datumbroncelfront) & "/" & maand(datumbroncelfront);E1:EX1;1;ONWAAR)

Verwijderd

Topicstarter
Bedankt voor jullie hulp, ik heb nu volgende code ingevoegd in de cel J1 in het blad "front"

code:
1
=HORIZ.ZOEKEN(DAG(A1) & "/" & MAAND(A1);'jan-mei'!E1:EX1;1;ONWAAR)


Maar nu verkrijg ik de error #N/B, en de help maakt me ook al niet veel wijzer :X |:(

Verwijderd

de functie horiz.zoeken is maar een deel van de oplossing, aangezien je ook een offset nodig hebt.
de fout die de formule nu genereert wijst erop dat de te vinden waarde niet juist wordt samengesteld of dat de zoekmatrix toch datumvelden zijn, ondanks de uitlijning aan de linkerkant, terwijl voor datums de standaarduitlijning in een cel aan de rechterkant is.
voor 15/1 zal je aihgb als resultaat acutezaal 3 moeten bekomen, voor 16/1 az 2.
formule als de zoekmatrix met datumwaardes effectief een datum zijn & cel a1 ook effectief een datum is
code:
1
=verschuiven(jan-mei'!E1;2;vergelijken(A1;'jan-mei'!E1:EX1;0)-1)
formule als de zoekmatrix tekst is, zoals het er op het eerste zicht op lijkt, en waarde a1 is een effectieve datum:
code:
1
=verschuiven(jan-mei'!E1;2;vergelijken(dag(A1) & "/" & maand(A1);'jan-mei'!E1:EX1;0)-1)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op dinsdag 21 oktober 2008 @ 23:38:
de functie horiz.zoeken is maar een deel van de oplossing, aangezien je ook een offset nodig hebt.
Die zit in h.zoeken ingebakken, net als in v.zoeken, toch?
voor 15/1 zal je aihgb als resultaat acutezaal 3 moeten bekomen, voor 16/1 az 2.
code:
1
=HORIZ.ZOEKEN(A1;E1:EX3;3;0)


offtopic:
WTF is een acute zaal?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

juist, horizontally speaking kan je links-rechts zoeken en dan naar beneden springen als je de bijkomende rijen opneemt in de zoekmatrix zoals je in je laatste post doet. zat teveel in het meer traditionele verticaal zoeken en naar rechts verspringen patroon.
Pagina: 1