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

Zelf functies schrijven

Status
Niet open voor verdere reacties.

MayNiak666

Gebruiker
Lid geworden
6 jan 2003
Berichten
234
Stel, ik wil een functie "Weeknummer()", die op dezelfde manier werkt als "Vandaag()". Dus een functie die altijd herberekend wordt en die je geen argument hoeft mee te geven. Ik heb ooit eens ergens gelezen, misschien zelfs wel op dit forum, dat je dan zelf een functie in VBA kunt schrijven, en dat je die functie dan op een werkblad kunt aanroepen. Ik kan nergens meer vinden hoe dat moet. Wie helpt me?
 
Als je Analysis Toolpak installeerd zit de functie van weeknummer er al in. Zet een datum in cel A2 en deze
=weeknummer(A2) code in cel A1 en weeknummers komen vanzelf.
 
Okay, dat is een optie, maar stel dat ik zelf een functie wil schrijven die ik in een werkblad wil gebruiken. Hoe doe ik dat dan?
 
Precies weet ik het ook niet, maar je zou iets als dit kunnen doen.
Onderstaande plaats je in een module.
Public Function OmzettenDatumNaarGetal(MDatum As Date)
Dim varDat As Variant
varDat = Format(MDatum, "yyyymmdd")
varDat = 1 * varDat
OmzettenDatumNaarGetal = varDat
End Function
En als je onderstaande in bv. cel a2 zet, en je voert nu een datum in, in cel a3, wordt de datum geconverteerd naar
20030714.
=OmzettenDatumNaarGetal(A3)
Voor verdere info zou je hier eens kunnen kijken. Succes
 
Het lijkt er op dat dat is wat ik bedoel. Maar moet ik dan de code in een module zetten, of in "ThisWorkbook"?
 
Hoi May,

Een beetje late reactie, maar waarom een functie en geen formule?

A6 =ALS(B6="";"";ALS(JAAR(B6)<>JAAR(B6+7);1;GEHEEL((B6-(DATUM(JAAR(B6);1;1)-WEEKDAG(DATUM(JAAR(B6);1;1))+2))/7+1)))

Waarin B6 de datum is en A6 het weeknummer. Met deze formule van 1 januari altijd in week 1

Jeroen
 

Bijlagen

Beste Jeroen,

De formule voor weeknummer had ik zelf al uitgevogeld, desalniettemin bedankt voor je suggestie :thumb:. Het gaat mij erom de diepere mogelijkheden van Excel te ontdekken. Ik had eerder op dit forum eens iets gezien (of een verwijzing naar een website) over hoe je zelf funties in een werkblad kunt definieren. Het is nogal eens handig als je zelf een functie kunt definieren, omdat je in Excel maar een aantal keer een formule kunt nesten, ik dacht 7 keer. In de formule van weeknummer zijn al een aantal formules genest. Als je daar dan nog iets mee wilt berekenen, hou je weinig ruimte over. Bovendien bevordert het de leesbaarheid enorm!
 
Beste Jeroen, domme vragen bestaan niet, anders had dit er één geweest: kun je voor mij die formule begrijpelijk uiteen zetten? Ik begrijp hem namelijk niet... :o
 
Hoi,

Het is een formule die ik gebruikte in het programmaatje dat ik ge-upload had.
A6 =ALS(B6="";"";ALS(JAAR(B6)<>JAAR(B6+7);1;GEHEEL((B6-(DATUM(JAAR(B6);1;1)-WEEKDAG(DATUM(JAAR(B6);1;1))+2))/7+1)))

ALS(JAAR(B6)<>JAAR(B6+7);1;
In kolom b staat de maandag, als de maandag + 7 een ander jaar is dan de maandag voor 1 januari dan zitten we in week 1.

(B6-(DATUM(JAAR(B6);1;1)
Datum (jaar(b6);1;1)= 1 januari, B6-1 januari is het aantal dagen dat in het betreffende jaar verstreken is.

WEEKDAG(DATUM(JAAR(B6);1;1))+2)
Is een correctie omdat 1 januari niet altijd op een maandag valt.

Dit geheel delen we door 7, en daar komt een aantal weken uit. Omdat in deze formule 1 januari in week 0 valt tellen we er nog 1 weel bij op.

De formule kan mogelijk eenvoudiger maar hij werkt wel.

Jeroen
 
Hoi May,

Nog even over het maken van functies.

Heel eenvoudig, Je start een macro en je voert ongeveer uit wat je met de macro wil bereiken. Als je klaar bent stop je de opname van de macro en ga je dezelfde macro bewerken. De programmacode even kopieren en in de gewenste functie in een module plaatsen. Werkt heel eenvoudig en je leert er zeer snel van.

Jeroen
 
Bedankt voor je uitleg, ik ga er nog eens even rustig voor zitten!

GRTZ
 
Inmiddels heb ik de functie voor weeknummer in vba gemaakt en in een module geplaatst. In een willekeurige cel kan ik nu =Weeknr() plaatsen, en dan krijg ik in die cel keurig netjes het correcte weeknummer te zien. Voor belangstellenden hier de code:

Function Weeknr() As Date
VorigJaar = Year(Date) - 1
EVJ = DateSerial(VorigJaar, 12, 31)
Weeknr = DateDiff("ww", EVJ, Date, vbMonday, vbFirstFourDays) + 1
End Function

Deze dus in een module plaatsen en klaar is Kees...
 
Ondanks dat de vaag opgelost is/was, toch nog een kleine toevoeging, voor degene die het ooit wil gaan gebruiken:

Function Weeknr() As Date
Application.Volatile
VorigJaar = Year(Date) - 1
EVJ = DateSerial(VorigJaar, 12, 31)
Weeknr = DateDiff("ww", EVJ, Date, vbMonday, vbFirstFourDays) + 1
End Function

Deze toevoeging zorgt er voor dat de functie altijd herberekend wordt bij het openen van de werkmap...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan