Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Расчет даты исключая периоды - Страница 3 - Мир MS Excel

Старая форма входа
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Расчет даты исключая периоды
Расчет даты исключая периоды
Pelena Дата: Суббота, 04.08.2012, 14:05 | Сообщение № 41
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
А Вы попробуйте перевести в числовой формат и всё увидите smile
При вычитании, кстати, это тоже надо учитывать
Quote (ALARMus)
доп. колонки G и H в которых формат ВРЕМЯ

Изменение формата не влияет на истинное значение в ячейке, которое принимает участие в вычислениях


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816


Сообщение отредактировал Pelena - Суббота, 04.08.2012, 14:07
 
Ответить
СообщениеА Вы попробуйте перевести в числовой формат и всё увидите smile
При вычитании, кстати, это тоже надо учитывать
Quote (ALARMus)
доп. колонки G и H в которых формат ВРЕМЯ

Изменение формата не влияет на истинное значение в ячейке, которое принимает участие в вычислениях

Автор - Pelena
Дата добавления - 04.08.2012 в 14:05
ALARMus Дата: Суббота, 04.08.2012, 14:14 | Сообщение № 42
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (Pelena)
Изменение формата не влияет на истинное значение в ячейке, которое принимает участие в вычислениях

Я понимаю, тогда истинное значение в ячейке Е1, в которой по формату(ЧЧ:ММ:СС) вдно только время "8:30:00" -> равно "00.01.1900 8:30:00" или это не так ?

Как же отнять от ячеек НАЧАЛО, например содержащую такое значение - "19.07.2012 10:26:41" ячейку E1 - "00.01.1900 8:30:00"? чтобы в расчетах учавствовали тоько часы:минуты:секунды - > 10:26:41-8:30:00=2:37:19

Так так покрутил, значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ ?


Сообщение отредактировал ALARMus - Суббота, 04.08.2012, 14:18
 
Ответить
Сообщение
Quote (Pelena)
Изменение формата не влияет на истинное значение в ячейке, которое принимает участие в вычислениях

Я понимаю, тогда истинное значение в ячейке Е1, в которой по формату(ЧЧ:ММ:СС) вдно только время "8:30:00" -> равно "00.01.1900 8:30:00" или это не так ?

Как же отнять от ячеек НАЧАЛО, например содержащую такое значение - "19.07.2012 10:26:41" ячейку E1 - "00.01.1900 8:30:00"? чтобы в расчетах учавствовали тоько часы:минуты:секунды - > 10:26:41-8:30:00=2:37:19

Так так покрутил, значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ ?

Автор - ALARMus
Дата добавления - 04.08.2012 в 14:14
Pelena Дата: Суббота, 04.08.2012, 14:19 | Сообщение № 43
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Я раньше уже написала, чтобы из даты выделить время, можно, как вариант, использовать формулу
Quote (Pelena)
ОСТАТ(E4;1)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ раньше уже написала, чтобы из даты выделить время, можно, как вариант, использовать формулу
Quote (Pelena)
ОСТАТ(E4;1)

Автор - Pelena
Дата добавления - 04.08.2012 в 14:19
Pelena Дата: Суббота, 04.08.2012, 14:21 | Сообщение № 44
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Quote (ALARMus)
значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ

Дата хранится в Excel в виде числа, у которого целая часть - это количество дней от 01.01.1900 до указанной даты, а дробная часть - это время (часть суток)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Quote (ALARMus)
значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ

Дата хранится в Excel в виде числа, у которого целая часть - это количество дней от 01.01.1900 до указанной даты, а дробная часть - это время (часть суток)

Автор - Pelena
Дата добавления - 04.08.2012 в 14:21
Gustav Дата: Суббота, 04.08.2012, 15:14 | Сообщение № 45
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2744
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (ALARMus)
Вы не обижайтесь (хотя ничего обидно не скажу), но Вам не хватает абстракции. (Не было может еще у Вас учебы в ВУЗе - техническом).

Эх, и даже аспирантура на энергомашиностроительном факультете... Неужели я так плохо "выгляжу"?? smile

Я чего спрашивал-то. Обычно как можно более полное знание контекста задачи позволяет включить и бОльшую фантазию и предложить заказчику вариант, о котором он и не подозревал.

Ну вот элементарный пример из моей рабочей практики. Приходит человек и просит внести изменения в формат текстового файла для загрузки. Причем очень подробно всё рассказывает, чувствуется, что думал основательно. Мне всё понятно, но тем не менее уточняю:
- А как текстовый файл получаете?
- Да Excel как текст сохраняем.
- А, может, мне вам прямо из Excel загрузку смастерить?
- (искренний ох) А вы можете??!!

Что касается времени начала и окончания, то у нас в конторе пришёл ты в 11 вместо 9, ну тогда и уйди в 20 вместо 18. Все честно, те же 8 часов. Наверное, еще и это меня подводит с "абстракцией" wink


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Quote (ALARMus)
Вы не обижайтесь (хотя ничего обидно не скажу), но Вам не хватает абстракции. (Не было может еще у Вас учебы в ВУЗе - техническом).

Эх, и даже аспирантура на энергомашиностроительном факультете... Неужели я так плохо "выгляжу"?? smile

Я чего спрашивал-то. Обычно как можно более полное знание контекста задачи позволяет включить и бОльшую фантазию и предложить заказчику вариант, о котором он и не подозревал.

Ну вот элементарный пример из моей рабочей практики. Приходит человек и просит внести изменения в формат текстового файла для загрузки. Причем очень подробно всё рассказывает, чувствуется, что думал основательно. Мне всё понятно, но тем не менее уточняю:
- А как текстовый файл получаете?
- Да Excel как текст сохраняем.
- А, может, мне вам прямо из Excel загрузку смастерить?
- (искренний ох) А вы можете??!!

Что касается времени начала и окончания, то у нас в конторе пришёл ты в 11 вместо 9, ну тогда и уйди в 20 вместо 18. Все честно, те же 8 часов. Наверное, еще и это меня подводит с "абстракцией" wink

Автор - Gustav
Дата добавления - 04.08.2012 в 15:14
ALARMus Дата: Суббота, 04.08.2012, 15:24 | Сообщение № 46
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Ё мое совсем запуктался.

А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ?
(задавая понимаю что да, просто у меня много вложенных если и истинна вроде должна быть в одном из них - а что-то пока вылезает истина не единожды sad )

Quote (Gustav)
то у нас в конторе

Тут особенности работы с аутсорсером - от них получаешь некий СЕРВИС/УСЛУГУ - когда он пришел на работу и пришел ли не волнует. Волнует что от момента регистрации о необходимости выполнить некую работу до момента ее выполнения (и то и другое фикцируется) прошло не более заданного времени.

интересно, что Вы конторой называете ? :)


Сообщение отредактировал ALARMus - Суббота, 04.08.2012, 15:33
 
Ответить
СообщениеЁ мое совсем запуктался.

А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ?
(задавая понимаю что да, просто у меня много вложенных если и истинна вроде должна быть в одном из них - а что-то пока вылезает истина не единожды sad )

Quote (Gustav)
то у нас в конторе

Тут особенности работы с аутсорсером - от них получаешь некий СЕРВИС/УСЛУГУ - когда он пришел на работу и пришел ли не волнует. Волнует что от момента регистрации о необходимости выполнить некую работу до момента ее выполнения (и то и другое фикцируется) прошло не более заданного времени.

интересно, что Вы конторой называете ? :)

Автор - ALARMus
Дата добавления - 04.08.2012 в 15:24
Pelena Дата: Суббота, 04.08.2012, 16:02 | Сообщение № 47
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Quote (ALARMus)
А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ?

Можно, но не так, как это делаете Вы.
Вместо
Code
$E$1<G4<$E$2
надо писать
Code
И($E$1<G4;G4<$E$2)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Quote (ALARMus)
А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ?

Можно, но не так, как это делаете Вы.
Вместо
Code
$E$1<G4<$E$2
надо писать
Code
И($E$1<G4;G4<$E$2)

Автор - Pelena
Дата добавления - 04.08.2012 в 16:02
ALARMus Дата: Суббота, 04.08.2012, 16:06 | Сообщение № 48
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Пытаюсь описать свое решению (в теории, на практике пока что какие-то мелочи не дают верного результата)

1) задаем константы: НачалоРабочегоДня(НРД), КонецРабочегоДня(КРД), НачалоОбеда(НО), КонецОбеда(КО), и вычисляемая - РабочийДеньВЧасах(РДЧ) (РДЧ=КРД-НРД-[КО-НО])

2) ВЫЧИСЛЯЕМ количество рабочих дней в диапазоне от НАЧАЛО до КОНЕЦ (ЧИСТРАБДНИ)
3) ВЫЧИСЛЯЕМ количество рабочих часов всего(РЧВ) - цифру из п.2 умножаем на РДЧ
4) ВЫЧИСЛЯЕМ куски времени не вошедшие в рабочее (до НАЧАЛА и после КОНЦА)
Тут имеются варианты
4_НАЧ.1: ЕСЛИ НАЧАЛО<НРД =0
4_НАЧ.2: ЕСЛИ НРД<НАЧАЛО<НО = (НАЧАЛО-НРД)
4_НАЧ.3: ЕСЛИ НО<НАЧАЛО<КО = (НО-НРД)
4_НАЧ.4: ЕСЛИ КО<НАЧАЛО<КРД = (НО-НРД+НАЧАЛО-КО)
4_НАЧ.5: ЕСЛИ НАЧАЛО>КРД = РДЧ

4_КОН.1: ЕСЛИ КОНЕЦ<НРД = РДЧ
4_КОН.2: ЕСЛИ НРД<КОНЕЦ<НО = (КРД-КО+НО-КОНЕЦ)
4_КОН.3: ЕСЛИ НО<КОНЕЦ<КО = (КРД-КО)
4_КОН.4: ЕСЛИ КО<КОНЕЦ<КРД = (КРД-КОНЕЦ)
4_КОН.5: ЕСЛИ КОНЕЦ>КРД = 0

5) РЕЗУЛЬТАТ= РЧВ - 4_НАЧ - 4_КОН

Вот что-то где 4_***.2-4 не получается правильно задать условие
 
Ответить
СообщениеПытаюсь описать свое решению (в теории, на практике пока что какие-то мелочи не дают верного результата)

1) задаем константы: НачалоРабочегоДня(НРД), КонецРабочегоДня(КРД), НачалоОбеда(НО), КонецОбеда(КО), и вычисляемая - РабочийДеньВЧасах(РДЧ) (РДЧ=КРД-НРД-[КО-НО])

