Страницы: 1
RSS
Преобразование текстовой записи в число с отбрасыванием лишнего
 
Добрый день!
Честно, гуглил минут 30, не нашел простого и понятного решения.

Суть:

Имеется обновляемый каждый день файл.
В нём стоит колонка: Длительность.
По строкам в ней идут записи вида "2 мин, 8 сек"

Задача:

Задача получить в соседней ячейке значение либо в минутах, либо в секундах.

Подскажите, люди добрые, как это можно сделать?
 
iRon-k,
Ещё бы вы потратили пару минут дополнительно к потраченным 30, чтобы прочитать вот это )
 
А в чём, собственно, дело?
Приложить файл с одной строкой?

Погуглить готовые решения?
Посмотрел, и в разделе даты и времени решения не нашлось.
 
Цитата
iRon-k написал:
А в чём, собственно, дело?
Собственно пробуйте:
=ЛЕВСИМВ(A1)*60+ПСТР(A1;8;1)
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
iRon-k написал: Приложить файл с одной строкой?
нет с несколькими, и желаемым результатом, а то
Цитата
либо в минутах, либо в секундах.
смущает, да и что у вас там с вариантами не понятно. Например, есть ли в ваших записях
Цитата
записи вида "2 мин, 8 сек"
такие как 8 сек или 2 мин или ....
По вопросам из тем форума, личку не читаю.
 
Максим В., благодарю.
Но не хватает универсальности, ведь может быть не 2, а 15 минут, и тогда формулу перекосит, насколько я понимаю?
 
iRon-k, Вам об этом писали выше.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Ок
 
UDF
Код
Function iSec(cell$) As Double
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "\d+ ?(?=мин)"
     iSec = .Execute(cell)(0)
     .Pattern = "\d+ ?(?=сек)"
     iSec = iSec * 60 + .Execute(cell)(0)
 End With
End Function
 
=ЛЕВСИМВ(A2;2)*60+ПСТР(A2;ПОИСК(",";A2)+2;2)
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Не используйте копку цитирования для бездумного копирования [МОДЕРАТОР]

Максим В., благодарю!
Не учёл, что у меня встречаются записи вида "15 сек", но решил данную проблему условием.
Окончательный вариант взятый в работу:
Код
=ЕСЛИ(ДЛСТР(C4)<7;ЛЕВСИМВ(C4;2);ЛЕВСИМВ(C4;2)*60+ПСТР(C4;ПОИСК(",";C4)+2;2)) 

Премного благодарен!

Kuzmich, благодарю и за Ваш вариант.
К сожалению, на данном этапе не могу его осилить своим мозгом, поэтому воспользовался формульным подходом!

Большое спасибо, коллеги!
 
Цитата
не могу его осилить своим мозгом
UDF в стандартный модуль. В ячейку =iSec(ячейка с мин. и сек), например =iSec(A1)
Изменено: Kuzmich - 14.05.2020 14:14:36
 
Уважаемый Kuzmich, одно соображение по быстродействию. Если первые две строки функции из #9 заменить на
Код
Function iSec(cell$) As Double
 Static oReg As Object
 If oReg Is Nothing Then
   Set oReg = CreateObject("VBScript.RegExp")
 End If
 With oReg
то у меня при 100 000 вызовах функция ускоряется в 70 раз. Для этого "трюка" есть термин "синглтон".
Изменено: sokol92 - 14.05.2020 14:20:12
Владимир
 
sokol92,
Спасибо за соображение. Удачи!
 
Цитата
Kuzmich написал:
UDF в стандартный модуль. В ячейку =iSec(ячейка с мин. и сек), например =iSec(A1)
не, проблема в том, что всё это у меня Гугл.Таблицах)
И учитывая, сколько калькуляций это делает, да, знатно вешает файл, который без того уже тяжел.
Попробую покурить ,как это воткнуть в Гугл.Таблы
 
Можно ещё и макрофункцию ВЫЧИСЛИТЬ привлечь.
Страницы: 1
Наверх