Вопрос или проблема
Я пытаюсь использовать CRTL + F (Найти) и искать любые цифры в таблице. В Word можно использовать подстановочный знак ^#, который находит любую цифру. Я использую это для поиска элементов в листах, которые подходят под определенный формат, но у меня нет конкретного номера. Например, если я ищу номер телефона в документе Word, я могу ввести
^#^#^#-^#^#^#-^#^#^#^#
Это найдет все номера телефонов в документе. Мне нужно использовать функцию поиска для того, что у меня настроено.
В настоящее время я использую подстановочный знак ?, но есть некоторые вещи, которые имеют тот же формат и не являются цифрами, и это вызывает проблемы.
Если вы программист, то решение, вероятно, находится в пределах ваших навыков. Не в моих, но в ваших, безусловно.
Посмотрите следующее, чтобы настроить Excel для использования регулярных выражений:
Затем используйте VBA для выполнения работы.
Регулярные выражения, похоже, были созданы именно для ваших нужд.
Ответ или решение
Для поиска любых цифр в Excel с использованием специальных символов (wildcards) встроенные функции не могут удовлетворить ваши требования так, как это делает Microsoft Word с использованием регулярных выражений. Однако, вы можете использовать VBA (Visual Basic for Applications) для создания макроса, который будет искать цифры в нужном формате.
Вот шаги, которые вам нужно выполнить:
-
Откройте редактор VBA.
- Нажмите
ALT + F11
, чтобы открыть редактор VBA.
- Нажмите
-
Создайте новый модуль.
- В редакторе VBA щелкните правой кнопкой мыши на любой из объектов вашего проекта, выберите
Insert
и затемModule
.
- В редакторе VBA щелкните правой кнопкой мыши на любой из объектов вашего проекта, выберите
-
Вставьте код макроса.
- Скопируйте и вставьте следующий код в модуль:
Sub FindPhoneNumbers()
Dim ws As Worksheet
Dim cell As Range
Dim regex As Object
Dim matches As Object
Dim pattern As String
Dim found As Boolean
' Определение регулярного выражения для поиска телефонных номеров
pattern = "^\d{3}-\d{3}-\d{4}$" ' формát: XXX-XXX-XXXX
' Создание объекта регулярных выражений
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.IgnoreCase = True
.Pattern = pattern
End With
' Проход по всем листам в книге
For Each ws In ThisWorkbook.Worksheets
found = False
' Проход по каждой ячейке на листе
For Each cell In ws.UsedRange
If regex.Test(cell.Value) Then
found = True
' Выделение ячейки, где найден номер
cell.Interior.Color = RGB(255, 255, 0) ' Выделить желтым
End If
Next cell
' Вывод сообщения, если номера найдены
If found Then
MsgBox "Номера телефонов найдены на листе: " & ws.Name
End If
Next ws
' Очистка объекта регулярных выражений
Set regex = Nothing
End Sub
- Запуск макроса.
- Вернитесь в Excel, нажмите
ALT + F8
, выберитеFindPhoneNumbers
и нажмите кнопкуRun
.
- Вернитесь в Excel, нажмите
Этот код ищет номера телефонов в формате XXX-XXX-XXXX и выделяет ячейки, в которых они найдены. Вы можете изменить регулярное выражение в строке pattern
в зависимости от формата, который вам нужен.
Не забудьте включить макросы в настройках Excel, чтобы этот код работал. Обратите внимание, что VBA может быть неподходящим решением, если у вас нет доступа к редактированию кода или если ваша организация ограничивает использование макросов.
Таким образом, используя VBA и регулярные выражения, вы сможете эффективно искать нужный формат с любыми цифрами в вашем рабочем файле Excel.