Страницы: 1
RSS
Удалить слова с определенным количеством букв
 
Всем привет. Снова нужна помощь "регулящиков"))) Мотаю на ус новые знания, но их пока не хватает. Вопрос - как удалить из строки слова с кол-вом букв от 1 до 3 а остальные оставить. Отделены пробелами. Чистка строк. Пример во вложении.
 
Не регулярки - UDF
Код
Function DelLen3(r As Range, Optional LenWord As Long = 3, Optional sDelimit As String = " ") As String
Dim aSpl
Dim sStr As String, j As Long
    aSpl = Split(r.Value, sDelimit)
    
    For j = 0 To UBound(aSpl)
        If Len(aSpl(j)) > LenWord Then sStr = sStr & sDelimit & aSpl(j)
    Next j
    
    DelLen3 = Trim$(sStr)
End Function

В ячейку
=DelLen3(A1)
Можно указать другую длину слова или/и другой разделитель
=DelLen3(A1;6;",")
 
vikttur, спасибо. Интересное решение. Только не пойму почему на листе работает, а в цикле нет.
 
Потому что это функция (Function), которая работает в одной ячейке.
 
Код
Sub Del_1_3_Letters()
Dim i As Long
Dim iLastRow As Long
Dim re As Object
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "^[А-ЯЁа-яё]{1,3} |\s[А-ЯЁа-яё]{1,3}(?=\s)"
    re.Global = True
  For i = 1 To iLastRow
    Cells(i, 2) = re.Replace(Cells(i, 1) & " ", "")
  Next
End Sub
 
Kuzmich, то что нужно. Вам также благодарность!
 
Цитата
Laider написал:
не пойму почему на листе работает, а в цикле нет
Наверно потому, что первый аргумент должен быть типа Range.
Это в данном случае необязательно:
Код
Function DelLen(str, Optional LenWord As Long = 3, Optional sDelimit As String = " ") As String
Dim x
  For Each x In Split(str, sDelimit)
    If Len(x) > LenWord Then DelLen = DelLen & sDelimit & x
  Next
  DelLen = Mid$(DelLen, Len(sDelimit) + 1)
End Function
 
 еще вариант функции в столбце D
Код
  Function bbb$(t$)
    With CreateObject("vbscript.regexp"): .IgnoreCase = True: .Global = True
 .Pattern = "(?:[^а-яёa-z\d]|^)[а-яёa-z\d]{1,3}(?=\s|$)" : bbb = .Replace(t, "")   
    End With
End Function
Изменено: кузя1972 - 23.05.2018 22:19:39
 
кузя1972, Если слово будет в начале текста, то оно не будет удалено.
 
Kuzmich,ориентировался,на файл-пример создателя темы,такие паттерны уже многократно использовал в других темах-просто чуть укоротил паттерн,-подредактировал #8 с учетом #9.
Страницы: 1
Наверх