У меня есть формула для извлечения чисел из ответа Google XML, которые могут быть:
9 часов 24 минут
10 h 0 min
9 h 20 min
11 h 13 min
10 Std 55 min
9 timmar 5 min
19 min
Вот текущая формула ( значение указывается в BZ1):
=IFERROR(IF(VALUE(IF(FIND("min";BZ1;1)=11;MID(BZ1;FIND("min";BZ1;1)-2;1);MID(BZ1;FIND("min";BZ1;1)-3;2)))<30; VALUE(LEFT(BZ1;FIND("h";BZ1;1)-2))&","&5;VALUE(LEFT(BZ1;FIND("h";BZ1;1)-2))+1);"")
Формула округляет часы и минуты до часов, например
1 h 39 min
-> 2
10 h 12 min
-> 10,5
9 h 20 min
-> 9,5
Существует проблема, связанная с тем, что она не может учитывать изменения языка для hours
и min
.
Есть ли возможность заставить его работать так:
- Если есть только номер (дело
19 min
) -> номер извлечения - Если есть два числа (регистр
1 h 39 min
) -> извлечь первое число как часы, затем из двух последних пробелов число как минуты
РЕДАКТИРОВАТЬ:
Проверьте, сколько чисел в ячейке (цель в CA25):
SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{1;2;3;4;5;6;7;8;9};)))>1
Если больше 1
LEFT(CA25;(FIND(" ";CA25;1)-1))&TRIM(MID(SUBSTITUTE(CA25;" ";REPT(" ";50));100;50))
Если меньше 1
LEFT(CA25;SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};""))))
Все вместе
=IF(SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{1;2;3;4;5;6;7;8;9};)))>1;LEFT(CA25;(FIND(" ";CA25;1)-1))&TRIM(MID(SUBSTITUTE(CA25;" ";REPT(" ";50));100;50));LEFT(CA25;SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};"")))))
В результате получается:
Теперь их нужно преобразовать в часы и округлить до одного часа
РЕДАКТИРОВАТЬ 2:
Вот формула (цель BZ1):
=IFERROR(IF(LEN(BZ1)-LEN(SUBSTITUTE(BZ1;" ";""))>2;LEFT(BZ1;(FIND(" ";BZ1;1)-1))+IF(TRIM(MID(SUBSTITUTE(BZ1;" ";REPT(" ";50));100;50))<60;1;1);IF(LEFT(BZ1;SUM(LEN(BZ1)-LEN(SUBSTITUTE(BZ1;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};""))))<60;1;1));"")