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

Вход

Регистрация

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

 

= Мир MS Excel/суммировать интервалы времени с учетом перекрытия - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
суммировать интервалы времени с учетом перекрытия
hrnv Дата: Вторник, 24.09.2013, 20:09 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Здравствуйте,
задача просуммировать время простоя оборудования по данным следящей системы, фиксирующей момент отключения (начало простоя) и момент включения (конец простоя) для каждого станка. При этом нужно учесть перекрытие - если одновременно стоят несколько станков, то считать не сумму простоя каждого станка, а время от момента когда встал первый из группы до времени когда заработал последний из группы - это меньше
вроде начал что-то через логические зависимости строить, но как то многовато условий в строке пр2 просматривается на месте "если...".
Посоветуйте, пожалуйста, может другой путь есть.
Данные сортированы по убыванию «начало простоя».
К сообщению приложен файл: prostoy.xlsx (11.0 Kb)


Сообщение отредактировал hrnv - Вторник, 24.09.2013, 20:11
 
Ответить
СообщениеЗдравствуйте,
задача просуммировать время простоя оборудования по данным следящей системы, фиксирующей момент отключения (начало простоя) и момент включения (конец простоя) для каждого станка. При этом нужно учесть перекрытие - если одновременно стоят несколько станков, то считать не сумму простоя каждого станка, а время от момента когда встал первый из группы до времени когда заработал последний из группы - это меньше
вроде начал что-то через логические зависимости строить, но как то многовато условий в строке пр2 просматривается на месте "если...".
Посоветуйте, пожалуйста, может другой путь есть.
Данные сортированы по убыванию «начало простоя».

Автор - hrnv
Дата добавления - 24.09.2013 в 20:09
Nic70y Дата: Вторник, 24.09.2013, 20:40 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9047
Репутация: 2382 ±
Замечаний: 0% ±

Excel 2010
Код
=МАКС(--B2:B11)-МИН(--A2:A11)

формула массива, вводится одновременным нажатием Ctrl, Shift и Enter
Угадал?


ЮMoney 41001841029809
 
Ответить
Сообщение
Код
=МАКС(--B2:B11)-МИН(--A2:A11)

формула массива, вводится одновременным нажатием Ctrl, Shift и Enter
Угадал?

Автор - Nic70y
Дата добавления - 24.09.2013 в 20:40
Rustem Дата: Вторник, 24.09.2013, 22:06 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 281
Репутация: 48 ±
Замечаний: 0% ±

Excel 2013
Код
{=СУММ((B2:B11-A2:A11)*(СЧЁТЕСЛИМН($A$2:$A$11;"<="&$B$2:$B$11; $B$2:$B$11;">="&$A$2:$A$11)=1))}


WMR: R183220163895
 
Ответить
Сообщение
Код
{=СУММ((B2:B11-A2:A11)*(СЧЁТЕСЛИМН($A$2:$A$11;"<="&$B$2:$B$11; $B$2:$B$11;">="&$A$2:$A$11)=1))}

Автор - Rustem
Дата добавления - 24.09.2013 в 22:06
hrnv Дата: Вторник, 24.09.2013, 22:49 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Nic70y, получается общее время от первого стопа до последнего пуска. тоже самое, что =B2-A11
фактически бОльшую часть времени все станки работают, иногда один встает, иногда несколько. И только в последнем случае учитываем перекрытие времени. А виден этот случай - из сравнивания концов соседних временнЫх отрезков - там где в D:G получается Истина - там перекрытие.
 
Ответить
СообщениеNic70y, получается общее время от первого стопа до последнего пуска. тоже самое, что =B2-A11
фактически бОльшую часть времени все станки работают, иногда один встает, иногда несколько. И только в последнем случае учитываем перекрытие времени. А виден этот случай - из сравнивания концов соседних временнЫх отрезков - там где в D:G получается Истина - там перекрытие.

Автор - hrnv
Дата добавления - 24.09.2013 в 22:49
hrnv Дата: Вторник, 24.09.2013, 22:57 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Rustem, правда пришлось чуть подправить под мой русский excel но вроде не ошибся. Нули...
К сообщению приложен файл: prostoy2.xlsx (12.6 Kb)
 
Ответить
СообщениеRustem, правда пришлось чуть подправить под мой русский excel но вроде не ошибся. Нули...

Автор - hrnv
Дата добавления - 24.09.2013 в 22:57
Pelena Дата: Вторник, 24.09.2013, 23:00 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19427
Репутация: 4568 ±
Замечаний: ±

Excel 365 & Mac Excel
правда пришлось чуть подправить под мой русский excel

Для этого есть волшебная кнопка в посте слева от формулы


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
правда пришлось чуть подправить под мой русский excel

Для этого есть волшебная кнопка в посте слева от формулы

Автор - Pelena
Дата добавления - 24.09.2013 в 23:00
MCH Дата: Среда, 25.09.2013, 00:18 | Сообщение № 7
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

UDF
К сообщению приложен файл: prostoy2.xls (38.0 Kb)
 
Ответить
СообщениеUDF

Автор - MCH
Дата добавления - 25.09.2013 в 00:18
Gustav Дата: Среда, 25.09.2013, 01:16 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2826
Репутация: 1190 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
hrnv, вот вам несколько формул в Окне отладки для взбудораживания абстрактного воображения:

[vba]
Код
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Cells.Count
   10   
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Areas.Count
   2   
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Address
$K$1:$O$1,$Q$1:$U$1
[/vba]
Перечисленные диапазоны как бы соответствуют вашим черным заливкам в таблице (смотрите по колонкам листа), а результат третьей формулы - двум рыжим заливкам T1 и T2.

Идея в том, чтобы смоделировать секунды или минуты ячейками рабочего листа. Далее можно не совсем традиционно применить операции Union или Intersect и эффектно получить простое решение задачи без программирования достаточно утомительной в данном случае традиционной логики.

Сейчас не имею возможности писать подробнее, но можно почитать мои более ранние упражнения на эту тему: http://www.excelworld.ru/forum/2-2110-23120-16-1343991145 - начиная с моего сообщения по ссылке и последующие мои в той же теме, я там довольно подробно разжевал подход, особенно в своём заключительном выступлении в той теме: http://www.excelworld.ru/forum/2-2110-23232-16-1344189074


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

Сообщение отредактировал Gustav - Среда, 25.09.2013, 01:20
 
Ответить
Сообщениеhrnv, вот вам несколько формул в Окне отладки для взбудораживания абстрактного воображения:

[vba]
Код
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Cells.Count
   10   
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Areas.Count
   2   
? Union(Range("K1:O1"),Range("L1:M1"),Range("M1:N1"),Range("Q1:S1"),Range("R1:U1")).Address
$K$1:$O$1,$Q$1:$U$1
[/vba]
Перечисленные диапазоны как бы соответствуют вашим черным заливкам в таблице (смотрите по колонкам листа), а результат третьей формулы - двум рыжим заливкам T1 и T2.

Идея в том, чтобы смоделировать секунды или минуты ячейками рабочего листа. Далее можно не совсем традиционно применить операции Union или Intersect и эффектно получить простое решение задачи без программирования достаточно утомительной в данном случае традиционной логики.

Сейчас не имею возможности писать подробнее, но можно почитать мои более ранние упражнения на эту тему: http://www.excelworld.ru/forum/2-2110-23120-16-1343991145 - начиная с моего сообщения по ссылке и последующие мои в той же теме, я там довольно подробно разжевал подход, особенно в своём заключительном выступлении в той теме: http://www.excelworld.ru/forum/2-2110-23232-16-1344189074

