Можно ли использовать регулярные выражения в Excel для обработки адресов (жительства)?

Можно ли с помощью регулярных выражений преобразовать адреса так, чтобы оставить прописными только аббревиатуры и первые буквы слов, а также удалить из них лишние символы? <br/> Например, адреса из базы выгружаются в Excel в следующем формате: <br/> Россия, , , , , , г. МОСКВА, , ,,, УЛ.ДЯТЛОВА, 20 <br/> <br/> P.S. Я понимаю, что новая версия Excel может помочь с этой задачей, но у меня на работе стоит 2010, и мне нужно обработать много адресов часто.
  • 3 сентября 2024 г. 7:12
Ответы на вопрос 3
В Excel 2010 нет встроенной поддержки регулярных выражений, поэтому, к сожалению, вы не сможете использовать их напрямую для обработки адресов. Однако можно использовать VBA (Visual Basic for Applications) — язык программирования, встроенный в Excel, для создания пользовательских функций, которые будут применять регулярные выражения.

Вот пример того, как вы можете использовать VBA для обработки адресов:

1. Откройте Excel и нажмите `Alt + F11`, чтобы открыть редактор VBA.
2. Выберите `Insert` > `Module`, чтобы создать новый модуль.
3. Скопируйте и вставьте следующий код в модуль:

```vba
Sub CleanAddresses()
    Dim cell As Range
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    regex.Global = True
    regex.IgnoreCase = True
    
    ' Проходим по каждой ячейке в выделенном диапазоне
    For Each cell In Selection
        If Not IsEmpty(cell.Value) Then
            ' Заменяем множественные пробелы на один
            cell.Value = Trim(regex.Replace(cell.Value, "\s+", " "))
            ' Убираем лишние символы, кроме букв и чисел, а также точки
            cell.Value = regex.Replace(cell.Value, "[^А-Яа-яЁё0-9\s.,]", "")
            ' Преобразуем адрес, оставляя прописными только аббревиатуры и первые буквы слов
            cell.Value = FormatAddress(cell.Value)
        End If
    Next cell
End Sub

Function FormatAddress(ByVal address As String) As String
    Dim words() As String
    Dim formattedAddress As String
    Dim i As Integer
    
    ' Разделяем адрес на отдельные слова
    words = Split(address, " ")
    
    For i = LBound(words) To UBound(words)
        If IsAbbreviation(words(i)) Then
            ' Если это аббревиатура, оставляем в верхнем регистре
            formattedAddress = formattedAddress & UCase(words(i)) & " "
        Else
            ' Первую букву делаем заглавной, остальные строчными
            formattedAddress = formattedAddress & UCase(Left(words(i), 1)) & LCase(Mid(words(i), 2)) & " "
        End If
    Next i
    
    FormatAddress = Trim(formattedAddress)
End Function

Function IsAbbreviation(ByVal word As String) As Boolean
    ' Список аббревиатур, которые нужно оставить в верхнем регистре
    Dim abbreviations As Variant
    abbreviations = Array("г.", "ул.", "пр.", "к.", "д.", "л.", "с.", "п.", "пгт") ' и т.д.
    
    IsAbbreviation = (UBound(Filter(abbreviations, LCase(word))) > -1)
End Function
```

4. Закройте редактор VBA и вернитесь в Excel.
5. Выделите диапазон ячеек с адресами, которые вы хотите обработать.
6. Нажмите `Alt + F8`, выберите `CleanAddresses` и нажмите `Run`.

С помощью этого кода вы сможете обработать ваши адреса, оставив прописными только аббревиатуры и первые буквы слов, а также удалить лишние символы. Главное, что вам останется сделать — это дополнить список аббревиатур в функции `IsAbbreviation`, если это необходимо.
Нет. Адрес не имеет никакой логики. Отличить название улицы от аббревиатуры регуляркой невозможно, ибо нет никаких правил по аббревиатурам и именам улиц. 
Можно просто попробовать выполнить замену текста типа ул. -> УЛ. для конкретных обозначений.
Но просто строку - вряд ли, слишком много хаоса
Здесь можно сделать в несколько шагов. 

1) Убираем повторы запяты х и пробелов.
Россия, г. МОСКВА,УЛ.ДЯТЛОВА,20
2) Слова приводим в первую букву capital
Россия, г. Москва,Ул.Дятлова,20
3) С аббревиатурами - сложнее. Надо будет вести их справочник
Abrrieviation
---------------
КПСС
ВЛКСМ

и замену делать по совпадению. Так же поступисть с сокращениями
ул. бульв. просп. рн.
В конце должно получится
Россия, г. Москва,ул.Дятлова,20
Excel поддерживает программирование на VBasic. Это более эффективно чем делать регулярки.
Любой студент 1 курса вам сделает небольшой скрипт и вставит его в Excel
Похожие вопросы