簡體   English   中英

Excel 使用多個分隔符分割文本

[英]Excel Split Text with Multiple Delimiters

第一次在這里發問題。 很高興成為社區的一員!

我有一個棘手的情況,為客戶轉換數據讓我很困惑。

我需要找到一種方法,不僅可以通過多個分隔符分割一個單元格,而且還需要刪除一些數據點。 在這種情況下,我們討論的是租戶列表和租約中的任何其他租戶。

這就是數據的導出方式及其當前 state 在此處輸入圖像描述

你會看到至少有一個我可以在這里使用的通用分隔符。 “:”可以讓我簡單地拆分名稱,但這里真正的問題是需要刪除數據點“兒子”或“女兒”下列出的租戶名稱。 另一方面,必須保留列為“居民”或“租戶”的租戶。

我希望這個看起來如何的一個例子在此處輸入圖像描述

您會看到名稱被拆分,僅保留“租戶”或“居民”下列出的名稱,其他名稱被刪除。

我試圖找到並用一個可以用來拆分的簡單字符替換我想要保留的術語,但問題是我使用它的順序不一致。 我一直在尋找一個可以正常工作的拆分 VBA function,但沒有任何運氣。

歡迎在這里提出想法!

我認為這個 function 可能是過度殺戮。 但它會做你想做的事。

Function SplitCellValue(ByVal CellVal As String) As String
    '137
    
    Const Qualifiers    As String = "tenant,resident"
    
    Dim Fun()       As String           ' function return array
    Dim n           As Integer          ' index of Fun()
    Dim Qword()     As String           ' split Qualifiers
    Dim q           As Integer          ' index of Qword
    Dim Sp()        As String           ' split array
    Dim i           As Integer          ' index of Sp()
    Dim Skip        As Boolean          ' True if entry doesn't qualify
    Dim Append      As Boolean          ' True to append unqualified entry to previous
    
    If Len(CellVal) Then                ' skip blank CellVal
        Qword = Split(Qualifiers, ",")
        Sp = Split(Trim(CellVal), ",")
        ReDim Fun(1 To UBound(Sp) + 1)
        For i = 0 To UBound(Sp)
            If InStr(Sp(i), ":") Then
                For q = LBound(Qword) To UBound(Qword)
                    Skip = CBool(InStr(1, Sp(i), Qword(q), vbTextCompare))
                    If Skip Then Exit For
                Next q
                If Skip Then
                    n = n + 1
                    Fun(n) = Trim(Sp(i))
                    Append = True
                Else
                    Append = False
                End If
            Else
                If n = 0 Then
                    ' preserve unqualified, leading entry
                    n = 1
                    Append = True
                End If
                If Append Then
                    If Len(Fun(n)) Then Fun(n) = Fun(n) & ", "
                    Fun(n) = Fun(n) & Trim(Sp(i))
                End If
            End If
        Next i
    End If
    
    If i Then
        ReDim Preserve Fun(1 To n)
        SplitCellValue = Join(Fun, ", ")
    End If
End Function

列出常量Qualifiers中的所有限定符。 其他一切都將被拒絕。 限定符僅在與冒號出現在相同的逗號分隔元素中時才限定元素。 (我可能還不如將兩者結合起來,但我沒有。)

您可以在 VBA 中使用這個 function 和這樣的調用。

Private Sub Test_SplitCellValue()

    Dim R As Integer
    
    For R = 2 To 5
        Debug.Print i, SplitCellValue(Cells(R, 1).Value)
    Next R
End Sub

或作為 UDF,稱為=SplitCellValue(A2) 為此使用安裝在標准代碼模塊中。

過度殺傷是 function 可以做到的,這可能是不需要的。 (1) 空白單元格將返回空白。 (2) 非空白單元格如果沒有找到冒號,則返回其原始值。 (3) 第一個元素之前帶有冒號的任何內容都將包含在返回中。 (4) 刪除原文中的空格並用逗號后面的空格替換,這些空格本身被刪除,然后放置在限定元素之間。 如果您的數據或期望與我的預期不一致,所有這些都需要大量代碼進行修改。

因此,經過反復試驗,這比我想象的要簡單得多。 有兩種不同的“、”&“”實例(一個后面有一個空格)以不同的方式使用。

我能夠找到並用空格替換逗號的實例,保持我需要的細節完整,同時在沒有空格的情況下分隔“,”。

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM