Страницы: 1
RSS
Подсчет данных в конце недели для разн локалей
 
Есть у меня табличка с данными за период. Часть этих данных должна складываться  раз в неделю.
Пока я пробовал такую формулу:
Код
=IF(B13=(B13-WEEKDAY(B13,3)+6),SUMIFS(I7:I13,B7:B13,"<="&B13,B7:B13,">="&B13-6),"")

и всй было хорошо, пока не оказалось, что для америки надо WEEKDAY(B13,3)+6 заменить на WEEKDAY(B13,3)+5, а для Израиля WEEKDAY(B13,3)+4
что то у меня уже перегрев процессора, прошу помощи зала, можт формулу как то можно переписать, или подскажите как такой коэфициэнт макросом подобрать
примерчик прилагаю, формула в столбце L
Изменено: panix1111 - 07.01.2018 15:04:54
Мы в Екселе не работаем, мы в нём живём!
 
Читайте HKEY_CURRENT_USER\Control Panel\International\iFirstDayOfWeek
0 - понедельник 6- воскресенье
Естесвенно макросом.
К слову, может менять надо не 6 в  WEEKDAY(B13,3)+6, а 3?

Или я е правильно понял и надо автоматом учеть на разных листах независимо от региональных настроек?
Изменено: БМВ - 07.01.2018 16:06:02
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Или я е правильно понял и надо автоматом учеть на разных листах независимо от региональных настроек?
не, настройки в рамках книги будут какие то одни -те что у пользователя в системе, спасиб да посказку:
Скрытый текст
Мы в Екселе не работаем, мы в нём живём!
 
Мне кажется, что если приложение (любое) предназначено для конкретной страны, то мы не должны рассчитывать, что 100% пользователей будут иметь соответствующие региональные настройки.
Владимир
 

sokol92,и да и нет. Решать должен TC и из конкретной задачи . На вопростемы ответ конкретный

panix1111,

=IF(B13=(B13-WEEKDAY(B13,3)+6),SUMIFS(I7:I13,B7:B13,"<="&B13,B7:B13,">="&B13-6),"") я б заменил на

UDF
Код
Function GetLocalFirstDayOfWeek() As Integer
GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"). _
    GetStringValue &H80000001, "Control Panel\International", "iFirstDayOfWeek", GetLocalFirstDayOfWeek
End Function
или
Код
Function GetLocalFirstDayOfWeek() As Integer
GetLocalFirstDayOfWeek = CreateObject("WScript.Shell"). _
    RegRead("HKEY_CURRENT_USER\Control Panel\International\iFirstDayOfWeek")
End Function
И
=IF(B13=(B13-WEEKDAY(B13,11+GetLocalFirstDayOfWeek())+5, SUMIFS(I7:I13,B7:B13,"<="&B13,B7:B13,">="&B13-6),"")

Соглашусь, что если это будет отчет, то при одинаковых исходных будет разный результат, и чтоб этого небыло надо делать отдельный параметр настраиваемый для конкретной страны, что тоже не сложно.

По вопросам из тем форума, личку не читаю.
 
Уважаемый БМВ, я согласен с #5 - собственно, мое сообщение было адресовано автору темы.
Любопытный факт - функция VBA Weekday. в отличие от своего тезки - метода WorksheetFunction.Weekday знакома с региональными настройками. Тело Вашей функции из #5 можно записать и по-новогоднему:  :)
Код
GetLocalFirstDayOfWeek = 7 - Weekday(#12/31/2017#, vbUseSystemDayOfWeek)
Владимир
 
sokol92, то что ТС было адресовано, я понял. А я не люблю подобные #12/31/2017# константы в коде , толь дело по реестру пошарится:-), но в целом поддерживаю вариант с заменой на 1
Код
GetLocalFirstDayOfWeek = 7 - Weekday(1, vbUseSystemDayOfWeek)
:-)
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх