Как да пресметна броя седмици и дни между две дати ?
Здравейте! Защо като се използва функцията weeknum за де се преброят седмиците от 25.03.2015г. до 24.01.2016г. броят им е 42, а реалният брой за 305 дни е 43 седмици и 4 дни?Как е по-точно да бъдат смятани?
Здравейте,
Благодаря Ви много за отговора. Разгледах предложената формула и с нея съвсем точно успях да определя броя на седмиците и дните и между други дати.
Здравейте, ето още едно решение за изчисляване на броя седмици и дни между две дати с функцията DATEDIF. Тази функция е включена за първи път в MS Office 2000, но досега не е документирана, т.е. не се показва в списъка на вградените функции, но работи и дава много точни резултати, но все пак имайте едно наум :-)
Моля да ме извините за не най-доброто изображение!
@Димитринка, да още един вариант за справяне с проблема ... даже бих казал по - удачен т.к. формулите изглеждат доста по семпли :) спрямо моята дълга формула :) въреки че ако се обединят в една клектка и твоята би била доста дълга :)
Краси, така е, няма как да се приложи само една функция. Създаването на т. нар. "мегафункции" , т.е. комбиниране на повече функции в една формула е много полезна възможност в Excel. А по-краткият вариант е да се създаде UDF
:-)
Здравейте,
Ето и един вариант за смятане на седмици и дни, който използвах преди доста години. Мисля, че е най-компактен като дължина на формулите. Лесно може и да се конкатенират стойностите в една клетка, в моя файл са по отделно.
Сега, като гледам горния коментар, май е добре да си добавя още един полезен UDF към колекцията то
Поздрави,
Здравейте,
Във връзка с горния коментар, намерих малко време и си направих един UDF за пресмятане на седмици и дни между две дати, и реших да го споделя с вас:
Public Function WD_DateDiff (Start_Date As Variant, End_Date As Variant, _
Optional Function_Type_1_or_2 As Integer = 1) As Variant
Dim FResult As Variant
Dim Week_Value As Integer
Dim Week_Value_trunc As Integer
Dim Day_Value As Integer
Select Case Function_Type_1_or_2
Case 1
GoTo Weeks_only
Case 2
GoTo Weeks_and_days
Case Else
GoTo Error_handler
End Select
Exit Function
'------------------------
Weeks_only:
FResult = (End_Date - Start_Date) / 7
WD_DateDiff = FResult
Exit Function
'------------------------
Weeks_and_days:
Week_Value = (End_Date - Start_Date) / 7
Week_Value_trunc = Int(Week_Value)
Day_Value = (Week_Value - Week_Value_trunc) * 7
Day_Value = Int(Day_Value)
FResult = Week_Value_trunc & " weeks and " & Day_Value & " days"
WD_DateDiff = FResult
Exit Function
'------------------------
Error_handler:
FResult = "#N/A"
WD_DateDiff = FResult
Exit Function
End Function
Всъщност, това е комбинация от две функции - при подаване на 1 като опционален аргумент изчислява само седмиците като десетична дроб, а при подаване на 2 като опционален аргумент изчислява едновременно седмици и дни и подава резултата във формат "13 weeks and 1 days".
Надявам се да го намерите за полезно.
Ще се радвам и ако някой от по-опитните колеги дадат своя коментар или предложение за корекция/подобрение.
Поздрави,
Миро
Често използвам различни UDF-и и разбира се забравям какви са аргументите и техния ред на въвеждане. Скоро разбрах за страхотен начин как да се подсетим за синтаксиса:
Здравейте Мирослав,
Тествах функцията, която предлагате, но тя не изчислява правилно дните, ако задам 2 за допълнителния аргумент (Function_Type_1_or_2 = 2), т.е. резултатът е винаги "X weeks and 0 days" - седмиците Х се изчисляват правилно.
Препоръчвам да направите следните промени:
1. Декларирате променливата
Dim Week_Value As Integer, а след това в процедурата
Week_Value_trunc = Int(Week_Value)
Day_Value = (Week_Value - Week_Value_trunc) * 7
Получава се (Week_Value - Week_Value_trunc) = 0 и оттук
Day_Value = 0.
Затова не се изчисляват оставащите дни.
2. След като променливата
Dim Week_Value As Integer,
е напълно излишна.
3. Аналогично и за променливата Day_Value
5. Горещо препоръчвам винаги, когато е възможно, да избягвате GOTO.
6. Достатъчно е в Select Case да включите как да се изчислява формулата, когато
липсва допълнителният аргумент или е 1, тогава ще изчислява само седмиците.
Когато допълнителният аргумент е 2, ще изчислява седмиците и дните. За всички останали случаи ще излиза #N/A.
7. По-добре е двата аргумента на функцията Start_Date, End_Date да бъдат декларирани като Date, а не Variant.
Надявам се, че коментарите ще Ви бъдат полезни!
Пишете, ако има нещо неясно.
Здравейте, намерих още един вариант за изчисление. Тук използвам само функцията ROUNDDOWN. Мисля, че резултата с тази формула е реален.
Също така функцията ROUNDDOWN може да се замени с функцията INT, която връща като резултат само целите числа. По този начин се избягва закръгляването, което понякога крие изненади :-)
Бих добавил че с всяка функция в Excel трябва да се внимава за изненади :)
Предложение от мен: Дано е това, което се търси! Лек ден и успехи!