1

Тема: Регулярные выражения в VBA

Недавно товарищ попросил поправить ссылки в excel файле. Часть работы была нетривиальна и требовала задействовать аппарат регулярных выражений. Оказывается, по умолчанию регулярные выражения в VBA выключены. Есть несколько решений.

1. Чтобы задействовать, их надо включить - Tools -> References -> Microsoft VBScript Regular Expressions 5.5. После этого они становятся доступны


Dim str
str = "1.2.3.4"

Dim re, matches
Set re = New RegExp
re.Pattern = "(\d+\.){3}\d+"
Set matches = re.Execute(str)

If matches.Count > 0 Then
    MsgBox "IP address"
End If

2. Можно создать объект


Dim str
str = "1.2.3.4"

Dim re, matches
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "(\d+\.){3}\d+"
Set matches = re.Execute(str)

If matches.Count > 0 Then
    MsgBox "IP address"
End If

3. Если не требуются сложные преобразования, можно воспользоваться интересным оператором Like


Dim str
str = "1.2.3.4"

If str Like "#.#.#.#" Then
    MsgBox "IP address"
End If

Здесь используются следующие шаблоны


? Любой одиночный символ
* Ноль или более символов
# Любая одиночная цифра (0–9).
[charlist] Любой одиночный символ в классе символов (списке)
[!charlist] Любой одиночный символ не принадлежащий классу символов

4. Я намеренно не рассматриваю встроенные табличные функции SEARCH/SUBSTITUTE/REPLACE, потому что они работают с подстроками фиксированной длины.

Источников информации не даю, так как вся информация из разрозненных источников, найденных по запросу vba excel регулярные выражения.

( 2 * b ) || ! ( 2 * b )

2

Re: Регулярные выражения в VBA

Оказывается, по умолчанию регулярные выражения в VBA выключены.

Точнее сказать — их вовсе нет в VBA.

Источников информации не даю, так как вся информация из разрозненных источников, найденных по запросу vba excel регулярные выражения.

Это ж те же самые регулярные выражения, что и в WSH, и вся справка от WSH по регулярным выражениям полностью гожа (за исключением использования оператора VBA «Like»).

3

Re: Регулярные выражения в VBA

alexii пишет:

Точнее сказать — их вовсе нет в VBA.

alexii пишет:

Это ж те же самые регулярные выражения, что и в WSH

Вот именно - нет! Но использовать все-таки можно, к счастью без сложных костылей.

( 2 * b ) || ! ( 2 * b )

4

Re: Регулярные выражения в VBA

Rumata, почему нет? Библиотека используется одна и та же.

5

Re: Регулярные выражения в VBA

alexii, подразумевалось

alexii пишет:

... их вовсе нет в VBA....

Rumata пишет:

Вот именно - нет!

( 2 * b ) || ! ( 2 * b )

6

Re: Регулярные выражения в VBA

Rumata, наконец, дошло, что «нет» относилось к первой цитате . Спасибо, ясно.