2) ВЫЧИСЛЯЕМ количество рабочих дней в диапазоне от НАЧАЛО до КОНЕЦ (ЧИСТРАБДНИ)
3) ВЫЧИСЛЯЕМ количество рабочих часов всего(РЧВ) - цифру из п.2 умножаем на РДЧ
4) ВЫЧИСЛЯЕМ куски времени не вошедшие в рабочее (до НАЧАЛА и после КОНЦА)
Тут имеются варианты
4_НАЧ.1: ЕСЛИ НАЧАЛО<НРД =0
4_НАЧ.2: ЕСЛИ НРД<НАЧАЛО<НО = (НАЧАЛО-НРД)
4_НАЧ.3: ЕСЛИ НО<НАЧАЛО<КО = (НО-НРД)
4_НАЧ.4: ЕСЛИ КО<НАЧАЛО<КРД = (НО-НРД+НАЧАЛО-КО)
4_НАЧ.5: ЕСЛИ НАЧАЛО>КРД = РДЧ

4_КОН.1: ЕСЛИ КОНЕЦ<НРД = РДЧ
4_КОН.2: ЕСЛИ НРД<КОНЕЦ<НО = (КРД-КО+НО-КОНЕЦ)
4_КОН.3: ЕСЛИ НО<КОНЕЦ<КО = (КРД-КО)
4_КОН.4: ЕСЛИ КО<КОНЕЦ<КРД = (КРД-КОНЕЦ)
4_КОН.5: ЕСЛИ КОНЕЦ>КРД = 0

5) РЕЗУЛЬТАТ= РЧВ - 4_НАЧ - 4_КОН

Вот что-то где 4_***.2-4 не получается правильно задать условие

Автор - ALARMus
Дата добавления - 04.08.2012 в 16:06
ALARMus Дата: Суббота, 04.08.2012, 16:45 | Сообщение № 49
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Уууууф осилил (первая строка моего файлика)
Code

=C4-ЕСЛИ((ИЛИ(ДЕНЬНЕД(D4)=1;ДЕНЬНЕД(D4)=7));0;(ЕСЛИ(ОСТАТ(D4;1)<$E$1;0;(ЕСЛИ(И($E$1<ОСТАТ(D4;1);ОСТАТ(D4;1)<$E$2);ОСТАТ(D4;1)-$E$1;(ЕСЛИ(И($E$2<ОСТАТ(D4;1);ОСТАТ(D4;1)<$F$2);$E$2-$E$1;(ЕСЛИ(И($F$2<ОСТАТ(D4;1);ОСТАТ(D4;1)<$F$1);$E$2-$E$1+ОСТАТ(D4;1)-$F$2;(ЕСЛИ(ОСТАТ(D4;1)>$F$1;$C$1)))))))))))-ЕСЛИ((ИЛИ(ДЕНЬНЕД(E4)=1;ДЕНЬНЕД(E4)=7));0;(ЕСЛИ(ОСТАТ(E4;1)<$E$1;$C$1;(ЕСЛИ(И($E$1<ОСТАТ(E4;1);ОСТАТ(E4;1)<$E$2);$F$1-$F$2+$E$2-ОСТАТ(E4;1);(ЕСЛИ(И($E$2<ОСТАТ(E4;1);ОСТАТ(E4;1)<$F$2);$F$1-$F$2;(ЕСЛИ(И($F$2<ОСТАТ(E4;1);ОСТАТ(E4;1)<$F$1);$F$1-ОСТАТ(E4;1);(ЕСЛИ(ОСТАТ(E4;1)>$F$1;0)))))))))))


Не осилил уже для ячеек где пусто в колонке КОНЕЦ, считать текущую дату (СЕГОДНЯ) вместо КОНЕЦ - чтобы было видно сколько уже прошло времени к настоящему моменту
готово
К сообщению приложен файл: 2030611.xlsx (72.3 Kb)


Сообщение отредактировал ALARMus - Суббота, 04.08.2012, 17:38
 
Ответить
СообщениеУууууф осилил (первая строка моего файлика)
Code

=C4-ЕСЛИ((ИЛИ(ДЕНЬНЕД(D4)=1;ДЕНЬНЕД(D4)=7));0;(ЕСЛИ(ОСТАТ(D4;1)<$E$1;0;(ЕСЛИ(И($E$1<ОСТАТ(D4;1);ОСТАТ(D4;1)<$E$2);ОСТАТ(D4;1)-$E$1;(ЕСЛИ(И($E$2<ОСТАТ(D4;1);ОСТАТ(D4;1)<$F$2);$E$2-$E$1;(ЕСЛИ(И($F$2<ОСТАТ(D4;1);ОСТАТ(D4;1)<$F$1);$E$2-$E$1+ОСТАТ(D4;1)-$F$2;(ЕСЛИ(ОСТАТ(D4;1)>$F$1;$C$1)))))))))))-ЕСЛИ((ИЛИ(ДЕНЬНЕД(E4)=1;ДЕНЬНЕД(E4)=7));0;(ЕСЛИ(ОСТАТ(E4;1)<$E$1;$C$1;(ЕСЛИ(И($E$1<ОСТАТ(E4;1);ОСТАТ(E4;1)<$E$2);$F$1-$F$2+$E$2-ОСТАТ(E4;1);(ЕСЛИ(И($E$2<ОСТАТ(E4;1);ОСТАТ(E4;1)<$F$2);$F$1-$F$2;(ЕСЛИ(И($F$2<ОСТАТ(E4;1);ОСТАТ(E4;1)<$F$1);$F$1-ОСТАТ(E4;1);(ЕСЛИ(ОСТАТ(E4;1)>$F$1;0)))))))))))


Не осилил уже для ячеек где пусто в колонке КОНЕЦ, считать текущую дату (СЕГОДНЯ) вместо КОНЕЦ - чтобы было видно сколько уже прошло времени к настоящему моменту
готово

