Страницы: 1
RSS
Извлечь числа из текста одинакового формата
 
Добрый день. Есть текстовое поле в виде количества суток, дней и минут (пример в файле). Данные из полей необходимо суммировать. Возникла проблема перевести данное поле в какой-нибудь формат или вытянуть числа из текста по отдельным ячейкам (потом уже проще).
 
вариант на PQ
 
вариант функции  в диапазоне B3:D11

Код
Function ccc1(t$, s$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+ (?=" & s & ")"
  If .test(t) Then ccc1 = CInt(.Execute(t)(0)) Else ccc1 = ""
End With
End Function


 
Изменено: кузя1972 - 30.07.2018 13:40:16
 
решение формулой
 
Спасибо. Приложу свой вариант, долго, трудно...  
 
Вариант udf, которая сразу сумму считает:
Код
Public Function TimeSum(rn As Range)
    Dim c As Range, st As String
    For Each c In rn
        st = c.Value
        st = Replace(st, "сут.", "+")
        st = Replace(st, "час.", "/24+")
        st = Replace(st, "мин.", "/24/60")
        st = Replace(st, " ", "")
        TimeSum = TimeSum + Application.Evaluate(st)
    Next c
    TimeSum = Int(TimeSum) & " сут. " & Format(TimeSum, "h час. m мин.")
End Function
 
Сумма не считается, если в выбранном диапазоне (В3:В14) есть пустые ячейки или нет показателя с "мин.". Как посчитать среднее значение в зависимости от непустого в диапазоне А3:А14?
 
Ну тогда так:
Код
Public Function TimeSum(rn As Range, Optional oper As String)
    Dim c As Range, st As String
    TimeSum = 0
    For Each c In rn
        st = c.Value
        If st <> "" Then
            st = Replace(st, "сут.", "+")
            st = Replace(st, "час.", "/24+")
            st = Replace(st, "мин.", "/24/60")
            st = Replace(st, " ", "")
            If Right(st, 1) = "+" Then st = Left(st, Len(st) - 1)
            TimeSum = TimeSum + Application.Evaluate(st)
        End If
    Next c
    If oper = "avg" Then TimeSum = TimeSum / rn.Cells.Count
    TimeSum = Int(TimeSum) & " сут. " & Format(TimeSum, "h час. m мин.")
End Function
 
 А если выбрать диапазон В3:В14, но среднее должно посчитать при условии, что из диапазона А3:А14 возьмет только количество, где не пусто?
 
Код
Public Function TimeSum(rn As Range, rnmark As Range, Optional oper As String)
    Dim st As String, j As Integer, k As Integer
    If rn.Cells.Count <> rnmark.Cells.Count Then Exit Function
    TimeSum = 0
    For j = 1 To rn.Cells.Count
        If rnmark.Cells(j) <> "" Then
            st = rn.Cells(j)
            k = k + 1
            If st <> "" Then
                st = Replace(st, "сут.", "+")
                st = Replace(st, "час.", "/24+")
                st = Replace(st, "мин.", "/24/60")
                st = Replace(st, " ", "")
                If Right(st, 1) = "+" Then st = Left(st, Len(st) - 1)
                TimeSum = TimeSum + Application.Evaluate(st)
            End If
        End If
    Next j
    If oper = "avg" Then TimeSum = TimeSum / k
    TimeSum = Int(TimeSum) & " сут. " & Format(TimeSum, "h час. m мин.")
End Function
 
Создал пример второго варианта ссылка на данные из других таблиц и немного поправил код... Правильно?
Еще как нибудь можно просуммировать итоги по двум таблицам в сводную ячейку J16=C16+G16  и вывести среднее по двум таблицам?
Изменено: Bogdan05 - 31.07.2018 11:35:31
 
Добрый день. Ну в итоге я себе это вижу примерно так
Страницы: 1
Наверх