Страницы: 1
RSS
Regex execute, Проверка и подстановка скопированных данных в ячейку
 
Доброй ночи, форумчане.

Возник вопрос по использованию RegEx.Execute

сёрфил форум в поисках ответа, увы видимо не хватило компетенций или упорства...

Если быть кратким вопрос следующий: Как использовать функцию Execute для определённого диапазона, если в ячейку вставляются данные из буфера обмена (любого другого файла), содержащую следующий примерный текст : "Машина KAMAZ А101СЕ178". Диапазон к примеру используется "A".
я могу только проверить, но не подставить необходимые данные с помощью MsgBox

код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        Application.EnableEvents = False
     Dim objRegExp As Object
     Dim iTemp As String
       iTemp = Target.Text
     Set objRegExp = CreateObject("VBScript.RegExp")
     objRegExp.Global = True: objRegExp.IgnoreCase = True: objRegExp.MultiLine = False
       objRegExp.Pattern = "(\d{2})([а-я]{2})(\d{3})"
     If objRegExp.Test(iTemp) Then
       iTemp = objRegExp.Replace(iTemp, "$1 $2 $3")
         Mid(iTemp, 4, 2) = UCase(Mid(iTemp, 4, 2))
       Target = iTemp
     Else
       MsgBox "Введите в формате : А111АА111"
     End If
    End If
        Application.EnableEvents = True
End Sub
 
если быть кратким ответ следующий: для диапазона - никак, для содержимого каждой конкретной ячейки - сколько угодно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Dzhode -, возможно, подразумевается объединение всех строк из непустых ячеек диапазона в единую строку и обработка такой единой строки?
 
Цитата
написал:
Возник вопрос по использованию RegEx.Execute
Итоговый ожидаемый результат мне не совсем понятен, однако разобраться с парой моментов для себя было интересно. :)
Взгляните, возможно что-то пригодится...
Вынес Ваш код в отдельную функцию.
Код возможно значительно сократить, разумеется.

UPD:
Цитата
написал:
объединение всех строк из непустых ячеек диапазона в единую строку и обработка такой единой строки

Однако не вышло менять регистр с помощью RegExp \U $1 и т.д.
Код
 targetArray = Application.Transpose(target.Value2)
    joinedString = Join(targetArray, ",")
    
    If objRegExp.test(joinedString) Then
      joinedString = objRegExp.Replace(joinedString, "$1 $2 $3")
      targetArray = Split(joinedString, ",")
        
      'To upper case по элементам массива
      'Определить какие строки не совпали, вывести на экран только их
    Else
        'Ни одно значения из целевых строк не совпало
    End If

    target = Application.Transpose(targetArray)
Изменено: frowzy - 02.02.2023 10:41:20
Страницы: 1
Наверх