Автор - ALARMus
Дата добавления - 04.08.2012 в 16:45
ALARMus Дата: Суббота, 04.08.2012, 17:39 | Сообщение № 50
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Всем большое спасибо.
Замечания и предложения принимаются
 
Ответить
СообщениеВсем большое спасибо.
Замечания и предложения принимаются

Автор - ALARMus
Дата добавления - 04.08.2012 в 17:39
MCH Дата: Суббота, 04.08.2012, 20:41 | Сообщение № 51
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

ALARMus, а чем не понравилось ранее предложенное решение?
Code
=(ДЕНЬНЕД(D4;2)<6)*($E$2-МАКС(МИН(ОСТАТ(D4;1);$E$2);$E$1)+$F$1-МАКС(МИН(ОСТАТ(D4;1);$F$1);$F$2))+(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);$E$2);$E$1)-$E$1+МАКС(МИН(ОСТАТ(E4;1);$F$1);$F$2)-$F$2)+(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*$C$1
К сообщению приложен файл: 7970324.xlsx (42.2 Kb)
 
Ответить
СообщениеALARMus, а чем не понравилось ранее предложенное решение?
Code
=(ДЕНЬНЕД(D4;2)<6)*($E$2-МАКС(МИН(ОСТАТ(D4;1);$E$2);$E$1)+$F$1-МАКС(МИН(ОСТАТ(D4;1);$F$1);$F$2))+(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);$E$2);$E$1)-$E$1+МАКС(МИН(ОСТАТ(E4;1);$F$1);$F$2)-$F$2)+(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*$C$1

Автор - MCH
Дата добавления - 04.08.2012 в 20:41
Gustav Дата: Воскресенье, 05.08.2012, 02:31 | Сообщение № 52
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2744
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
И вновь я со своей внеконкурсной страничкой экспериментального юмора, начатой ранее в этой ветке: http://www.excelworld.ru/forum/2-2110-23120-16-1343991145 .

Очередной пример нетрадиционного подхода. И, кстати, абстракции, да еще какой - нужно будет себя убедить в том, что количество ячеек в диапазоне иногда может трактоваться и как количество минут рабочего времени. Если себя в этом убедить, то предлагаемый алгоритм, надеюсь, порадует своей прозрачностью, несложностью сопровождения и потенциальной расширяемостью.

В прилагаемом файле содержится пользовательская функция (UDF) NetWorkTime, которая собственно и вычисляет кол-во чистого рабочего времени (часы:минуты), попадающего в заданный период. С точностью до минут (без секунд). В пределах текущего настроенного года. Учитывает обеды, сокращенные на час предпраздничные дни, праздники и переносы, связанные с праздниками (рабочие субботы, нерабочие понедельники и т.п.) - всё в соответствии с официальным российским производственным календарем 2012: http://eduscan.net/help/calendar2012 .

Работает это хозяйство так. Вначале (при самом первом вызове UDF) генерируется "массив" (точнее, ссылка на многосвязный диапазон ячеек) всех половинок рабочих дней для всего года. Все последующие вызовы UDF просто пользуются этим массивом, задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном. Количество ячеек в результирующем диапазоне-пересечении и является искомым количеством минут рабочего времени.

Настроить алгоритм на следующий год будет несложно - просто подправляются даты в некоторых местах. Основные исправления, конечно, связаны с работой вокруг праздников. Информация для этих исправлений появляется после публикаций соответствующих постановлений правительства.
К сообщению приложен файл: ALARMus_UDF.xlsm (55.2 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеИ вновь я со своей внеконкурсной страничкой экспериментального юмора, начатой ранее в этой ветке: http://www.excelworld.ru/forum/2-2110-23120-16-1343991145 .

Очередной пример нетрадиционного подхода. И, кстати, абстракции, да еще какой - нужно будет себя убедить в том, что количество ячеек в диапазоне иногда может трактоваться и как количество минут рабочего времени. Если себя в этом убедить, то предлагаемый алгоритм, надеюсь, порадует своей прозрачностью, несложностью сопровождения и потенциальной расширяемостью.

В прилагаемом файле содержится пользовательская функция (UDF) NetWorkTime, которая собственно и вычисляет кол-во чистого рабочего времени (часы:минуты), попадающего в заданный период. С точностью до минут (без секунд). В пределах текущего настроенного года. Учитывает обеды, сокращенные на час предпраздничные дни, праздники и переносы, связанные с праздниками (рабочие субботы, нерабочие понедельники и т.п.) - всё в соответствии с официальным российским производственным календарем 2012: http://eduscan.net/help/calendar2012 .

Работает это хозяйство так. Вначале (при самом первом вызове UDF) генерируется "массив" (точнее, ссылка на многосвязный диапазон ячеек) всех половинок рабочих дней для всего года. Все последующие вызовы UDF просто пользуются этим массивом, задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном. Количество ячеек в результирующем диапазоне-пересечении и является искомым количеством минут рабочего времени.

Настроить алгоритм на следующий год будет несложно - просто подправляются даты в некоторых местах. Основные исправления, конечно, связаны с работой вокруг праздников. Информация для этих исправлений появляется после публикаций соответствующих постановлений правительства.

Автор - Gustav
Дата добавления - 05.08.2012 в 02:31
ALARMus Дата: Воскресенье, 05.08.2012, 10:53 | Сообщение № 53
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (MCH)
а чем не понравилось ранее предложенное решение?

О нет, все прекрасно, всем учавствующим повысил репутацию.
Просто
1) сам тоже поучавствовал (типа я не такой - "дайте мне готовое решение я его возьму")
2) мой метод более тупой и прямолинейный и очевидный. Глядя на Ваш вариант (лично для меня - ввиду видимо малой опытности) я сразу не понимаю логику зачем там Максимумы от минимумов и зачем деньнедели если используется чистраб дни. Это я не к тому что у Вас плохо, а к вышеуказанному изъяснению в скобках. ( как с отчетом закончу, посижу покумекаю, как у Вас, что получается)

