Страницы: 1
RSS
Разделение цифр и букв пробелом.
 
Помогите справиться с задачей. В сочетании слов с помощью макроса
Код
Function uuu1#(t$, знак$)
  uuu1 = Evaluate(Val(Split(Split(t, знак)(0))(UBound(Split(Split(t, знак)(0))))) & знак & Val(Split(Split(t, знак)(1))(0)))
End Function
из ячейки А1 вытягиваю перемножение цифр, но если слово с цифрой находятся рядом макрос не работает ячейка А2. Можно ли доработать данный макрос или придумать макрос или формулу, которая бы разделяла сочетание букв и цифр пробелом, для дальнейшей обработки макросом.
«Всё гениальное просто» перефразировка афоризма Леонардо да Винчи
 
можно перебором всех символов в  t$ убрать все буквы.
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
 
Код
Function ТолькоЦифры(MyCell As Range)
Dim i As Integer
    For i = 1 To Len(MyCell)
        If IsNumeric(Mid(MyCell, i, 1)) Or Mid(MyCell, i, 1) = "*" Then
            ТолькоЦифры = ТолькоЦифры + (Mid(MyCell, i, 1))
        End If
    Next
    ТолькоЦифры = Split(ТолькоЦифры, "*")(0) * Split(ТолькоЦифры, "*")(1)
End Function
 
немного усовершенствовал код Kuzmich,
Код
Function uuu1#(t$, знак$)
t1 = ТолькоЦифры1(t, знак)
  uuu1 = Evaluate(Val(Split(Split(t1, знак)(0))(UBound(Split(Split(t1, знак)(0))))) _
  & знак & Val(Split(Split(t1, знак)(1))(0)))
End Function


Function ТолькоЦифры1(t1$, знак$)
Dim i As Integer
    For i = 1 To Len(t1)
        If IsNumeric(Mid(t1, i, 1)) Or Mid(t1, i, 1) = знак Then
            ТолькоЦифры1 = ТолькоЦифры1 + (Mid(t1, i, 1))
        End If
    Next
'    ТолькоЦифры1 = Split(ТолькоЦифры1, знак)(0) * Split(ТолькоЦифры1, знак)(1)
End Function
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
 
Доброе время суток
Вариант на регулярных выражениях
Код
Public Function myEvaluate(ByVal this As String) As Double
    Dim pReg As Object
    Set pReg = CreateObject("VBScript.RegExp"): pReg.Global = True
    pReg.IgnoreCase = True: pReg.Pattern = "[^\d\-\+/\*]"
    myEvaluate = Application.Evaluate(pReg.Replace(this, ""))
End Function

Успехов.
 
Спасибо всем за ответы. :) Теперь работает :D
«Всё гениальное просто» перефразировка афоризма Леонардо да Винчи
Страницы: 1
Наверх