Замена подстановки обычного выражения в Microsoft Excel [закрыта]

Я хотел бы наполнить часть «07» части строк (номера мобильных телефонов) международной версией «447».

Список строк в настоящее время формирует столбец n в электронной таблице Excel.

У меня есть регулярное выражение для соответствия строкам, требующим изменения:

^07[0-9]{9}$

... но я не знаю, как сделать замену, в которой я нуждаюсь.

Данные находятся в электронной таблице Excel, но могут, конечно, экспортироваться.

Предпочтительным решением было бы сохранить данные в Microsoft Excel, но его можно, конечно, экспортировать, а затем снова импортировать. Я знаю, что TextMate имеет функцию замены регулярных выражений. Может ли это помочь мне?

regex,excel,

7

Ответов: 3


Я собирался уйти искать элегантные решения VBA или что-то еще, тогда я подумал: «Подожди. Мы просто хотим манипулировать некоторыми данными в электронной таблице, которой мы владеем. Зачем усложнять?

Как эта идея звучит для вас:

  • вставьте новый столбец сразу после столбца с существующими данными (предположим, что это столбец C)

  • заполните новый столбец следующей формулой: ="447" & RIGHT(C1, 9)

  • выберите столбец D (который теперь содержит новые значения) и значения вставки (который находится в диалоговом окне «Специальная вставка») на столбец C, заменив существующие значения

  • удалить «рабочий» столбец D

Это не программирование, но если вам нужно сделать это только после того, как вам не нужна программа, верно?


Используйте Excel VBA. Сделайте ссылку на «Microsoft VBScript Regular Expressions 5.5».

Затем сделайте это в новом регулярном модуле VBA:

Sub ReplaceMobileNumbers
  Dim re as New RegExp

  re.Pattern = "^0(?=7[0-9]{9}$)"   ''# look-ahead

  Dim cell As Range
  For Each cell In ActiveSheet.Range("Your Range Address in A1:B1 notation")
   cell.Value = re.Replace(cell.value, "44")
  Next cell
End Sub

и назовите это sub в окне Immediate. Вышеупомянутый код выброса, не разработанный с учетом повторного использования. Я знаю это, так что не говорите мне. ;-)

Хотя вы, вероятно, можете уйти с функцией ячейки:

=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)

Вам придется включать Microsoft Regular Expressions в свой листок (добавьте его в качестве ссылки)

Затем сделайте быстрый макрос, как и следующий, чтобы использовать его:

Dim reg As New RegExp
Public Function RegMatch(Source As Range, Pattern As String, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Long
    Dim rng As Range, i As Long, j As Long

    reg.IgnoreCase = IgnoreCase
    reg.MultiLine = MultiLine
    reg.Pattern = Pattern

    i = 0: j = 0
    For Each rng In Source
        i = i + 1
        If reg.test(rng.Value) Then
            j = i
            Exit For
        End If
    Next
    RegMatch = j
End Function

Затем просто назовите его как макрос в своем листе (например):

=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))

Где первый аргумент - ваш диапазон, а второй аргумент - ваш шаблон (как указано выше)

регулярное выражение, первенствует,
Похожие вопросы
Яндекс.Метрика