PS:
Рассматриваю Ваш вариант (МСН) никак не могу осознать что там вычисляется (поэтапно)
Вообще загадка + и - вот тут.
Code
(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*$C$1


Не могли бы в "общих" чертах описать суть.

Quote (Gustav)
задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном

Отличное вИдиние. Не совсем пока осознаю как диапазон хранить (пишу до осмотра файла). Моя поделка конечно короткий день не учитывает.
А как посмотреть саму функцию (облазил менюшки не нашел) ?


Сообщение отредактировал ALARMus - Воскресенье, 05.08.2012, 11:43
 
Ответить
Сообщение
Quote (MCH)
а чем не понравилось ранее предложенное решение?

О нет, все прекрасно, всем учавствующим повысил репутацию.
Просто
1) сам тоже поучавствовал (типа я не такой - "дайте мне готовое решение я его возьму")
2) мой метод более тупой и прямолинейный и очевидный. Глядя на Ваш вариант (лично для меня - ввиду видимо малой опытности) я сразу не понимаю логику зачем там Максимумы от минимумов и зачем деньнедели если используется чистраб дни. Это я не к тому что у Вас плохо, а к вышеуказанному изъяснению в скобках. ( как с отчетом закончу, посижу покумекаю, как у Вас, что получается)

PS:
Рассматриваю Ваш вариант (МСН) никак не могу осознать что там вычисляется (поэтапно)
Вообще загадка + и - вот тут.
Code
(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*$C$1


Не могли бы в "общих" чертах описать суть.

Quote (Gustav)
задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном

Отличное вИдиние. Не совсем пока осознаю как диапазон хранить (пишу до осмотра файла). Моя поделка конечно короткий день не учитывает.
А как посмотреть саму функцию (облазил менюшки не нашел) ?

Автор - ALARMus
Дата добавления - 05.08.2012 в 10:53
MCH Дата: Воскресенье, 05.08.2012, 12:41 | Сообщение № 54
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Постораюсь обяснить.

Для наглядности формулу можно записать как:
Code
=(ДЕНЬНЕД(D4;2)<6)*("12:00"-МАКС(МИН(ОСТАТ(D4;1);--"12:00");--"8:30")+"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00"))+(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);--"12:00");--"8:30")-"8:30"+МАКС(МИН(ОСТАТ(E4;1);--"17:30");--"13:00")-"13:00")+(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*"8:00"

в упрощенном виде:
[Кол-во рабочих часов начального дня] + [Кол-во рабочих часов конечного дня] + [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]

1 кусок, [Кол-во рабочих часов начального дня]:
Code
(ДЕНЬНЕД(D4;2)<6)*("12:00"-МАКС(МИН(ОСТАТ(D4;1);--"12:00");--"8:30")+"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00"))

здесь формула разбита на два участка: [робочее время до обеда] + [рабочее время после обеда]

ОСТАТ(D4;1) - отсекаем целую часть, тем самым получаем время начала без учета даты
МИН(ОСТАТ(D4;1);--"12:00") - выбираем минимально значение между началом работ и началом обеда, если время начала работ после обеда, то будет выбрано 12 часов
МАКС(...;--"8:30") - выбираем максимальное значение между получившимся временем и началом рабочего дня, если время начала работ меньше 8:30 то выберется 8:30
таким образом получаем время не ранее 8:30 и не позднее 12:00
при вычислении "12:00"-МАКС(...) - получаем кол-во рабочего времени отработанного с 8:30 до 12:00,
если время начала работ меньше 8:30 то получим 3 часа 30 минут (12:00 - 8:30),
если время начала работ больше 12:00 то получим 0 (12:00 - 12:00)
во всех остальных случаях получим рабочее время до обеда

Время после обеда
Code
"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00")

вычисляется аналогично, только задаются другие временные диапазоны

(ДЕНЬНЕД(D4;2)<6)*(Время начального дня)
нужно для того, чтобы не учитывать расчитанное время, если начальный день выходной (6-сб или 7-вс)

2 кусок, [Кол-во рабочих часов конечного дня]:
Code
(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);--"12:00");--"8:30")-"8:30"+МАКС(МИН(ОСТАТ(E4;1);--"17:30");--"13:00")-"13:00")

расчитывается как и первая часть формулы, только определяется сколько рабочего времени прошло до указанного времени

3 кусок, [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]
Code
(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*"8:00"

Теоретически данную часть формулы можно записать как:
Code
(ЧИСТРАБДНИ(D4;E4)-2)*"8:00"

Определяем, сколько рабочих дней между датами, вычитаем 2, чтобы отсечь начальное и конечное значение и умножаем на кол-во рабочих часов в день.
Единственная проблема, если начальная или конечная дата попадает на выходной, в данном случае кол-во рабочих дней между датами будет ошибочно
В этом нам поможет РАБДЕНЬ()
РАБДЕНЬ(D4+1;-1) - прибавляем один день к текущей дате и пытаемся спустится на один рабочий день назад
тем самым получаем, если текущая дата не выходной, то остается эта дата, если выходной (суббота или воскресенье) - то берем предыдущий рабочий день( пятницу)
аналогично с РАБДЕНЬ(E4-1;1), только наоборот, если конечная дата - выходной, то берем для расчетов понедельник

Надеюсь с объяснением будет понятно, как работает формула


Сообщение отредактировал MCH - Воскресенье, 05.08.2012, 12:45
 
Ответить
СообщениеПостораюсь обяснить.

Для наглядности формулу можно записать как:
Code
=(ДЕНЬНЕД(D4;2)<6)*("12:00"-МАКС(МИН(ОСТАТ(D4;1);--"12:00");--"8:30")+"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00"))+(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);--"12:00");--"8:30")-"8:30"+МАКС(МИН(ОСТАТ(E4;1);--"17:30");--"13:00")-"13:00")+(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*"8:00"

в упрощенном виде:
[Кол-во рабочих часов начального дня] + [Кол-во рабочих часов конечного дня] + [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]

1 кусок, [Кол-во рабочих часов начального дня]:
Code
(ДЕНЬНЕД(D4;2)<6)*("12:00"-МАКС(МИН(ОСТАТ(D4;1);--"12:00");--"8:30")+"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00"))

