Страницы: 1
RSS
Подсчет разницы времени в скобках в ячейке
 
Всем привет!  :)  
Необходимо получить общее время из интервалов в скобках.
Например v4-47156(01:37-02:23)+47160(23:47-00:04). В первой скобке 26 минут, во второй 17 минут. Итого 43 минуты.
Затруднение в расцеплении скобок, ладно если их две, а если три, или четыре.
И вообще есть сомнения, что такое можно сделать формулой.
Кто что скажет?
 
Цитата
Sergey_85 пишет: есть сомнения, что такое можно сделать формулой
аналогично
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
На vba такой код сложно запилить?
 
На ум приходит, что только УДФ Вам поможет.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Sergey_85 пишет: На vba такой код сложно запилить?
нет
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Sergey_85, функция возвращает время - установите нужный формат ячеек
Код
Function S_85(ByVal x) As Date
Static re As Object
Dim y
If re Is Nothing Then
  Set re = CreateObject("vbscript.regexp")
  re.Global = True
  re.Pattern = "\((\d\d:\d\d)-(\d\d:\d\d)\)"
End If
For Each x In re.Execute(x)
  y = CDate(x.submatches(1)) - CDate(x.submatches(0))
  S_85 = S_85 + y - (y < 0)
Next
End Function
 
 
Казанский, скажите, пожалуйста, а как работает поправка минусовой разницы в этой строке?
Код
S_85 = S_85 + y - (y < 0)
Я не могу пока что понять, увы.
Спасибо.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, логическое значение в арифметическом выражении интерпретируется как False=0, True=-1.
Если разница <0, то к дате/времени добавляется единица, т.е. одни сутки.
 
Казанский, о, примите мою благодарность. Про 1 и 0 я знал, а то, что 1 - это 1 день или 24 часа в данном случае - я не догадался. То что корректировка на 24 часа в случае минуса нужна я догадывался, но так изящно решить - нет. Спасибо за науку. _/\_

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Большое спасибо всем откликнувшимся. Особенное спасибо Казанскому, все работает.
:)
 
Цитата
Sergey_85 пишет: В первой скобке 26 минут
это как? по-моему их там 46. итого 46+17=63 (1час 3мин)
или я так что-то понял?
Цитата
Sergey_85 пишет: сомнения, что такое можно сделать формулой
это Вы просто формулы не любите  :(
Изменено: Nic70y - 12.11.2014 16:33:12 (сократил)
 
Nic70y, волшебная формула. Есть над чем подумать. Спасибо. Вот, только пересчёт по строке:
Код
F4-51001(13:07-13:32)+51003(12:38-12:53)+51020(11:49-12:18)+51012(11:03-11:42)+51009(10:26-10:50)+51002(10:00-10:15)
совпадает с УДФ, но разнится с результатом Вашей формулы на 15 минут.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Надо немного доработать (по длине строки) в файле заменил на 317.
 
Nic70y, да с длинной строки я разобрался, но увидел, что Ваша формула обрабатывает урезанный текст оригинала. ;) На оригинале она выдаёт ошибочный результат. Нуждается в небольшой доработке, а в целом очень хороший вариант. Спасибо за расширение горизонта моих познаний в экселе. _/\_

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Nic70y, или может еще кто нибудь сможет подсказать.. подскажите как сделать тоже самое, но только с форматом времени 15-21 (ЧЧ-ЧЧ)
 
Александр Ковалев, с Вас файл-пример (что есть и что надо), если Ваш вопрос в тему. Иначе создайте новую с файлом-примером.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,вот пример, это все думаю в тему)
 
Александр Ковалев, как понял.
Код
=ТЕКСТ(ЛЕВБ(A22;ПОИСК("-";A22)-1)/24;"чч:мм")&"-"&ТЕКСТ(ПСТР(A22;ПОИСК("-";A22)+1;2)/24;"чч:мм")

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,спасибо! практически то что мне нужно было, я ее немного переделал, вот что получилось


Код
=(ТЕКСТ(ЛЕВБ(A22;ПОИСК("-";A22)-1)/24;"чч:мм")-ТЕКСТ(ПСТР(A22;ПОИСК("-";A22)+1;2)/24;"чч:мм"))*24
 
вот только не все равно не могу пока понять как сделать тоже самое со вторым вариантом 15:00-21:00

итог должен быть тоже разница между часами, но с учетом минут.
 
Александр Ковалев, если ищите разницу времени, то отнимать от большего меньшее. Как понял.
Код
=ВРЕМЗНАЧ(ПСТР(A22;ПОИСК("-";A22)+1;255)&ПОВТОР(":00";1-ДЛСТР(ПСТР(A22;ПОИСК("-";A22)+1;255))+ДЛСТР(ПОДСТАВИТЬ(ПСТР(A22;ПОИСК("-";A22)+1;255);":";))))-ВРЕМЗНАЧ(ЛЕВБ(A22;ПОИСК("-";A22)-1)&ПОВТОР(":00";1-ДЛСТР(ЛЕВБ(A22;ПОИСК("-";A22)-1))+ДЛСТР(ПОДСТАВИТЬ(ЛЕВБ(A22;ПОИСК("-";A22)-1);":";))))
Что Вы будете делать если интервал времени у Вас будет, например, 20:00-06:00?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,к счастью у меня такого не будет)) период времени с 10:00 до 22:00 максимум. а если будет -, то буду использовать =ЕСЛИ
Страницы: 1
Наверх