Хочу с помощью регулярных выражений убрать пустые строки в выражении. В ней 3 пустые строки: одна в начале, вторая посреди, и третья в конце. Паттерн типа "^[\t ]*\n" не сработал
Function DelBlancRow(s$)
Do While Left(s, 1) = vbLf: s = Right(s, Len(s) - 1)
Loop
Do While InStr(s, vbLf & vbLf): s = replace(s, vbLf & vbLf, vbLf)
Loop
DelBlancRow = s
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Удаление ведущих, хвостовых и двойных переносов в строке
Выделить диапазон (одна область) и запустить макрос
Код
Option Explicit
Sub test()
Dim arr, aOne(1 To 1, 1 To 1)
Dim r&, c&
arr = Selection.Value2
If Not IsArray(arr) Then aOne(1, 1) = arr: arr = aOne
For c = 1 To UBound(arr, 2)
For r = 1 To UBound(arr, 1)
arr(r, c) = Replace$(arr(r, c), Chr(160), Chr(32))
arr(r, c) = WorksheetFunction.Trim(arr(r, c))
arr(r, c) = Replace$(arr(r, c), Chr(32), Chr(160))
arr(r, c) = Replace$(arr(r, c), vbLf, Chr(32))
arr(r, c) = WorksheetFunction.Trim(arr(r, c))
arr(r, c) = Replace$(arr(r, c), Chr(32), vbLf)
arr(r, c) = Replace$(arr(r, c), Chr(160), Chr(32))
Next r
Next c
Selection.Value2 = arr
End Sub
Удаление без RegExp. Метод последовательных замен. Можно в разы быстрее
Станислав Мерц, если вам нужен результат и не принципиален метод, то не используйте название метода в названии темы - рискуете получить весьма ограниченные решения или не получить их вообще
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Ну если всё-таки принципиально RegExp, то наверное лучше будет так, а то вдруг не все строки будут начинаться с "•" и будет больше одного переноса строки