здесь формула разбита на два участка: [робочее время до обеда] + [рабочее время после обеда]

ОСТАТ(D4;1) - отсекаем целую часть, тем самым получаем время начала без учета даты
МИН(ОСТАТ(D4;1);--"12:00") - выбираем минимально значение между началом работ и началом обеда, если время начала работ после обеда, то будет выбрано 12 часов
МАКС(...;--"8:30") - выбираем максимальное значение между получившимся временем и началом рабочего дня, если время начала работ меньше 8:30 то выберется 8:30
таким образом получаем время не ранее 8:30 и не позднее 12:00
при вычислении "12:00"-МАКС(...) - получаем кол-во рабочего времени отработанного с 8:30 до 12:00,
если время начала работ меньше 8:30 то получим 3 часа 30 минут (12:00 - 8:30),
если время начала работ больше 12:00 то получим 0 (12:00 - 12:00)
во всех остальных случаях получим рабочее время до обеда

Время после обеда
Code
"17:30"-МАКС(МИН(ОСТАТ(D4;1);--"17:30");--"13:00")

вычисляется аналогично, только задаются другие временные диапазоны

(ДЕНЬНЕД(D4;2)<6)*(Время начального дня)
нужно для того, чтобы не учитывать расчитанное время, если начальный день выходной (6-сб или 7-вс)

2 кусок, [Кол-во рабочих часов конечного дня]:
Code
(ДЕНЬНЕД(E4;2)<6)*(МАКС(МИН(ОСТАТ(E4;1);--"12:00");--"8:30")-"8:30"+МАКС(МИН(ОСТАТ(E4;1);--"17:30");--"13:00")-"13:00")

расчитывается как и первая часть формулы, только определяется сколько рабочего времени прошло до указанного времени

3 кусок, [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]
Code
(ЧИСТРАБДНИ(РАБДЕНЬ(D4+1;-1);РАБДЕНЬ(E4-1;1))-2)*"8:00"

Теоретически данную часть формулы можно записать как:
Code
(ЧИСТРАБДНИ(D4;E4)-2)*"8:00"

Определяем, сколько рабочих дней между датами, вычитаем 2, чтобы отсечь начальное и конечное значение и умножаем на кол-во рабочих часов в день.
Единственная проблема, если начальная или конечная дата попадает на выходной, в данном случае кол-во рабочих дней между датами будет ошибочно
В этом нам поможет РАБДЕНЬ()
РАБДЕНЬ(D4+1;-1) - прибавляем один день к текущей дате и пытаемся спустится на один рабочий день назад
тем самым получаем, если текущая дата не выходной, то остается эта дата, если выходной (суббота или воскресенье) - то берем предыдущий рабочий день( пятницу)
аналогично с РАБДЕНЬ(E4-1;1), только наоборот, если конечная дата - выходной, то берем для расчетов понедельник

Надеюсь с объяснением будет понятно, как работает формула

Автор - MCH
Дата добавления - 05.08.2012 в 12:41
ALARMus Дата: Воскресенье, 05.08.2012, 13:02 | Сообщение № 55
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Дааа сильно.
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.

Первая часть стала понятной (складываение часов). ДЕНЬНЕД в сравнении <6 это логический результат (сразу не увидел и не мог понять зачем оно)
с РАБДЕНЬ пока не осознаю - в плане как мысль могла дойти до использования этого (т.е. как удалось увидеть, что это так можно использовать) или иными словами скажи мне, что есть такая функция и такая вот задача - не догадался бы что эту функцию тут можно применить (ну сошлемся на дико малый опыт)

Quote (MCH)
Единственная проблема, если начальная или конечная дата попадает на выходной

А вот этим уже не отсеклись такие варианты ?
Code
(ДЕНЬНЕД(D4;2)<6)


Мне кажется там достаточно прибавить число рабочих дней между НАЧАЛОМ и КОНЦОМ умноженное на длину 1-го дня в часах, в случае если эта разница больше 1
например:
Code
ЕСЛИ(ЧИСТРАБДНИ(D4;E4)<2;0;ЧИСТРАБДНИ(D4;E4)*$C$1)

Я опять со своим прямолинейным ЕСЛИ biggrin (пока изящная логика мне недоступна пытался ввернуть СУММУПРОИЗВЕДЕНИЙ - что-то не сработало)

Или нет даже вот так
Code
-ПРОИЗВЕД(ЧИСТРАБДНИ(D4;E4);2;$C$1)

А еще подумав вот так
Code
+(ЧИСТРАБДНИ(D4;E4)-2)*$C$1


