如何將不同行中以逗號分隔的唯一值取得到 EXCEL 的列清單中
我的數據
Dallas, New York, Austin, Tokyo
Dallas, New York, Austin, Tokyo
London, Tokyo
Tokyo, Istanbul
預期結果:
Dallas
New York
Austin
Tokyo
London
Istanbul
答案1
列中包含數據A,運行這個簡短的 VBA 巨集:
Sub Sundar()
Dim s As String, c As Collection, k As Long
Set c = New Collection
k = 1
s = Replace(Application.WorksheetFunction.TextJoin(",", True, Range("A:A")), " ", "")
arr = Split(s, ",")
On Error Resume Next
For Each a In arr
c.Add a, CStr(a)
If Err.Number = 0 Then
Cells(k, 2).Value = a
k = k + 1
Else
Err.Number = 0
End If
Next a
On Error GoTo 0
End Sub
答案2
我會使用 vba,但為了證明它可以用公式來完成:
=INDEX(TRIM(MID(SUBSTITUTE(TEXTJOIN(",",,$A$2:$A$5),",",REPT(" ",99)),(ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))-1)*99+1,99)),AGGREGATE(15,7,ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))/(COUNTIFS($B$1:B1,TRIM(MID(SUBSTITUTE(TEXTJOIN(",",,$A$2:$A$5),",",REPT(" ",99)),(ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))-1)*99+1,99)))=0),1))
這將連接所有字串,然後建立一個由所有拆分條目組成的數組,,
然後循環傳遞第一個已在增長列表中不存在的條目。
有幾點要注意:
- 這需要 Office 365 或更高版本
- 它是一個數組類型的公式,因此太多會減慢計算速度。
- 維護起來非常困難。
- 它必須在其上方至少放置一個單元格,並且地址上方的單元格應取代
$B$1:B1
對什麼是絕對的和什麼不是絕對的關注。
答案3
手動
- 資料>文字到列>分隔>下一步>逗號>完成
- 將各個列中的所有資料複製到一列中
- 選擇列 > 資料 > 刪除重複項
自動地
- 打開你的工作表
- Alt+F11
- 插入 > 模組
- 貼上此代碼:
子列表_unique() 調暗數據範圍 調暗範圍 暗淡我只要 Dim arr() 作為字串 Dim dict 作為物件:Set dict = CreateObject("Scripting.Dictionary") 變暗鍵作為變體 設定 rngData = 範圍("A14:A17") 對於每個 c In rngData arr = Split(c.Value, ",") 對於 i = 0 至 UBound(arr) 字典(修剪(arr(i)))= 1 下一個 下一個 我 = 1 對於 dict.Keys 中的每個按鍵 rngData(1).Offset(rngData.Rows.Count + i).Value = key 我=我+1 下一個 結束子
- 在程式碼中,變更
Range("A14:A17")
為您擁有資料的實際範圍位址。 - 打F5
答案4
我根據你的回答創建了一個應用程式。這是最簡單的解決方案。只需將資料複製並貼上到文字區域中,然後按一下執行按鈕即可。
您也可以使用組合方塊變更分隔符號。如果您有疑問,請告訴我。
在這裡你有一個無聊的方法來做到這一點。使用 VBA。
Sub Macro1()
Dim countries As String
Dim arrayofcountries
Dim con As Integer
con = 0
For i = 2 To 5
countries = Cells(i, 1).Value
If (countries = "") Then
''Do nothing
Else
arrayofcountries= Split(countries , ",")
For Z = LBound(arrayofcountries) To UBound(arrayofcountries)
Cells(i + con, 3).Value = arrayofcountries(Z)
con = con + 1
Next Z
End If
con = con - 1
Next i
End Sub
只需使用 Excel 刪除重複項即可。