Вызовите регулярное выражение в ячейке Excel - PullRequest
3 голосов
/ 14 апреля 2011

Я хочу извлечь строку из ячейки, используя совпадение с регулярным выражением. Я не могу найти функцию Excel, которая делает это, и я не эксперт VBA. Я использую Excel 2007.

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011

В редакторе кода Excel VBA выберите Сервис / Ссылки. В окне выбора проверьте последнюю версию регулярных выражений Microsoft VBScript.

Вот простая пользовательская функция, с которой можно начать. Это вернет «foo», если вы укажете на ячейку с «foobar» или «fooooobar».

Function RegExtract(contents As String)
    Dim regx As RegExp
    Set regx = New RegExp

    With regx
    .Pattern = "f[o]+"
        With .Execute(contents)
            If .Count Then RegExtract = .Item(0).Value
        End With
    End With
End Function
1 голос
/ 30 июня 2011

Вот функция, которая позволит вам передать в ячейку любой шаблон регулярных выражений. Используйте () вокруг части шаблона, которую вы хотите вернуть функции.

Function RegexExtract(ByVal text As String, _
                      ByVal extract_what As String) As String

Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")

RE.Pattern = extract_what
RE.Global = True
Set allMatches = RE.Execute(text)
RegexExtract = allMatches.Item(0).submatches.Item(0)

End Function
0 голосов
/ 07 августа 2013

@ AndrewCowenhoven Хороший ответ.Добавить библиотеку Regex очень просто.Просто чтобы немного расширить этот ответ, я добавлю то, что я узнал, чтобы получать предметы в матчах.

Например, у меня есть такая строка в одной ячейке.

doubleclick.net / activityi; и = 5f2256de37ab4992927b3a0a0a34f983; u13 =; U14 = 27,34; u16 = AUD; U9 =; u10 =; u11 =; u12 =; U5 =; U6 =; U7 =; U8 =; u1 = автомобиля; u2 = SEA; и3 =SEA; u4 = 20130923% 20% 7C% 2020130926; ord = 5360319407191.128?

Мне нужно всего несколько разделов, чтобы проверить правильность тега двойного клика, отправленного в Google.Используя приведенное выше регулярное выражение, у меня есть что-то вроде этого.

Function CheckU3(contents As String)
Dim regx As RegExp
Set regx = New RegExp
Dim matches, s

With regx
.Pattern = "u3=(.*?);"
.Global = False

If regx.Test(contents) Then
    Set matches = regx.Execute(contents)
        For Each Var In matches.Item(0).SubMatches
            s = Var
        Next
End If

CheckU3 = s

End With
End Function

Я знаю, что это можно было бы значительно упростить, но дело в том, что я использую пара-соответствия, используя параны, чтобы получить именно то, что мне нужно.

enter image description here

0 голосов
/ 14 апреля 2011

В системе VBA Excel имеется библиотека, известная как регулярные выражения Microsoft VBScript.Включив библиотеку из внутренней среды IDE VBA, вы можете создать простой макрос, который принимает любое значение, которое вы хотите проанализировать, и возвращает результат обратно вызывающей стороне (это может быть вызов функции из ячейки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...