Чудеса какие-то результаты Вашей и модифицированной мною Вашей формулы практически везде совпали кроме - пометил ячейки желтым (причем последняя колонка сравнения результата Вашего и моего не дает никакого результата - странно)
изменил формат ячеек совпало все
К сообщению приложен файл: __2.xlsx (88.0 Kb)


Сообщение отредактировал ALARMus - Воскресенье, 05.08.2012, 17:18
 
Ответить
СообщениеДааа сильно.
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.

Первая часть стала понятной (складываение часов). ДЕНЬНЕД в сравнении <6 это логический результат (сразу не увидел и не мог понять зачем оно)
с РАБДЕНЬ пока не осознаю - в плане как мысль могла дойти до использования этого (т.е. как удалось увидеть, что это так можно использовать) или иными словами скажи мне, что есть такая функция и такая вот задача - не догадался бы что эту функцию тут можно применить (ну сошлемся на дико малый опыт)

Quote (MCH)
Единственная проблема, если начальная или конечная дата попадает на выходной

А вот этим уже не отсеклись такие варианты ?
Code
(ДЕНЬНЕД(D4;2)<6)


Мне кажется там достаточно прибавить число рабочих дней между НАЧАЛОМ и КОНЦОМ умноженное на длину 1-го дня в часах, в случае если эта разница больше 1
например:
Code
ЕСЛИ(ЧИСТРАБДНИ(D4;E4)<2;0;ЧИСТРАБДНИ(D4;E4)*$C$1)

Я опять со своим прямолинейным ЕСЛИ biggrin (пока изящная логика мне недоступна пытался ввернуть СУММУПРОИЗВЕДЕНИЙ - что-то не сработало)

Или нет даже вот так
Code
-ПРОИЗВЕД(ЧИСТРАБДНИ(D4;E4);2;$C$1)

А еще подумав вот так
Code
+(ЧИСТРАБДНИ(D4;E4)-2)*$C$1


Чудеса какие-то результаты Вашей и модифицированной мною Вашей формулы практически везде совпали кроме - пометил ячейки желтым (причем последняя колонка сравнения результата Вашего и моего не дает никакого результата - странно)
изменил формат ячеек совпало все

Автор - ALARMus
Дата добавления - 05.08.2012 в 13:02
Gustav Дата: Воскресенье, 05.08.2012, 14:01 | Сообщение № 56
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2744
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (ALARMus)
А как посмотреть саму функцию (облазил менюшки не нашел) ?

Подозреваю, что у Вас в Excel в меню (на ленте) нет вкладки "Разработчик". Как отобразить ее: http://msdn.microsoft.com/ru-ru/library/bb608625.aspx . Или можете нажать Alt+F11 и окажетесь в редакторе VB. Там в Module1 найдете функцию по строке: Public Function NetWorkTime .

Quote (ALARMus)
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.

А я так вообще ячейки считаю, как зарубки на сосне wacko


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Quote (ALARMus)
А как посмотреть саму функцию (облазил менюшки не нашел) ?

Подозреваю, что у Вас в Excel в меню (на ленте) нет вкладки "Разработчик". Как отобразить ее: http://msdn.microsoft.com/ru-ru/library/bb608625.aspx . Или можете нажать Alt+F11 и окажетесь в редакторе VB. Там в Module1 найдете функцию по строке: Public Function NetWorkTime .

Quote (ALARMus)
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.

А я так вообще ячейки считаю, как зарубки на сосне wacko

Автор - Gustav
Дата добавления - 05.08.2012 в 14:01
ALARMus Дата: Воскресенье, 05.08.2012, 14:11 | Сообщение № 57
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (Gustav)
А я так вообще ячейки считаю, как зарубки на сосне

Понятно - ЛИСТЫ - это СОСНЫ, а ФАЙЛ - это ЛЕС Сосен.
Чего ж тут непонятного.
 
Ответить
Сообщение
Quote (Gustav)
А я так вообще ячейки считаю, как зарубки на сосне

Понятно - ЛИСТЫ - это СОСНЫ, а ФАЙЛ - это ЛЕС Сосен.
Чего ж тут непонятного.

Автор - ALARMus
Дата добавления - 05.08.2012 в 14:11
Gustav Дата: Воскресенье, 05.08.2012, 14:12 | Сообщение № 58
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2744
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (ALARMus)
Не совсем пока осознаю как диапазон хранить

Никак не надо. При работе моего алгоритма на рабочем листе физически ничего не происходит. Никакие ячейки не заполняются значениями и не очищаются. Всё "прокручивается в уме" компьютера на уровне операций с адресами ячеек. Если и говорить о каком-то хранении, то не более чем о хранении кода макросов в модуле. Сейчас это 117 строк (с учетом пустых), в трети из которых тупо прописаны короткие дни, праздники и переносы.

И никаких существенных IFов и больше/меньше с датами!


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 05.08.2012, 14:21
 
Ответить
Сообщение
Quote (ALARMus)
Не совсем пока осознаю как диапазон хранить

Никак не надо. При работе моего алгоритма на рабочем листе физически ничего не происходит. Никакие ячейки не заполняются значениями и не очищаются. Всё "прокручивается в уме" компьютера на уровне операций с адресами ячеек. Если и говорить о каком-то хранении, то не более чем о хранении кода макросов в модуле. Сейчас это 117 строк (с учетом пустых), в трети из которых тупо прописаны короткие дни, праздники и переносы.

И никаких существенных IFов и больше/меньше с датами!

Автор - Gustav
Дата добавления - 05.08.2012 в 14:12
ALARMus Дата: Воскресенье, 05.08.2012, 14:26 | Сообщение № 59
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (Gustav)
физически ничего не происходит

