Изменение формата не влияет на истинное значение в ячейке, которое принимает участие в вычислениях
Я понимаю, тогда истинное значение в ячейке Е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
Так так покрутил, значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ ?
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
Сообщение отредактировал ALARMus - Суббота, 04.08.2012, 14:18
значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ
Дата хранится в Excel в виде числа, у которого целая часть - это количество дней от 01.01.1900 до указанной даты, а дробная часть - это время (часть суток)
Quote (ALARMus)
значит все что после запятой (если дату смотерть в числовом формате) это ВРЕМЯ
Дата хранится в Excel в виде числа, у которого целая часть - это количество дней от 01.01.1900 до указанной даты, а дробная часть - это время (часть суток)Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Вы не обижайтесь (хотя ничего обидно не скажу), но Вам не хватает абстракции. (Не было может еще у Вас учебы в ВУЗе - техническом).
Эх, и даже аспирантура на энергомашиностроительном факультете... Неужели я так плохо "выгляжу"??
Я чего спрашивал-то. Обычно как можно более полное знание контекста задачи позволяет включить и бОльшую фантазию и предложить заказчику вариант, о котором он и не подозревал.
Ну вот элементарный пример из моей рабочей практики. Приходит человек и просит внести изменения в формат текстового файла для загрузки. Причем очень подробно всё рассказывает, чувствуется, что думал основательно. Мне всё понятно, но тем не менее уточняю: - А как текстовый файл получаете? - Да Excel как текст сохраняем. - А, может, мне вам прямо из Excel загрузку смастерить? - (искренний ох) А вы можете??!!
Что касается времени начала и окончания, то у нас в конторе пришёл ты в 11 вместо 9, ну тогда и уйди в 20 вместо 18. Все честно, те же 8 часов. Наверное, еще и это меня подводит с "абстракцией"
Quote (ALARMus)
Вы не обижайтесь (хотя ничего обидно не скажу), но Вам не хватает абстракции. (Не было может еще у Вас учебы в ВУЗе - техническом).
Эх, и даже аспирантура на энергомашиностроительном факультете... Неужели я так плохо "выгляжу"??
Я чего спрашивал-то. Обычно как можно более полное знание контекста задачи позволяет включить и бОльшую фантазию и предложить заказчику вариант, о котором он и не подозревал.
Ну вот элементарный пример из моей рабочей практики. Приходит человек и просит внести изменения в формат текстового файла для загрузки. Причем очень подробно всё рассказывает, чувствуется, что думал основательно. Мне всё понятно, но тем не менее уточняю: - А как текстовый файл получаете? - Да Excel как текст сохраняем. - А, может, мне вам прямо из Excel загрузку смастерить? - (искренний ох) А вы можете??!!
Что касается времени начала и окончания, то у нас в конторе пришёл ты в 11 вместо 9, ну тогда и уйди в 20 вместо 18. Все честно, те же 8 часов. Наверное, еще и это меня подводит с "абстракцией" Gustav
А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ? (задавая понимаю что да, просто у меня много вложенных если и истинна вроде должна быть в одном из них - а что-то пока вылезает истина не единожды )
Quote (Gustav)
то у нас в конторе
Тут особенности работы с аутсорсером - от них получаешь некий СЕРВИС/УСЛУГУ - когда он пришел на работу и пришел ли не волнует. Волнует что от момента регистрации о необходимости выполнить некую работу до момента ее выполнения (и то и другое фикцируется) прошло не более заданного времени.
интересно, что Вы конторой называете ? :)
Ё мое совсем запуктался.
А можно ли в ЕСЛИ указывать диапазон в условии - больше чего-то но меньше другого ? (задавая понимаю что да, просто у меня много вложенных если и истинна вроде должна быть в одном из них - а что-то пока вылезает истина не единожды )
Quote (Gustav)
то у нас в конторе
Тут особенности работы с аутсорсером - от них получаешь некий СЕРВИС/УСЛУГУ - когда он пришел на работу и пришел ли не волнует. Волнует что от момента регистрации о необходимости выполнить некую работу до момента ее выполнения (и то и другое фикцируется) прошло не более заданного времени.
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 не получается правильно задать условие
Пытаюсь описать свое решению (в теории, на практике пока что какие-то мелочи не дают верного результата)
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
Не осилил уже для ячеек где пусто в колонке КОНЕЦ, считать текущую дату (СЕГОДНЯ) вместо КОНЕЦ - чтобы было видно сколько уже прошло времени к настоящему моменту готово
Не осилил уже для ячеек где пусто в колонке КОНЕЦ, считать текущую дату (СЕГОДНЯ) вместо КОНЕЦ - чтобы было видно сколько уже прошло времени к настоящему моменту готовоALARMus
Очередной пример нетрадиционного подхода. И, кстати, абстракции, да еще какой - нужно будет себя убедить в том, что количество ячеек в диапазоне иногда может трактоваться и как количество минут рабочего времени. Если себя в этом убедить, то предлагаемый алгоритм, надеюсь, порадует своей прозрачностью, несложностью сопровождения и потенциальной расширяемостью.
В прилагаемом файле содержится пользовательская функция (UDF) NetWorkTime, которая собственно и вычисляет кол-во чистого рабочего времени (часы:минуты), попадающего в заданный период. С точностью до минут (без секунд). В пределах текущего настроенного года. Учитывает обеды, сокращенные на час предпраздничные дни, праздники и переносы, связанные с праздниками (рабочие субботы, нерабочие понедельники и т.п.) - всё в соответствии с официальным российским производственным календарем 2012: http://eduscan.net/help/calendar2012 .
Работает это хозяйство так. Вначале (при самом первом вызове UDF) генерируется "массив" (точнее, ссылка на многосвязный диапазон ячеек) всех половинок рабочих дней для всего года. Все последующие вызовы UDF просто пользуются этим массивом, задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном. Количество ячеек в результирующем диапазоне-пересечении и является искомым количеством минут рабочего времени.
Настроить алгоритм на следующий год будет несложно - просто подправляются даты в некоторых местах. Основные исправления, конечно, связаны с работой вокруг праздников. Информация для этих исправлений появляется после публикаций соответствующих постановлений правительства.
Очередной пример нетрадиционного подхода. И, кстати, абстракции, да еще какой - нужно будет себя убедить в том, что количество ячеек в диапазоне иногда может трактоваться и как количество минут рабочего времени. Если себя в этом убедить, то предлагаемый алгоритм, надеюсь, порадует своей прозрачностью, несложностью сопровождения и потенциальной расширяемостью.
В прилагаемом файле содержится пользовательская функция (UDF) NetWorkTime, которая собственно и вычисляет кол-во чистого рабочего времени (часы:минуты), попадающего в заданный период. С точностью до минут (без секунд). В пределах текущего настроенного года. Учитывает обеды, сокращенные на час предпраздничные дни, праздники и переносы, связанные с праздниками (рабочие субботы, нерабочие понедельники и т.п.) - всё в соответствии с официальным российским производственным календарем 2012: http://eduscan.net/help/calendar2012 .
Работает это хозяйство так. Вначале (при самом первом вызове UDF) генерируется "массив" (точнее, ссылка на многосвязный диапазон ячеек) всех половинок рабочих дней для всего года. Все последующие вызовы UDF просто пользуются этим массивом, задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном. Количество ячеек в результирующем диапазоне-пересечении и является искомым количеством минут рабочего времени.
Настроить алгоритм на следующий год будет несложно - просто подправляются даты в некоторых местах. Основные исправления, конечно, связаны с работой вокруг праздников. Информация для этих исправлений появляется после публикаций соответствующих постановлений правительства.Gustav
О нет, все прекрасно, всем учавствующим повысил репутацию. Просто 1) сам тоже поучавствовал (типа я не такой - "дайте мне готовое решение я его возьму") 2) мой метод более тупой и прямолинейный и очевидный. Глядя на Ваш вариант (лично для меня - ввиду видимо малой опытности) я сразу не понимаю логику зачем там Максимумы от минимумов и зачем деньнедели если используется чистраб дни. Это я не к тому что у Вас плохо, а к вышеуказанному изъяснению в скобках. ( как с отчетом закончу, посижу покумекаю, как у Вас, что получается)
PS: Рассматриваю Ваш вариант (МСН) никак не могу осознать что там вычисляется (поэтапно) Вообще загадка + и - вот тут.
задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном
Отличное вИдиние. Не совсем пока осознаю как диапазон хранить (пишу до осмотра файла). Моя поделка конечно короткий день не учитывает. А как посмотреть саму функцию (облазил менюшки не нашел) ?
Quote (MCH)
а чем не понравилось ранее предложенное решение?
О нет, все прекрасно, всем учавствующим повысил репутацию. Просто 1) сам тоже поучавствовал (типа я не такой - "дайте мне готовое решение я его возьму") 2) мой метод более тупой и прямолинейный и очевидный. Глядя на Ваш вариант (лично для меня - ввиду видимо малой опытности) я сразу не понимаю логику зачем там Максимумы от минимумов и зачем деньнедели если используется чистраб дни. Это я не к тому что у Вас плохо, а к вышеуказанному изъяснению в скобках. ( как с отчетом закончу, посижу покумекаю, как у Вас, что получается)
PS: Рассматриваю Ваш вариант (МСН) никак не могу осознать что там вычисляется (поэтапно) Вообще загадка + и - вот тут.
задавая свой конкретный диапазон и вычисляя пересечение с годовым диапазоном
Отличное вИдиние. Не совсем пока осознаю как диапазон хранить (пишу до осмотра файла). Моя поделка конечно короткий день не учитывает. А как посмотреть саму функцию (облазил менюшки не нашел) ?ALARMus
Сообщение отредактировал ALARMus - Воскресенье, 05.08.2012, 11:43
в упрощенном виде: [Кол-во рабочих часов начального дня] + [Кол-во рабочих часов конечного дня] + [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]
здесь формула разбита на два участка: [робочее время до обеда] + [рабочее время после обеда]
ОСТАТ(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
(ЧИСТРАБДНИ(D4;E4)-2)*"8:00"
Определяем, сколько рабочих дней между датами, вычитаем 2, чтобы отсечь начальное и конечное значение и умножаем на кол-во рабочих часов в день. Единственная проблема, если начальная или конечная дата попадает на выходной, в данном случае кол-во рабочих дней между датами будет ошибочно В этом нам поможет РАБДЕНЬ() РАБДЕНЬ(D4+1;-1) - прибавляем один день к текущей дате и пытаемся спустится на один рабочий день назад тем самым получаем, если текущая дата не выходной, то остается эта дата, если выходной (суббота или воскресенье) - то берем предыдущий рабочий день( пятницу) аналогично с РАБДЕНЬ(E4-1;1), только наоборот, если конечная дата - выходной, то берем для расчетов понедельник
Надеюсь с объяснением будет понятно, как работает формула
в упрощенном виде: [Кол-во рабочих часов начального дня] + [Кол-во рабочих часов конечного дня] + [Кол-во полных рабочих дней между начальной и конечной датой] * [Кол-во рабочих часов в день]
здесь формула разбита на два участка: [робочее время до обеда] + [рабочее время после обеда]
ОСТАТ(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
(ЧИСТРАБДНИ(D4;E4)-2)*"8:00"
Определяем, сколько рабочих дней между датами, вычитаем 2, чтобы отсечь начальное и конечное значение и умножаем на кол-во рабочих часов в день. Единственная проблема, если начальная или конечная дата попадает на выходной, в данном случае кол-во рабочих дней между датами будет ошибочно В этом нам поможет РАБДЕНЬ() РАБДЕНЬ(D4+1;-1) - прибавляем один день к текущей дате и пытаемся спустится на один рабочий день назад тем самым получаем, если текущая дата не выходной, то остается эта дата, если выходной (суббота или воскресенье) - то берем предыдущий рабочий день( пятницу) аналогично с РАБДЕНЬ(E4-1;1), только наоборот, если конечная дата - выходной, то берем для расчетов понедельник
Надеюсь с объяснением будет понятно, как работает формулаMCH
Сообщение отредактировал MCH - Воскресенье, 05.08.2012, 12:45
Дааа сильно. С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.
Первая часть стала понятной (складываение часов). ДЕНЬНЕД в сравнении <6 это логический результат (сразу не увидел и не мог понять зачем оно) с РАБДЕНЬ пока не осознаю - в плане как мысль могла дойти до использования этого (т.е. как удалось увидеть, что это так можно использовать) или иными словами скажи мне, что есть такая функция и такая вот задача - не догадался бы что эту функцию тут можно применить (ну сошлемся на дико малый опыт)
Quote (MCH)
Единственная проблема, если начальная или конечная дата попадает на выходной
А вот этим уже не отсеклись такие варианты ?
Code
(ДЕНЬНЕД(D4;2)<6)
Мне кажется там достаточно прибавить число рабочих дней между НАЧАЛОМ и КОНЦОМ умноженное на длину 1-го дня в часах, в случае если эта разница больше 1 например:
Я опять со своим прямолинейным ЕСЛИ (пока изящная логика мне недоступна пытался ввернуть СУММУПРОИЗВЕДЕНИЙ - что-то не сработало)
Или нет даже вот так
Code
-ПРОИЗВЕД(ЧИСТРАБДНИ(D4;E4);2;$C$1)
А еще подумав вот так
Code
+(ЧИСТРАБДНИ(D4;E4)-2)*$C$1
Чудеса какие-то результаты Вашей и модифицированной мною Вашей формулы практически везде совпали кроме - пометил ячейки желтым (причем последняя колонка сравнения результата Вашего и моего не дает никакого результата - странно) изменил формат ячеек совпало все
Дааа сильно. С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.
Первая часть стала понятной (складываение часов). ДЕНЬНЕД в сравнении <6 это логический результат (сразу не увидел и не мог понять зачем оно) с РАБДЕНЬ пока не осознаю - в плане как мысль могла дойти до использования этого (т.е. как удалось увидеть, что это так можно использовать) или иными словами скажи мне, что есть такая функция и такая вот задача - не догадался бы что эту функцию тут можно применить (ну сошлемся на дико малый опыт)
Quote (MCH)
Единственная проблема, если начальная или конечная дата попадает на выходной
А вот этим уже не отсеклись такие варианты ?
Code
(ДЕНЬНЕД(D4;2)<6)
Мне кажется там достаточно прибавить число рабочих дней между НАЧАЛОМ и КОНЦОМ умноженное на длину 1-го дня в часах, в случае если эта разница больше 1 например:
Я опять со своим прямолинейным ЕСЛИ (пока изящная логика мне недоступна пытался ввернуть СУММУПРОИЗВЕДЕНИЙ - что-то не сработало)
Или нет даже вот так
Code
-ПРОИЗВЕД(ЧИСТРАБДНИ(D4;E4);2;$C$1)
А еще подумав вот так
Code
+(ЧИСТРАБДНИ(D4;E4)-2)*$C$1
Чудеса какие-то результаты Вашей и модифицированной мною Вашей формулы практически везде совпали кроме - пометил ячейки желтым (причем последняя колонка сравнения результата Вашего и моего не дает никакого результата - странно) изменил формат ячеек совпало всеALARMus
А как посмотреть саму функцию (облазил менюшки не нашел) ?
Подозреваю, что у Вас в Excel в меню (на ленте) нет вкладки "Разработчик". Как отобразить ее: http://msdn.microsoft.com/ru-ru/library/bb608625.aspx . Или можете нажать Alt+F11 и окажетесь в редакторе VB. Там в Module1 найдете функцию по строке: Public Function NetWorkTime .
Quote (ALARMus)
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.
А я так вообще ячейки считаю, как зарубки на сосне
Quote (ALARMus)
А как посмотреть саму функцию (облазил менюшки не нашел) ?
Подозреваю, что у Вас в Excel в меню (на ленте) нет вкладки "Разработчик". Как отобразить ее: http://msdn.microsoft.com/ru-ru/library/bb608625.aspx . Или можете нажать Alt+F11 и окажетесь в редакторе VB. Там в Module1 найдете функцию по строке: Public Function NetWorkTime .
Quote (ALARMus)
С разных концов мы пошли к решению задачи Я вычитаю нерабочее время, Вы складываете рабочее.
А я так вообще ячейки считаю, как зарубки на сосне Gustav
Никак не надо. При работе моего алгоритма на рабочем листе физически ничего не происходит. Никакие ячейки не заполняются значениями и не очищаются. Всё "прокручивается в уме" компьютера на уровне операций с адресами ячеек. Если и говорить о каком-то хранении, то не более чем о хранении кода макросов в модуле. Сейчас это 117 строк (с учетом пустых), в трети из которых тупо прописаны короткие дни, праздники и переносы.
И никаких существенных IFов и больше/меньше с датами!
Quote (ALARMus)
Не совсем пока осознаю как диапазон хранить
Никак не надо. При работе моего алгоритма на рабочем листе физически ничего не происходит. Никакие ячейки не заполняются значениями и не очищаются. Всё "прокручивается в уме" компьютера на уровне операций с адресами ячеек. Если и говорить о каком-то хранении, то не более чем о хранении кода макросов в модуле. Сейчас это 117 строк (с учетом пустых), в трети из которых тупо прописаны короткие дни, праздники и переносы.
И никаких существенных IFов и больше/меньше с датами!Gustav
Нет, это не час 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
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 Gustav