Превосходный текст во времени

У меня есть таблица excel со временем, отформатированным с текстом, как в примере ниже. Мне нужно преобразовать время из текстовой строки в удобный формат. Я был бы рад, если бы смог получить все в одном формате IE все в секундах и работать оттуда. Я знаю, что могу сделать это, используя вспомогательную колонку и очень длинную уродливую формулу IF, справа, среднюю формулу и делить все, но я ежедневно работаю с тысячами из них, и мне бы хотелось автоматизировать ее лучше с помощью динамической формулы или VBscript, которые сделали эти легче работать.

AB 1 Server(A) 15d 3h 39m 2 Server(E) 3h 36m 44s 3 Server(C) 4m 3s 4 Server(B) 44s 

Это не изящно, но это будет работать как UDF, пока ваш формат будет таким, как описано:

 Public Function timeStringToSeconds(strIn As String) As Long Dim values values = Split(strIn, " ") For Each v In values Select Case Right$(v, 1) Case "d" timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 86400 Case "h" timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 3600 Case "m" timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 60 Case "s" timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) End Select Next End Function 

Вы можете использовать его просто, выполнив это: например, в C1: timeStringToSeconds(B1) или запустите его в диапазоне, выполнив что-то вроде этого: range.value = timeStringToSeconds(range.value)

Другой способ UGLY для достижения ваших строк в удобном для использования формате, таком как dd: hh: mm: ss. Конечно, если вам нужны только секунды, мы могли бы также импровизировать, что;)

Прошу прокомментировать, как только вы пробовали. Я бы назвал такую ​​ситуацию разделительной комбинацией с несколькими разделителями :), где мы рассматриваем d, h, m, s как разделители. Также могут быть решения с использованием функции split и regexp

дд: чч: мм: сс

Код:

 Function multiSplitCombine(ByVal strTime As String) As String Dim delimsArray(0 To 3) As Variant Dim i As Long, j As Long, k As Long 'set delimiters delimsArray(0) = "d" delimsArray(1) = "h" delimsArray(2) = "m" delimsArray(3) = "s" If Len(strTime) = 0 Then multiSplitCombine = "00:00:00:00" Exit Function End If For i = LBound(delimsArray) To UBound(delimsArray) '-- get the position of the delimiter j = InStr(1, strTime, delimsArray(i)) '-- if the delimiter is not found If j = 0 Then '-- insert 00: into the position after earlier previous delimiter replacement strTime = Left(strTime, k) & "00:" & Right(strTime, Len(strTime) - k) Else k = j '-- replace delimiter with semicolon strTime = Replace(strTime, delimsArray(i), ":") End If Next i '-- strip that last extra semi colon strTime = Trim(Left(strTime, Len(strTime) - 1)) '-- remove internal white spaces strTime = Replace(strTime, " ", "") '-- back to sheet multiSplitCombine = Application.WorksheetFunction.Text(strTime, "dd:hh:mm:ss") End Function 

в секундах

Здесь то, что вам нужно изменить в приведенном выше коде,

  • Изменить имя функции на splitToSeconds
  • замените все после strTime = Replace(strTime," ", "") , добавив следующий код

     '-- dd:hh:mm:ss format strTime = Application.WorksheetFunction.Text(strTime, "dd:hh:mm:ss") '-- split by semicolon s = Split(strTime, ":") '-- it has to be 4 elements since the format we insert is d:h:m:s splitToSeconds = CDbl(s(0)) * 24 * 60 * 60 + _ CDbl(s(1)) * 60 * 60 + CDbl(s(2)) * 60 + CDbl(s(3)) 

Вывод:

введите описание изображения здесь

Interesting Posts

Коррумпированный файл Excel

Загрузка файла Excel в swing

VBA: Сделайте каждую 20-ю ячейку жирным шрифтом

прочитайте несколько листов Excel в C #

Как реализовать функцию Excel COMBIN в SQL

VBA Excell match Copy Paste If Else

Дублирование названных диапазонов между книгами приводит к тому, что мои пользовательские функции запутываются

Создать таблицу как выбрать, где – скомпилировать ошибку, используя текущую базу данных

Как экспортировать данные из набора данных в Excel в c #, чьи строки расширяемы?

Динамическая формула Excel

Ошибка времени выполнения 1004, Указанное измерение недействительно для текущего типа диаграммы

Копировать диапазоны в мастер-таблицу и удалять диапазоны из главной таблицы, если ячейка = 0

Как разместить метки x-Axis ниже строки x-Axis после изменения порядка

Найти и заменить на рабочий лист Excel PowerPoint для диаграммы

Неустранимая ошибка: класс «ZipArchive» не найден в

Давайте будем гением компьютера.