Страницы: 1
RSS
Шаблон (регулярные выражения) для определения содержимого строки, Определить, содержит строка только "=число",или еще что-то
 
Уважаемые коллеги, здравствуйте.
Подскажите, пожалуйста, по регулярным выражениям - с их помощью вообще возможно определить - содержит ли обрабатываемая строка только числа, или еще там что-то есть?
Например, в файле в ячейках есть значения. Например, 44, =48, =А1*13, =22/46, и т.д. Можно ли регулярными выражениями определить те ячейки, в которых содержатся такие значения: "=ЧИСЛО"? (в приведенном примере должно найти ячейку с "=48"). Пока у меня получилось только через If и проверку InStr и IsNumeric.
А через регулярные выражения это можно?

Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
 
Код
Function qq(r As Range)
If IsNumeric(r.Value) Then
    With CreateObject("VBScript.RegExp")
    .Pattern = "[^0-9 \.,]"
    qq = Not .test(r.Formula)
    End With
    Else
    qq = False
    End If
End Function
Изменено: RAN - 23.01.2018 18:40:51
 
А без регулярок такой вариант не подойдет?
Код
Function gg(rc As String)
    Dim s As String
    If rc Like "*[a-zа-яё]*" Then
        gg = "есть букавки"
    Else
        gg = "нет букавок"
    End If
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Коллеги, спасибо за предложенные варианты. Я, видимо, не очень хорошо объяснил, попробую еще раз. На листе могут быть формулы вида: "=А1/4", ="12*В8" и т.д.
Также на листе могут быть в ячейках значения "48", "52", "12,5847" и т.д., а может быть записано в ячейке так: "=12", или "=58*11". Мне надо отловить все ячейки, в которых есть формула (т.е. присутствует "="), но в формуле присутствуют только числа (без ссылок), т.е. надо отловить "=12", "=58/11", но не "=А1/8", и не "48", например.
Самостоятельно попытался решить через проверку через InStr в формуле знака = и проверки, является ли остаток числом (ну и наличием знаков + - / * ^)
Почему-то мне показалось, что при помощи регулярных выражений это будет проще сделать, поэтому и задал вопрос.
Если это не так (в регулярных выражениях слаб, только начал с ними разбираться) - посоветуйте лучший метод, пожалуйста.
Кому решение нужно - тот пример и рисует.
 
Цитата
Дмитрий Щербаков написал:
Dim s As String
приветствую, Дмитрий!))) а это точно нужно???
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Пытливый, вот так без регулярных выражений работает на Вашем примере:
Код
Function IsFormulaWithoutRefs(a As Excel.Range) As Boolean
    Dim f As String: f = a.FormulaLocal 'Если нотация R1C1, то .FormulaR1C1Local
    If f Like "=*" And Not (f Like "*[A-Z$]#*" Or f Like "*[A-Z]:[A-Z$]*" Or f Like "*ДВССЫЛ*") Then
         IsFormulaWithoutRefs = True
    Else
         IsFormulaWithoutRefs = False
    End If
End Function
Т.е. если функция вернёт True, значит, в ячейке формула без ссылок на другие ячейки (именованные диапазоны и строковые литералы не учитываются, если только сами не содержат нотации ссылок).
Изменено: Irregular Expression - 24.01.2018 12:04:37
 
Цитата
Jack Famous написал:
а это точно нужно?
Нет, конечно. Осталось от тестов :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ребята, спасибо, вопрос решен, в том числе и при использовании ваших решений. Вопрос оказался еще более широким, чем я озвучил, решал без регулярных выражений, кучей If then Else, Like, And, Or и т.п.
За решения - еще раз спасибо.
Кому решение нужно - тот пример и рисует.
Страницы: 1
Наверх