Вызов регулярного выражения в ячейке Excel

#regex #excel #excel-2007 #vba

#регулярное выражение #excel #excel-2007 #vba

Вопрос:

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

Ответ №1:

В редакторе кода 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. grrr итак, мне нужно написать какой-нибудь VBA… Я надеялся, что смогу избежать этого.

2. Инструменты / ссылки выделены серым цветом … гул. Есть идеи.

3. обнаружил, что мои настройки безопасности предотвращают. Возникает небольшая ошибка MyExtract -> RegExtract

Ответ №2:

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

 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
  

Ответ №3:

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

Комментарии:

1. помогите мне, как вы находите эту библиотеку и что вы называете VBA IDE. Я настоящий новичок в VB для Excel.

Ответ №4:

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

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

doubleclick.net/activityi;u=5f2256de37ab4992927b3a0a0a34f983;u13=;u14=27.34;u16=AUD;u9=;u10=;u11=;u12=;u5=;u6=;u7=;u8=;u1=Car;u2=SEA;u3=SEA;u4=20130923 | 20130926;ord=5360319407191.128?

Мне нужно всего несколько разделов, чтобы убедиться, что тег doubleclick, отправленный в 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
  

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

введите описание изображения здесь