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

spreadsheetfunctie uit Analysis Toolpack gebruiken in VBA

Status
Niet open voor verdere reacties.

AndreXL

Gebruiker
Lid geworden
1 jan 2008
Berichten
33
Beste forumlezer,

Voor een controle of een cijferreeks in een string een geldige dag/maand/jaar component bevat en dus te converteren is als datum, ben ik op zoek naar de VBA tegenhanger van de LAATSTE.DAG of EOMONTH formule uit de Analysis Toolpack (Daar komt deze formule namelijk vandaan). Bij een standaard formule kun je gewoon Application.Spreadsheetfunction.[naam van de functie] gebruiken, maar bij de EOMONTH kan dit dus niet, ondanks dat de analysis toolpack standaard wordt meegeleverd met Excel.

Groet,

Andre
 
Geef eens een voorbeeld van een situatie, dus een paar strings om te checken, en ook hoe je checkt. Dat denk ik dat je met een kleine functie zelf wel die check kunnen schrijven. En niet meer die functie gebruiken.
 
Zie ook eens even op mijn site, www.wimgielis.be, dan naar Excel, dan naar Voorbeeldbestanden, dan naar "Analysis Toolpak zonder Analysis Toolpak". Wellicht staat er daar ook al info.

Wigi
 
AndreXL, Ik leerde laatst een leuke van Finch. Namelijk dat Excel 'dag nul' herkent als de laatste dag van de maand. Als voorbeeld: In cel A2 staat de huidige datum (of zoiets); in cel B2 staat dan deze formule
Code:
=DATE(YEAR(A2);MONTH(A2)+1;DAY(0))
NL: =DATUM(JAAR(A2);MAAND(A2)+1;DAG(0))
Ook in VBA kan je deze truuk gebruiken. Lees maar 'ns door deze topic waarin het uitgelegd wordt.

Groet, Leo
 
Laatst bewerkt:
AndreXL, Ik leerde laatst een leuke van Finch. Namelijk dat Excel 'dag nul' herkent als de laatste dag van de maand. Als voorbeeld: In cel A2 staat de huidige datum (of zoiets); in cel B2 staat dan deze formule
Code:
=DATE(YEAR(A2);MONTH(A2)+1;DAY(0))
NL: =DATUM(JAAR(A2);MAAND(A2)+1;DAG(0))
Ook in VBA kan je deze truuk gebruiken. Lees maar 'ns door deze topic waarin het uitgelegd wordt.

Groet, Leo


Leuk dat je die onthouden hebt. Om helemaal correct te zijn moet het wel worden:
Namelijk dat Excel 'dag nul' herkent als de laatste dag van de vorige maand.

BTW: je hoeft ook niet te werken met de constructie dag(0), gewoon 0 volstaat.
 
Laatst bewerkt:
Wim,
Bedankt voor je link. Ik ben nieuw hier, maar niet onkundig in Excel.
De bedoeling van mijn vraag is om uit een geimporteerde tekst, een datum met notatie 22022008 om te zetten naar de datum 22-2-2008. Echter kan er in een tekststring ook een getal staan wat niet direct een datum is. Iets als 23282992 is duidelijk geen datum. Maar hak je hem op in 23 als dag 28 als maand en 2992 als jaar, dan converteert excel deze netjes naar 23-4-2994. Hiervoor wilde ik dus een extra check inbouwen, maar had de EOMONTH functie nodig om ook te controleren of de dagwaarde niet boven de normale 28,29,30 of 31 dagen komt.
Jouw bestand bracht me op de goede weg en geeft me zelfs een betere of kortere uitkomst, die ik echter wel iets heb moeten aanpassen.

In jouw bestand staat bij Laatste.Dag (EOMONTH) de formule =DATE(YEAR(K1);MONTH(K1)+1+1;0)
Nu staat er in K1 6-7-2007, en zou de formule dus 31-7-2007 moeten opleveren. Hij levert echter 31-8-2007 op. Dit komt doordat +1+1 dus 2 maanden bij de huidige maand wordt opgeteld, waarbij met de 0 factor, er weer 1 dag wordt teruggesprongen . Met 1x +1 doet de formule het echter wel goed.

Ik had het inmiddels opgelost met een geschreven functie:

Function EOMonth2(Refdate As Date, Optional Mnts As Integer)
Dim i As Integer
Dim yr As Integer
Dim mnth As Integer
Dim chkdate As Date
yr = Year(Refdate)
mnth = Month(Refdate) + Mnts
For i = 28 To 32
chkdate = DateSerial(yr, mnth, i)
If Month(chkdate) > mnth Then
EOMonth2 = i - 1
Exit For
End If
Next
End Function

De functie geeft mij de laatste dag van de maand.

Bedankt voor de hulp. Topic gaat op afgehandeld.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan