Функция SPLIT: текст из ячейки в массив, но игнорирует пустые строки - PullRequest
2 голосов
/ 10 мая 2019

Есть ли способ заполнить массив, используя функцию split, но игнорируя пустые строки.

У меня есть рабочая тетрадь с расшифровками. В каждом транскрипте 1 ячейка, и выглядит она примерно так:

01/04/2019 09:05:18 - Test User 2 (Additional Comments)
Hello


01/04/2019 09:04:43 - Test User 1 (Additional Comments)
Hello

В настоящее время я использую этот код:

txt = ActiveCell.Value

FullName = Split(txt, vbLf)

Что хорошо разбивает текст ячейки, но включает в себя и все пустые строки. Есть ли способ использовать функцию разделения, а затем не заполнять массив пустыми строками?

ура

EDIT:

Сейчас используется

txt = ActiveCell.Value
FullName = RemoveBlankLines(Split(txt, vbLf))
For i = UBound(FullName) To 0 Step -1
    Debug.Print FullName(i)
Next i

Function RemoveBlankLines(Strings As Variant) As Variant
    Dim v As Variant
    Dim i As Long, j As Long

    ReDim v(LBound(Strings) To UBound(Strings))
    j = LBound(Strings) - 1
    For i = LBound(Strings) To UBound(Strings)
        If Trim(Strings(i)) <> "" Then
            j = j + 1
            v(j) = Strings(i)
        End If
    Next i

    If j >= LBound(Strings) Then
        ReDim Preserve v(LBound(Strings) To j)
        RemoveBlankLines = v
    End If
End Function

Спасибо

Ответы [ 4 ]

3 голосов
/ 10 мая 2019

Вы можете исправить результат разделения:

Function RemoveBlankLines(Strings As Variant) As Variant
    Dim v As Variant
    Dim i As Long, j As Long

    ReDim v(LBound(Strings) To UBound(Strings))
    j = LBound(Strings) - 1
    For i = LBound(Strings) To UBound(Strings)
        If Trim(Strings(i)) <> "" Then
            j = j + 1
            v(j) = Strings(i)
        End If
    Next i
    If j >= LBound(Strings) Then
        ReDim Preserve v(LBound(Strings) To j)
        RemoveBlankLines = v
    End If
End Function

Затем используйте

FullName = RemoveBlankLines(Split(txt, vbLf))
2 голосов
/ 10 мая 2019

Вы всегда можете заменить два перевода строки в конец одним:

txt = Replace(txt, vbLf, "|")
txt = Replace(txt, "||", "|")
txt = Replace(txt, "||", "|")
txt = Replace(txt, "||", "|")

FullName = Split(txt, "|")
1 голос
/ 10 мая 2019

Еще один, просто для удовольствия:

txt = Split(Replace(Join(Filter(Split("~" & Replace(ActiveCell.Value, vbLf, "~|~") & "~", "|"), "~~", False), vbLf), "~", ""), vbLf)
1 голос
/ 10 мая 2019

Вкратце к одному из других ответов вы также можете сделать это так:

Split(Replace(txt, vbLf + vbLf, ""), vbLf)
...