Этот код должен быть запущен с листа, который содержит ваши данные для соединения. Я предположил, что вы работаете в столбце A
код
- Использует регулярное выражение для удаления всех буквенно-цифровых строк, меньших или равных 3 символам
- Сбрасывает исправленный набор строк на вновь созданный лист
- Разбивает эти строки с помощью Excel "Text to Columns"
Вариантные массивы используются для того, чтобы сделать этот процесс эффективным
{Обновление: добавлена версия без цикла}
Original Code
Sub Spliced()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim objRegex
Dim X
Dim lngRow As Long
Set ws1 = Sheets(1)
Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp))
Set ws2 = Sheets.Add
X = rng1.Value2
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "\b\w{1,3}\b"
.Global = True
End With
For lngRow = 1 To UBound(X)
X(lngRow, 1) = Application.Trim(objRegex.Replace(X(lngRow, 1), vbNullString))
Next
ws2.Range(rng1.Address) = X
ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True
End Sub
Updated:No loops
Sub Spliced_NoLoops()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim objRegex
Dim strDelim As String
Dim strOut As String
strDelim = "||"
Set ws1 = Sheets(1)
Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp))
strOut = Join(Application.Transpose(rng1), strDelim)
Set ws2 = Sheets.Add
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "\b\w{1,3}\b"
.Global = True
End With
ws2.Range(rng1.Address) = Application.Transpose(Split(Application.Trim(objRegex.Replace(strOut, vbNullString)), "||"))
ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True
End Sub