Израчунајте број радних дана између два датума користећи ВБА у Мицрософт Екцелу

Anonim

У овом ћемо чланку створити Кориснички дефинирану функцију (УДФ) за бројање броја радних дана између наведених датума, укључујући или искључујући суботе и недјеље као слободне седмице.

Сирови подаци за овај пример састоје се од датума почетка и датума завршетка. Желимо да бројимо радне дане између ових датума.

Навели смо датуме празника у колони А у листу „Празници“.

Екцел има уграђену функцију НЕТВОРКДАИС за бројање броја радних дана између интервала.

Синтакса функције НЕТВОРКДАИС

НЕТВОРКДАИС (СтартДате, ЕндДате, [Холидаис])

Ова функција ће изузети датум наведен на листи празника, док ће рачунати број радних дана.

Ова функција подразумевано сматра суботу и недељу слободним недељама, тако да не можемо да бројимо број радних дана, у случају да имамо само једну недељу одмора.

Направили смо прилагођену функцију „ЦоунтВоркингДаис“ за бројање броја радних дана између интервала. Ова прилагођена функција рјешава проблем функције НЕТВОРКДАИС. У овој функцији можемо рачунати број радних дана чак и ако је субота или недеља слободна само једна недеља.

Синтакса прилагођене функције

ЦоунтВоркингДаис (СтартДате, ЕндДате, ИнцлСатурдаис, ИнцлСундаис)

ИнцлСатурдаис и ИнцлСундаис су опционални параметри. Подразумевано, оба имају ТРУЕ вредности. Да бисте суботе и недеље променили у радне дане, промените вредност одговарајућег параметра на ФАЛСЕ.

Мицрософт је представио функцију НЕТВОРКДАИС.ИНТЛ са програмом Екцел 2010. Ова функција решава проблем функције НЕТВОРКДАИС. У овој функцији можемо одредити слободне дане. Можемо одредити један или два дана као слободну седмицу.

Синтакса функције НЕТВОРКДАИС.ИНТЛ

НЕТВОРКДАИС.ИНТЛ (датум почетка, датум завршетка, [викенд], [празници])

У параметру викенда можемо навести слободне дане.

У овом примеру ћемо користити све три горе наведене функције за бројање броја радних дана.

Логичко објашњење

У функцији „ЦоунтВоркингДаис“ прво проверавамо да ли дати датум у параметру постоји на наведеној листи празника. Ако датум постоји на листи празника, онда се тај дан не рачуна у број радних дана. Ако датум не постоји на листи празника, проверите да ли је датум субота или недеља. На основу наведеног улазног параметра, проверите да ли да укључите или искључите суботу или недељу као празник.

Објашњење кода

Сет РнгФинд = Ворксхеетс ("Холидаис"). Цолумнс (1). Финд (и)

Горњи код се користи за проналажење локације на којој наведени датум постоји на листи празника.

Ако није, онда РнгФинд није ништа

ГоТо ФорЛаст

Крај Ако

Горњи код се користи за проверу да ли наведени датум постоји на листи празника. Ако се услов врати ТРУЕ, тај дан се не рачуна у број радних дана.

Молимо следите доле за код

 Опција Експлицитна функција ЦоунтВоркингДаис (СтартДате Ас Лонг, ЕндДате Ас Лонг, Оптионал ИнцлСатурдаис Ас Боолеан = Труе, _ Оптионал ИнцлСундаис Ас Боолеан = Труе) 'Декларисање променљивих Дим РнгФинд Ас Ранге Дим и Ас Лонг Фор и = СтартДате То ЕндДате Он Еррор Ресуме Нект' Проналажење локације на којој постоји наведени датум у табели за празнике Поставите РнгФинд = Радне листове ("Празници"). Колоне (1). Пронађи (и) Он Еррор ГоТо 0 'Провера да ли је празник на дати датум Ако није РнгФинд није ништа Затим Иди на ФорЛаст Енд Иф 'Проверавам да ли је субота на дати датум Иф ИнцлСатурдаис Тхен Иф Веекдаи (и, 2) = 6 Тхен ГоТо ФорЛаст Енд Иф Енд Иф' Проверавам да ли је недеља на наведени датум Иф ИнцлСундаис Тхен Иф Веекдаи (и, 2) = 7 Затим идите на ФорЛаст Енд Иф Енд Иф ЦоунтВоркингДаис = ЦоунтВоркингДаис + 1 ФорЛаст: Нект Енд Функција 

Ако вам се допао овај блог, поделите га са пријатељима на Фацебооку. Такође, можете нас пратити на Твиттер -у и Фацебоок -у.

Волели бисмо да чујемо од вас, јавите нам како можемо побољшати наш рад и учинити га бољим за вас. Пишите нам на веб локацији е -поште