從不同行中以逗號分隔的值取得列中的唯一列表

從不同行中以逗號分隔的值取得列中的唯一列表

如何將不同行中以逗號分隔的唯一值取得到 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))

這將連接所有字串,然後建立一個由所有拆分條目組成的數組,,然後循環傳遞第一個已在增長列表中不存在的條目。

有幾點要注意:

  1. 這需要 Office 365 或更高版本
  2. 它是一個數組類型的公式,因此太多會減慢計算速度。
  3. 維護起來非常困難。
  4. 它必須在其上方至少放置一個單元格,並且地址上方的單元格應取代$B$1:B1對什麼是絕對的和什麼不是絕對的關注。

在此輸入影像描述

答案3

手動

  1. 資料>文字到列>分隔>下一步>逗號>完成
  2. 將各個列中的所有資料複製到一列中
  3. 選擇列 > 資料 > 刪除重複項

自動地

  1. 打開你的工作表
  2. Alt+F11
  3. 插入 > 模組
  4. 貼上此代碼:
子列表_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
  下一個

結束子
  1. 在程式碼中,變更Range("A14:A17")為您擁有資料的實際範圍位址。
  2. 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 刪除重複項即可。

相關內容