3
  1. 18hr 28m 49s
  2. 18 days 19hr 12m 30s

У меня есть лист Excel с текстовыми значениями (как в примерах выше).

Есть ли способ, которым я могу преобразовать их в такие дни, что:

  • Если у меня 18 часов, он округляется до ближайшего дня и становится 1 днем.
  • Если это 18 дней и 19 часов, это становится 19 дней

Обратите внимание, что эти значения в текстовом формате. Не Дата. Не время

2 ответа2

2

Вы можете использовать следующую формулу

=IF(MID(A1,FIND("hr",A1,1)-2,2)>12,IF(ISNUMBER(FIND("day",A1,1)),VALUE(LEFT(A1,FIND("day",A1,1)-1))+1&"days",1&"day"))

Я использовал 12 часов в качестве лимита, чтобы увеличить 1 день, вы можете изменить его, как вы хотите
Каким бы ни был текст, он найдет "час" и "день" и рассчитает по ним. Также напишите hr и day (в формуле) так же, как в тексте, чтобы формула нашла их.

1

Это кажется излишним, но вы можете использовать пользовательскую функцию, это код:

Public Function toDays(datestring As String)
    Dim datearray() As String
    datearray = Split(datestring, " ")
    totaldays = 0
    totalhours = 0
    totalmin = 0
    totalsecs = 0
    For i = LBound(datearray) To UBound(datearray)
        newdata = datearray(i)
        If IsNumeric(newdata) = True Then
            totaldays = totaldays + newdata
            i = i + 1
        Else
            For j = 1 To Len(newdata)
                m = Mid(newdata, j, 1)
                If IsNumeric(m) = False Then
                    separation = j
                    j = Len(newdata)
                End If
            Next j
            numvalue = Mid(newdata, 1, separation - 1)
            measurevalue = LCase(Mid(newdata, separation))
            Select Case measurevalue
                Case Is = "hr"
                    totalhours = totalhours + numvalue
                Case Is = "m"
                    totalmin = totalmin + numvalue
                Case Is = "s"
                    totalsecs = totalsecs + numvalue
            End Select
        End If
    Next i
    finalresult = Round(totaldays + (totalhours / 24) + (totalmin / 1440) + (totalsecs / 86400))
    toDays = finalresult  & " days"
End Function

Откройте Macros с помощью клавиш ALT+F11, щелкните правой кнопкой мыши на This Workbook и вставьте новый модуль. Вставьте код в правой части экрана.

Теперь, если ваши данные находятся в ячейке A1 тогда в ячейке A2 вы должны поставить =toDays(A1) .

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