Страницы: 1
RSS
[VBA] возвращение результата расчета формулы в ComboBox
 
Добрый день.
Заголовок может быть немного не понятен ). Интересует следующее: возможно ли, не пользуясь для расчета ячейками Excel, высчитать и вывести в comboBox (при запуске формы) уже конечный результат формулы, например такой как: =СЕГОДНЯ()?

т.е. запустил форму, и в comboBox уже стоит дата 09.05.2013? но рассчитать не прибегая к помощи экселя, так сказать "в уме"?


всех с Праздником!
caustic
 
Me.ComboBox1.Value = Date
 
как вариант, хороший. спасибо :)
caustic
 
А Вы надеялись получить более простой "каквариант"?  :)
 
надеялся что ответ даст мне понять, могу ли я в comboBox вывести номер текущей недели, используя формулу:
Код
=1+ЦЕЛОЕ((A2-ДАТА(ГОД(A2+4-ДЕНЬНЕД(A2+6));1;5)+ДЕНЬНЕД(ДАТА(ГОД(A2+4-ДЕНЬНЕД(A2+6));1;3)))/7)-1


где A2 - это сегодняшняя дата
caustic
 
Код
x = DateDiff("ww", DateSerial(Year(Date), 1, 1), Date, vbMonday)
 
Юрий М, работает :) спасибо
caustic
 
Цитата
Юрий М пишет:
Код
 x = DateDiff("ww", DateSerial(Year(Date), 1, 1), Date, vbMonday) 
Данная формула врёт и не краснеет на некоторых годах (например, 2020). Не говоря уже о том, что ТС требуется номер недели по ГОСТ ИСО 8601-2001.

Впрочем, для 2007 и выше - достаточно использовать
Код
=НОМНЕДЕЛИ(A2;21)
или
Код
x = WorksheetFunction.WeekNum([A2], 21)
Изменено: AndreTM - 09.05.2013 19:06:39
 
Цитата
AndreTM пишет:
ТС требуется номер недели по ГОСТ ИСО 8601-2001.
Это где Вы увидели? А про номер недели (первый) - разговор особый - и обсуждений тут было уже множество))
 
AndreTM, спасибо. в принципе как я и понимал, лучше использовать эксельный расчет, а в сомбобокс выводить значение :)
caustic
 
Цитата
Юрий М пишет: Это где Вы увидели?
Цитата
caustic пишет: используя формулу:
Код
 =1+ЦЕЛОЕ((A2-ДАТА(ГОД(A2+4-ДЕНЬНЕД(A2+6));1;5)+ДЕНЬНЕД(ДАТА(ГОД(A2+4-ДЕНЬНЕД(A2+6));1;3)))/7)-1 
где A2 - это сегодняшняя дата
Дополнить?  :)
 
Кстати,
Цитата
AndreTM пишет:
x = WorksheetFunction.WeekNum([A2], 21)
что за аргумент 21?
 
А что дополнить? Читаю стартовое сообщение - нигде про ГОСТ ни слова)) Хотя, понятно, что НАМ в РФ требуется...
 
Цитата
Юрий М пишет:
А что дополнить? Читаю стартовое сообщение - нигде про ГОСТ ни слова)) Хотя, понятно, что НАМ в РФ требуется...
А по использованной формуле не видно?  :)  
Цитата
Юрий М пишет:
Кстати, ...что за аргумент 21?
Снова текущее обсуждение
Изменено: AndreTM - 09.05.2013 19:37:58
 
Да зачем мне ссылки - 21 что у Вас означает?
1 Week begins on Sunday.
2 Week begins on Monday.
А 21 что?
 
Цитата
Юрий М пишет: 21 что у Вас означает?
То самое и означает, что в описании функции НОМНЕДЕЛИ (WEEKNUM) для нынешних Офисов и написано - "соответствие европейским требованиям - неделя начинается с понедельника, а первая неделя года имеет не менее четырех дней, и при этом (при неполной неделе) попадающие в неё дни предыдущего года учитываются в текущем году..."
 
Я про то, что мой 2007 не воспринимает 21. Вот я и спрашиваю: 1 - неделя начинается с воскресенья, 2 - с понедельника. А 21 - что такое?
 
Ага, извиняюсь... Наверное, соврал всё же я.
НОМНЕДЕЛИ(<>;21) работает корректно только начиная с 2010.
21 - это совместное использование (vbMonday;vbFirstFourDays) для "старых" функций. Той же РАЗНДАТ().
Ну и вышеприведённая ссылка - это попытка снова сделать короткую формулу вычисления номера недели для всех нынешних версий офиса одновременно.  :)
Изменено: AndreTM - 09.05.2013 19:43:22
 
Цитата
Юрий М пишет: ... А 21 - что такое?
И об ЭТОМ спрашивает Юрий_М?!!
А система 2 - это когда в первую неделю попадает первый четерг, т.е. нормальная первая неделя... ;)
Изменено: Z - 09.05.2013 20:41:29
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Да нет у меня такого - 21. В 2010 началось, наверное)) А у меня 2003 и 2007
 
Цитата
AndreTM пишет:
=НОМНЕДЕЛИ(A2;21)

у меня 2010 офис и эта формула возвращает неправильную неделю - 19, хотя идет 18.
причем пробовал все варианты "понедельников", как у товарищаZ, на скриншоте.

пока правильную неделю возвращает формула из моего поста
caustic
 
Цитата
caustic пишет:
эта формула возвращает неправильную неделю - 19, хотя идет 18.
Смотрю на настенный календарь - неделя № 19.
 
Юрий М, да все верно. мой косяк. ;)
caustic
 
Я тут уже публиковал файлик с правильной нужной функцией - но повторюсь:
Код
Function ISOWeekNum(d As Date) As Long
    Dim d1 As Date, d2 As Date
    d2 = d - Weekday(d, vbMonday) + 4
    d1 = DateSerial(Year(d2), 1, 1)
    ISOWeekNum = (d2 - d1) \ 7 + 1
End Function
Изменено: AndreTM - 16.05.2013 04:46:06 (ошибка в функции)
 
Цитата
AndreTM пишет:
Я тут уже публиковал файлик с правильной нужной функцией
AndreTM, проверь функцию
вместо
d2 = d - Weekday(d, vbMonday) + 3
должно быть
d2 = d - Weekday(d, vbMonday) + 4

Еще как вариант:
Код
Function ISOWeekNum2(d As Date) As Long
    ISOWeekNum2 = (d + 5) \ 7 - DateSerial(Year(d - (d - 2) Mod 7 + 3), 1, 2) \ 7
End Function


или
Код
Function ISOWeekNum2(d As Date) As Long
    ISOWeekNum2 = (d + 5) \ 7 - DateSerial(Year(d - Weekday(d, vbMonday) + 4), 1, 2) \ 7
End Function
Изменено: MCH - 11.05.2013 08:21:01
 
MCH, ага, спасибо...
Страницы: 1
Читают тему
Наверх