Я имел ввиду не физически. Пересечение диапазонов (JOIN) означает пересечение значений в самих диапазонах ? (или куда я тут с этим SQL)


Сообщение отредактировал ALARMus - Воскресенье, 05.08.2012, 14:26
 
Ответить
Сообщение
Quote (Gustav)
физически ничего не происходит

Я имел ввиду не физически. Пересечение диапазонов (JOIN) означает пересечение значений в самих диапазонах ? (или куда я тут с этим SQL)

Автор - ALARMus
Дата добавления - 05.08.2012 в 14:26
Gustav Дата: Воскресенье, 05.08.2012, 15:20 | Сообщение № 60
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2744
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (ALARMus)
или куда я тут с этим SQL

Нет, это не час SQL. В нём бы не так прозрачно получалось. Скорее, это какая-нибудь теория множеств. Впрочем, врать не буду, может, и не она.

Итак, воскресный день. Полулежа смотрю ТВ. Рядом лежит ноут, в который я переодически постукиваю, неспешно формулируя фразы. Хотел побольше написать, но, чувствую, можно уже начинать публиковать - будет как сериал с продолжением. Поехали.

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

Ячейка A1 соответствует первой завершившейся минуте года, в нашем случае 2012 года моменту времени - 01.01.2012 00:01:00. Ячейка A1440 соответствует первым завершившимся суткам года, т.е. моменту времени 01.01.2012 24:00:00 или, что более привычно визуально, моменту времени 02.01.2012 00:00:00.

Число 1440 - это количество минут в сутках = 24 часа х 60 минут. Именно потому, что одна ячейка соответствует минуте, учет секунд в данном методе не представляется возможным. При учете в секундах для представления одних суток потребуется 86400 ячеек (1440*60), но тогда длины столбца A (1048576 строк в Excel 2007+) не хватит даже для пресловутых 15 суток. Тут вполне логично напрашивается продолжение временнОй шкалы в последующих столбцах, но как это осуществить - мне пока не очень понятно. Понятно только, что алгоритм должен стать существенно сложнее текущего, а именно его относительная простота сейчас является большим плюсом.

При поминутном учете, как уже сказано, для одного дня (суток) требуется 1440 ячеек, для одного года 2012 - 1440 х 366 = 527040 ячеек. Ячейка A527040 соответствует моменту времени 31.12.2012 24:00:00 (С Новым годом!). Для представления в алгоритме сразу двух подряд идущих годов, увы, не хватает буквально трех дней, но для этой благородной цели можно частично пожертвовать новогодними каникулами первого года, начав строительство шкалы, скажем, с 5 января.

Предложенный подход работы со шкалой времени в версиях Excel 2003- с их (в данном случае всего лишь) 65536 строками, безусловно, возможен, но с очевидными ограничениями на охватываемый алгоритмом период.

Но это только, так сказать, начальное привыкание к абстракции. Сами действия на шкале опишу чуть позже. А, может, и не опишу, если всем всё и так станет понятно и необходимость отпадёт. В конце концов, технически всё же уже описано в коде VBA smile


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Quote (ALARMus)
или куда я тут с этим SQL

Нет, это не час SQL. В нём бы не так прозрачно получалось. Скорее, это какая-нибудь теория множеств. Впрочем, врать не буду, может, и не она.

Итак, воскресный день. Полулежа смотрю ТВ. Рядом лежит ноут, в который я переодически постукиваю, неспешно формулируя фразы. Хотел побольше написать, но, чувствую, можно уже начинать публиковать - будет как сериал с продолжением. Поехали.

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

Ячейка A1 соответствует первой завершившейся минуте года, в нашем случае 2012 года моменту времени - 01.01.2012 00:01:00. Ячейка A1440 соответствует первым завершившимся суткам года, т.е. моменту времени 01.01.2012 24:00:00 или, что более привычно визуально, моменту времени 02.01.2012 00:00:00.

Число 1440 - это количество минут в сутках = 24 часа х 60 минут. Именно потому, что одна ячейка соответствует минуте, учет секунд в данном методе не представляется возможным. При учете в секундах для представления одних суток потребуется 86400 ячеек (1440*60), но тогда длины столбца A (1048576 строк в Excel 2007+) не хватит даже для пресловутых 15 суток. Тут вполне логично напрашивается продолжение временнОй шкалы в последующих столбцах, но как это осуществить - мне пока не очень понятно. Понятно только, что алгоритм должен стать существенно сложнее текущего, а именно его относительная простота сейчас является большим плюсом.

При поминутном учете, как уже сказано, для одного дня (суток) требуется 1440 ячеек, для одного года 2012 - 1440 х 366 = 527040 ячеек. Ячейка A527040 соответствует моменту времени 31.12.2012 24:00:00 (С Новым годом!). Для представления в алгоритме сразу двух подряд идущих годов, увы, не хватает буквально трех дней, но для этой благородной цели можно частично пожертвовать новогодними каникулами первого года, начав строительство шкалы, скажем, с 5 января.

Предложенный подход работы со шкалой времени в версиях Excel 2003- с их (в данном случае всего лишь) 65536 строками, безусловно, возможен, но с очевидными ограничениями на охватываемый алгоритмом период.

Но это только, так сказать, начальное привыкание к абстракции. Сами действия на шкале опишу чуть позже. А, может, и не опишу, если всем всё и так станет понятно и необходимость отпадёт. В конце концов, технически всё же уже описано в коде VBA smile

Автор - Gustav
Дата добавления - 05.08.2012 в 15:20
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Расчет даты исключая периоды
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!