В excel 2010 замените любое число, соответствующее шаблону, значением поиска

Я пытаюсь выяснить способ замены/замены / регулярного выражения определенного шаблона в таблице Excel соответствующим значением из другой таблицы.
Шаблон, который появляется x раз внутри текстового блока, всегда следует этим правилам:

{[4,9]{1}[0-9]{5}} (заключено в фигурные скобки, "4" или "9", за которыми следуют 5 чисел, каждое из которых может быть от 0 до 9, например "{412345}"или" {961723}".)

желаемая формула должна затем снять скобки, поиск номер в другой таблице и возврат соответствующей записи из другого столбца.

мне удалось сделать это с помощью четырех предопределенных чисел:

example

тем не менее, мне нужно расширить формулу, чтобы включить любой номер, соответствующий шаблону. Я полагаю, что VBA UDF-это путь, хотя я понятия не имею, как это сделать...

PS: Если кто-то заинтересован в продвижении пределы немного далее, следующий шаг, с которым мне придется иметь дело, - это добавить .X к числам внутри фигурных скобок, где X представляет таблицу, в пределах которой значения должны быть проверены против. Например: "{412345.2}" означает "проверить 412345 в таблице 2 и заменить найденное значение", и "{912345.5}" следует "проверить 912345 в таблице 5 и заменить найденное значение".

2
задан DavidPostill
21.02.2023 2:40 Количество просмотров материала 2928
Распечатать страницу

1 ответ

использование макросов / VBA:

Public Function patSub(theValue As String) As String
    result = theValue
    Dim rango As Range
    Set rango = ActiveSheet.Range("E1:F6")
    strPattern = "{[4,9]{1}[0-9]{5}}"
    Dim regEx As New RegExp
    Dim matches
    With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
    End With
    Set matches = regEx.Execute(theValue)
    For Each Match In matches
        On Error Resume Next
        lookupmatch = Match.Value
        lenMatch = Len(lookupmatch)
        lookupmatch1 = Mid(lookupmatch, 2, lenMatch - 2)
        lookupValue = Application.VLookup(lookupmatch1 + 0, rango, 2, Falso)
        If lookupValue <> "Error 2042" Then
            result = Replace(result, lookupmatch, lookupValue)
        End If
    Next
    patSub = result
End Function

открыть VBA / Macros с помощью alt+F11, вставить новый модуль в ThisWorkbook и вставьте код с правой стороны.

сделать Регулярные Выражения работа с VBA необходимо ссылаться на Регулярные Выражения Microsoft VBScript 5.5:

  • Выберите "Tools / References"
  • установите флажок рядом с Регулярные Выражения Microsoft VBScript 5.5
  • нажмите "OK"

эта UDF использует две переменные:

  • rango1: справочная таблица, содержащая элементы.
  • strPattern: регулярное выражение.

если данные находятся в ячейке A1, затем в B1вы должны поставить =patSub(A1).

1
отвечен jcbermu 2023-02-22 10:28

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх