[英]Excel Split Text with Multiple Delimiters
第一次在這里發問題。 很高興成為社區的一員!
我有一個棘手的情況,為客戶轉換數據讓我很困惑。
我需要找到一種方法,不僅可以通過多個分隔符分割一個單元格,而且還需要刪除一些數據點。 在這種情況下,我們討論的是租戶列表和租約中的任何其他租戶。
你會看到至少有一個我可以在這里使用的通用分隔符。 “:”可以讓我簡單地拆分名稱,但這里真正的問題是需要刪除數據點“兒子”或“女兒”下列出的租戶名稱。 另一方面,必須保留列為“居民”或“租戶”的租戶。
您會看到名稱被拆分,僅保留“租戶”或“居民”下列出的名稱,其他名稱被刪除。
我試圖找到並用一個可以用來拆分的簡單字符替換我想要保留的術語,但問題是我使用它的順序不一致。 我一直在尋找一個可以正常工作的拆分 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.