пример 1: 1 минута и 40 секунд пример 2: 55 минут пример 3: 4 часа пример 4: 7 часов и 30 минут пример 5: 1 день и 3 часа пример 6: 11 недель и 1 день пример 7: 8лет и 10мес
везде разный текст и разные окончания, таких дат в книге сотнями..возможно хоть как нибудь автоматизировать формулу, чтоб она понимала каждую ячейку иниверсально и переводила ее либо в дни либо в часы, да хоть в секунды. к примеру 2 дня и 12 часов переводит в 2,5 дня.
Alikadievmr, Приведите данные к единообразию, можно с помощью инструмента "Найти и выделить" >> "Заменить" (ctrl + H), разбейте текст по столбцам. ( Данные >>> Текст по столбцам), потом спокойно переводите все в любой вид.
Есть идеи. Есть. Макросом можно без всяких дополнительных преобразований. Писать неинтересно. ждите желающего.
Для формул подправить все равно надо. Выделить диапазон. Найти/Заменить: "нед" на " нед" "мес" на " мес" и т.д. по всем началам слов. Это для отделения чисел от текста пробелом.
Далее добавим пробелы вначале и задвоим остальные (для корректного извлечения чисел): =ПОДСТАВИТЬ(" "&СЖПРОБЕЛЫ(A4);" ";" ")
Осталось определить каждую часть и умножить (разделить) на ее долю. Формула для всех одинакова: ПСТР(B2&"0000";ПОИСК("текст";B2&"0000текст")-4;3)/доля Вот она: =ПСТР(B3&"0000";ПОИСК("год";B3&"0000год")-4;3)*365+ПСТР(B3&"0000";ПОИСК("мес";B3&"0000мес")-4;3)*30+ПСТР(B3&"0000";ПОИСК("ден";B3&"0000ден")-4;3)+ПСТР(B3&"0000";ПОИСК("час";B3&"0000час")-4;3)/24+ПСТР(B3&"0000";ПОИСК("мин";B3&"0000мин")-4;3)/1440+ПСТР(B3&"0000";ПОИСК("сек";B3&"0000сек")-4;3)/86400 Целая часть - дни, после запятой - время. Задать ячейкам нужный формат.
P.S. Недели упустил. И "год"-"лет". Добавляйте сами, логика должна быть понятна
Function AmDays(r As Range) As Double
Dim aSpl
Dim dSum As Double, k As Double
Dim j As Long
aSpl = Split(r.Value, " ")
For j = 1 To UBound(aSpl)
k = 0
Select Case Left$(aSpl(j), 1)
Case "г": k = 365
Case "н": k = 7
Case "д": k = 1
Case "ч": k = 1 / 24
Case "с": k = 1 / 86400
Case "м"
If Left$(aSpl(j), 2) = "ме" Then _
k = 30 Else: k = 1 / 1440
End Select
If k > 0 Then dSum = dSum + aSpl(j - 1) * k
Next j
AmDays = dSum
End Function
Разделением данных код не грузил. Данные предварительно обработать:
Цитата
Выделить диапазон. Найти/Заменить: "нед" на " нед", "мес" на " мес" и т.д. по всем началам слов. Это для отделения чисел от текста пробелом.
не знаю почему но в каждом варианте одна из ячеек не хочет работать. vikttur в вашем примере не работает 12 лет. а в первом примере я ни как не смог 485 недель заставить работать. Вариант с макросом супер! правда как его исправить?
Alikadievmr написал: пример с 485 недель почему не работает?
Потому что в 4 символа не попадает старший разряд числа. При наличии 3-значных нужно пробел заменять не на 2, а на 3 пробела и извлекать не 4, а 6 или 7 символов... Где-то так.
помогли с формулой VBA и очен признателен, вот прос еще, как я могу добавить в нее еще преобразователи
2к в 2000 2кк в 20000 2ккк в 200000 350м в 350000000 7,65м в 7650000 (комбинаций много)
пользуюсь вот этим примером VBA
Option Explicit
Function AmDays(r As Range) As Double Dim aSpl Dim dSum As Double, k As Double Dim j As Long aSpl = Split(r.Value, " ")
For j = 1 To UBound(aSpl) k = 0
Select Case Left$(aSpl(j), 1) Case "г": k = 365 Case "л": k = 365 Case "н": k = 7 Case "д": k = 1 Case "ч": k = 1 / 24 Case "с": k = 1 / 86400 Case "м" If Left$(aSpl(j), 2) = "ме" Then _ k = 30 Else: k = 1 / 1440 End Select
If k > 0 Then dSum = dSum + aSpl(j - 1) * k Next j
Вопрос не связан с темой, ведь это уже не о преобразовании времени. Создайте новую тему с новым примером и с названием, отражающим суть задачи. Можно добавить ссылку на эту тему.