Автор - Gustav
Дата добавления - 25.09.2013 в 01:16
Формуляр Дата: Среда, 25.09.2013, 13:47 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
На формулах со вспом. столбцами:
Во вспомогательных ст-цах считаем число отключённых на момент начала и конца.
Потом суммируем только то время, когда отключённых нет.
К сообщению приложен файл: prostoy.xls (36.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеНа формулах со вспом. столбцами:
Во вспомогательных ст-цах считаем число отключённых на момент начала и конца.
Потом суммируем только то время, когда отключённых нет.

Автор - Формуляр
Дата добавления - 25.09.2013 в 13:47
hrnv Дата: Среда, 25.09.2013, 22:02 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Объем - от 500 до 1500 строк. Интервал времени - сутки.
Вот идея осенила
И если уж без программирования не обойтись, то может создать логический массив длиной в сутки = 86400секунд и просматривая строки листа менять на истину элементы массива, соответствующие секундам простоя.
Ну и пусть хоть 2минуты считает, да хоть и 5мин. Зато надежно.
Сам к сожалению на VBA только со стороны поглядываю.
 
Ответить
СообщениеОбъем - от 500 до 1500 строк. Интервал времени - сутки.
Вот идея осенила
И если уж без программирования не обойтись, то может создать логический массив длиной в сутки = 86400секунд и просматривая строки листа менять на истину элементы массива, соответствующие секундам простоя.
Ну и пусть хоть 2минуты считает, да хоть и 5мин. Зато надежно.
Сам к сожалению на VBA только со стороны поглядываю.

Автор - hrnv
Дата добавления - 25.09.2013 в 22:02
hrnv Дата: Среда, 25.09.2013, 22:12 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
MCH,
Мощно, слов нет. Такой длинный код. И даже правильно посчитал, но только 1 раз, к сожалению (на 1 листе).
Дело в том, что время обеда в простоях не учитывается. Формулами учел обед на соседнем листе - и тут функция стала слегка обманывать. Ума не приложу, почему. Попробовал в аргументах оставить только значения - не помогло. Может я что не так делаю?
К сообщению приложен файл: prostoy_test.xlsm (22.7 Kb)
 
Ответить
СообщениеMCH,
Мощно, слов нет. Такой длинный код. И даже правильно посчитал, но только 1 раз, к сожалению (на 1 листе).
Дело в том, что время обеда в простоях не учитывается. Формулами учел обед на соседнем листе - и тут функция стала слегка обманывать. Ума не приложу, почему. Попробовал в аргументах оставить только значения - не помогло. Может я что не так делаю?

Автор - hrnv
Дата добавления - 25.09.2013 в 22:12
hrnv Дата: Среда, 25.09.2013, 22:26 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Формуляр,
Хорошая идея, чем учитывать черные полоски с перекрытием - лучше белые просветы посчитать и отнять от общего интервала.
Только вот края просветов на мой взгляд определить столь же затруднительно как и учесть перекрытие. Сделал тестовый файл - с соответствием рисунка и данных и разными вариантами перекрытия - prostoy_test.xlsm. Отсортировал как в Вашем варианте (первый столбец - по возрастанию) подставил, считает неправильно.
 
Ответить
СообщениеФормуляр,
Хорошая идея, чем учитывать черные полоски с перекрытием - лучше белые просветы посчитать и отнять от общего интервала.
Только вот края просветов на мой взгляд определить столь же затруднительно как и учесть перекрытие. Сделал тестовый файл - с соответствием рисунка и данных и разными вариантами перекрытия - prostoy_test.xlsm. Отсортировал как в Вашем варианте (первый столбец - по возрастанию) подставил, считает неправильно.

Автор - hrnv
Дата добавления - 25.09.2013 в 22:26
Rustem Дата: Среда, 25.09.2013, 23:37 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 281
Репутация: 48 ±
Замечаний: 0% ±

Excel 2013
Цитата
Rustem, правда пришлось чуть подправить под мой русский excel но вроде не ошибся. Нули...


Нули...
Два щелчка по Вашим датам и все посчитает. Смотрите, правильно?
К сообщению приложен файл: 7358454.xlsx (12.4 Kb)


WMR: R183220163895
 
Ответить
Сообщение
Цитата
Rustem, правда пришлось чуть подправить под мой русский excel но вроде не ошибся. Нули...


Нули...
Два щелчка по Вашим датам и все посчитает. Смотрите, правильно?

Автор - Rustem
Дата добавления - 25.09.2013 в 23:37
hrnv Дата: Четверг, 26.09.2013, 00:15 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
Rustem,
подправил исходные данные - и считать легче и разные варианты перекрытия есть.
результат есть, но неправильный
К сообщению приложен файл: prostoy_test2.xlsx (13.2 Kb)
 
Ответить
СообщениеRustem,
подправил исходные данные - и считать легче и разные варианты перекрытия есть.
результат есть, но неправильный

Автор - hrnv
Дата добавления - 26.09.2013 в 00:15
hrnv Дата: Четверг, 26.09.2013, 00:24 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
И ещё один вариант придумался, но тоже на VBA.
Если идти в порядке возрастания времени (снизу вверх), то нижняя строка содержит время начала tn1 и время конца tk1, строка над ней tn2 и tk2 и т.д.
Идем снизу вверх и считаем тоже.
Данные записаны так, что априори tn1<= tn2
Если tk1<tn2 – второй отрезок начался после конца первого - перекрытия нет, переходим на строку выше и работаем с парой 2-3
Иначе, второй отрезок начался внутри первого и возможны 2 варианта расположения конца второго отрезка – до конца первого или после.
Если конец второго до конца первого – то первый полностью перекрывает второго – строку, содержащую второй отрезок – удаляем
Если конец второго после конца первого – удлиняем конец первого , после чего строку, содержащую второй отрезок – удаляем.
И начинаем сравнивать первую строку с новой второй строкой.

Если tk1>=tn2 и tk2>tk1, то tk1:= tk2 , удаляем строку 2, сравниваем новую пару 1 и 2
Если tk1>=tn2 и tk2<=tk1, то удаляем строку 2, сравниваем новую пару 1 и 2
Если tk1<tn2, то сравниваем пару 2 и 3
 
Ответить
СообщениеИ ещё один вариант придумался, но тоже на VBA.
Если идти в порядке возрастания времени (снизу вверх), то нижняя строка содержит время начала tn1 и время конца tk1, строка над ней tn2 и tk2 и т.д.
Идем снизу вверх и считаем тоже.
Данные записаны так, что априори tn1<= tn2
Если tk1<tn2 – второй отрезок начался после конца первого - перекрытия нет, переходим на строку выше и работаем с парой 2-3
Иначе, второй отрезок начался внутри первого и возможны 2 варианта расположения конца второго отрезка – до конца первого или после.
Если конец второго до конца первого – то первый полностью перекрывает второго – строку, содержащую второй отрезок – удаляем
Если конец второго после конца первого – удлиняем конец первого , после чего строку, содержащую второй отрезок – удаляем.
И начинаем сравнивать первую строку с новой второй строкой.

Если tk1>=tn2 и tk2>tk1, то tk1:= tk2 , удаляем строку 2, сравниваем новую пару 1 и 2
Если tk1>=tn2 и tk2<=tk1, то удаляем строку 2, сравниваем новую пару 1 и 2
Если tk1<tn2, то сравниваем пару 2 и 3

Автор - hrnv
Дата добавления - 26.09.2013 в 00:24
hrnv Дата: Пятница, 27.09.2013, 21:43 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

2003 2010
MCH,
приношу извинения <_<
так лихо перерывы в работе учел - аж самому смешно - понял только когда сам процедуру написал.
Ваша функция прекрасно работает, если разберусь, поправлю, чтобы время перерывов снималось,а скорее всего его достаточно просто вычитать.
Огромное спасибо за помощь!
Прицепляю рабочий лист с журнала отключений (часть строк удалил чтобы в 100kb поместилось) - все прекрасно работает
С уважением, hrnv
К сообщению приложен файл: tmp61.xlsm (96.2 Kb)
 
Ответить
СообщениеMCH,
приношу извинения <_<
так лихо перерывы в работе учел - аж самому смешно - понял только когда сам процедуру написал.
Ваша функция прекрасно работает, если разберусь, поправлю, чтобы время перерывов снималось,а скорее всего его достаточно просто вычитать.
Огромное спасибо за помощь!
Прицепляю рабочий лист с журнала отключений (часть строк удалил чтобы в 100kb поместилось) - все прекрасно работает
С уважением, hrnv

Автор - hrnv
Дата добавления - 27.09.2013 в 21:43
  • Страница 1 из 1
  • 1
Поиск:

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