1

У меня есть ряд данных, которые выводятся из приложения в следующем формате.

8d 21h 33m  
30s  
6m 32s  
1m 40s  
54m 6s  
11m 32s  
5d 3h 34m  
30s  
7m 40s  
19h 57m 49s  
1h 36m 9s  
1m 3s  
5m 11s  
19m 39s  

Я хотел бы показать это как количество секунд в следующем столбце в Excel. Если бы я делал это на php или python, я мог бы разбить строку на каждую букву (h & m), но я понятия не имею, как это сделать в Excel. Кто-нибудь может указать мне правильное направление?

2 ответа2

1

Эта функция должна работать:

Public Function to_seconds(data As String)
    Dim LArray() As String
    LArray = Split(data)
    total_time = 0
    For i = 0 To UBound(LArray)
        m = LArray(i)
        If m <> "" Then
            q = Right(m, 1)
            tt = Left(m, Len(m) - 1)
            ta = 0
            Select Case q
                Case "d"
                    ta = 86400
                Case "h"
                    ta = 3600
                Case "m"
                    ta = 60
                Case "s"
                    ta = 1
            End Select
            If IsNumeric(tt) Then
                total_time = total_time + (Int(tt) * ta)
            End If
        End If
    Next i
    to_seconds = total_time
End Function

Откройте VBA /Macros с помощью ALT+ F11 и в ThisWorkbook вставьте новый модуль. Вставьте код с правой стороны.

Если ваши данные находятся в ячейке A1 тогда ячейка B1 должна быть =to_seconds(A1) .

1

Это в основном не-VBA версия ответа jcbermu. Откройте диспетчер имен и создайте имя с помощью этой формулы, где A1 - первая строка ваших данных.

=EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A1,"d","*86400+"),"h","*3600+"),"m","*60+"),"s","*1+")&"0")

Дайте ему имя, например, eval и type =eval в ячейке и выполните автоматическое заполнение.

Evaluate - это скрытая функция в Excel, которая работает только тогда, когда она определена в менеджере имен. Просто ввод формулы в ячейку обычно не работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .