Note: The other languages of the website are Google-translated. Back to English

如何從Excel中的多個列中提取唯一值?

假設您有多個具有多個值的列,則某些值在同一列或不同列中重複。 現在,您只想查找任一列中存在的值一次。 是否有任何快速技巧可以從Excel中的多個列中提取唯一值?


使用數組公式從多個列中提取唯一值

這是一個數組公式,也可以幫助您從多個列中提取唯一值。

1。 假設您的值在範圍內 A2:C9,請在單元格E2中輸入以下公式:

=INDIRECT(TEXT(MIN(IF(($A$2:$C$9<>"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&""

備註:在以上公式中, A2:C9 表示要提取唯一值的單元格範圍, E1:E1 是您要放置結果的列的第一個單元格, $ 2:$ 9 這些行包含要使用的單元格,並且 $ A:$ C 表示列包含您要使用的單元格。 請更改為您自己的。

2。 然後按 Shift + Ctrl + 輸入 鍵,然後拖動填充手柄以提取唯一值,直到出現空白單元格。 看截圖:


使用數據透視表從多個列中提取唯一值

如果您熟悉數據透視表,則可以按照以下步驟輕鬆地從多個列中提取唯一值:

1。 首先,請在數據左側插入一個新的空白列,在本例中,我將在原始數據旁邊插入A列。

2。 單擊數據中的一個單元格,然後按 Alt + D 鍵,然後按 P 立即打開鑰匙 數據透視表和數據透視圖嚮導選擇 多種合併範圍 在嚮導step1中,查看屏幕截圖:

3。 然後點擊 下一頁 按鈕,檢查 為我創建一個頁面字段 嚮導步驟2中的選項,請參見屏幕截圖:

4。 繼續點擊 下一頁 按鈕,單擊以選擇包括左側新的單元格列的數據范圍,然後單擊 加入 按鈕將數據范圍添加到 所有範圍 列錶框,請參見屏幕截圖:

5。 選擇數據范圍後,繼續單擊 下一頁 ,在嚮導的第3步中,根據需要選擇要放置數據透視表報表的位置。

6. 最後點擊 以完成嚮導,並在當前工作表中創建了一個數據透視表,然後取消選中 選擇要添加到報告中的字段 部分,請參見屏幕截圖:

7. 然後檢查現場 或將值拖到 標籤,現在您將從多個列中獲得唯一值,如下所示:


使用VBA代碼從多個列中提取唯一值

使用以下VBA代碼,您還可以從多個列中提取唯一值。

1。 按住 ALT + F11 鍵,然後打開 Microsoft Visual Basic for Applications窗口.

2。 點擊 插入 > 模塊,然後將以下代碼粘貼到“模塊窗口”中。

VBA:從多個列中提取唯一值

Sub Uniquedata()
'Updateby Extendoffice
Dim rng As Range
Dim InputRng As Range, OutRng As Range
Set dt = CreateObject("Scripting.Dictionary")
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
For Each rng In InputRng
    If rng.Value <> "" Then
        dt(rng.Value) = ""
    End If
Next
OutRng.Range("A1").Resize(dt.Count) = Application.WorksheetFunction.Transpose(dt.Keys)
End Sub

3。 然後按 F5 運行此代碼,將彈出一個提示框,提醒您選擇要使用的數據范圍。 看截圖:

4。 然後點擊 OK,將出現另一個提示框,讓您選擇放置結果的位置,請參見屏幕截圖:

5. 點擊 OK 關閉此對話框,並立即提取所有唯一值。


從一個單一的列中提取具有獨特功能的獨特值

有時,您需要從單個列中提取唯一值,上述方法將無濟於事,在這裡,我可以推荐一個有用的工具-Excel的Kutools,其 提取具有唯一值的單元格(包括第一個重複項) 實用程序,您可以快速提取唯一值。

備註:要應用此 提取具有唯一值的單元格(包括第一個重複項),首先,您應該下載 Excel的Kutools,然後快速輕鬆地應用該功能。

安裝後 Excel的Kutools,請這樣做:

1。 單擊要在其中輸出結果的單元格。 (備註:不要單擊第一行中的單元格。)

2。 然後點擊 庫工具 > 公式助手 > 公式助手,請參見屏幕截圖:

3。 在 公式助手 對話框,請執行以下操作:

  • 選擇 文本 選項從 公式 類別 下拉列表;
  • 然後選擇 提取具有唯一值的單元格(包括第一個重複項) 來自 選擇一個草 列錶框;
  • 在右邊 參數輸入 部分中,選擇要提取唯一值的單元格列表。

4。 然後點擊 Ok 按鈕,然後將填充手柄拖到要列出所有唯一值的單元格上,直到顯示空白單元格為止,請參見屏幕截圖:

立即免費下載Kutools for Excel!


更多相關文章:

  • 計算列表中唯一值和不同值的數量
  • 假設您的值列表很長,其中包含一些重複項,現在,您想要計算唯一值(僅一次出現在列表中的值)或不同值(列表中所有不同值的數量)的數量值+第一個重複值),如左圖所示。 本文,我將討論如何在Excel中處理此工作。
  • 根據Excel中的條件提取唯一值
  • 假設您具有以下數據范圍,您希望根據列A的特定標準僅列出列B的唯一名稱,以得到結果,如下面的屏幕快照所示。 您如何在Excel中快速輕鬆地處理此任務?
  • 僅在Excel中允許唯一值
  • 如果您只想在工作表的列中輸入唯一值並防止重複,則本文將介紹一些快速技巧來處理此任務。
  • 根據Excel中的條件求和唯一值
  • 例如,我現在有一系列數據,其中包含“名稱”和“訂單”列,以便根據“名稱”列僅對“訂單”列中的唯一值求和,如下圖所示。 如何在Excel中快速輕鬆地解決此任務?

最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (31)
5中的5評分 · 1評級
網站主持人對此評論進行了最小化
Is this formula complete? =INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"",
網站主持人對此評論進行了最小化
這還沒有修復:sad:
網站主持人對此評論進行了最小化
多麼浪費時間......公式不起作用
網站主持人對此評論進行了最小化
謝謝!!! 我一直在花費數小時試圖做到這一點並弄清楚 Pivot Wizard 發生了什麼(其他文章)。
網站主持人對此評論進行了最小化
我正在使用您的 VBA 代碼,但不希望該框彈出。 相反,我想準確定義每次使用的單元格範圍以及將輸出放入的確切框。輸入範圍和輸出將位於兩個不同的工作表上。 我如何更新 VBA 來做到這一點? 謝謝!!
網站主持人對此評論進行了最小化
嘿! 有誰知道為什麼這個公式在第 87 行之後似乎會導致錯誤? 就像,它完美地工作,然後在某一點上它只是返回我每一行的錯誤..這是最糟糕的! 因為我非常接近我在這裡需要的東西......
網站主持人對此評論進行了最小化
=INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"" It doesn't work
網站主持人對此評論進行了最小化
嗨,當我將第一列與另一列(我有三個不相等的列)進行比較時,我想從第一列中提取唯一的單元格,我該怎麼做?
網站主持人對此評論進行了最小化
嗨,我有三個不相等的列,想提取第一列的唯一單元格。 我該怎麼做?? 提前致謝
網站主持人對此評論進行了最小化
我喜歡

使用數據透視表從多列中提取唯一值
網站主持人對此評論進行了最小化
您能否提交正確的公式... VBA 函數工作得很好。
就我的項目而言,我寧願使用正確的公式。


謝謝
網站主持人對此評論進行了最小化
有誰知道,對於輸出,如何使它變成幾行而不是一行? (目前一行結果是通過worksheetfunction.transpose實現的,但我想要實現的(作為結果)是當選擇3列時,返回的結果也是3列,而不是XNUMX列
網站主持人對此評論進行了最小化
這個數組公式是正確的。 A到C列中的數據,單元格D2中的第一個結果公式......這個與其他數組公式不同,後者是向下複製公式和Ctrl + Shift + Enter所有公式。 但是,這個數組公式應該在第一個單元格中按 Ctrl+Shift+Enter 並向下複製。
網站主持人對此評論進行了最小化
Muchas gracias por la macro!!! 我很實用
網站主持人對此評論進行了最小化
我已經調整到我的工作表,但只返回定義數組中的第一個值......我錯過了什麼?
網站主持人對此評論進行了最小化
你好,科迪,
上面的公式在我的工作表中效果很好,你能在這裡給你的數據問題截圖嗎?
感謝您!
網站主持人對此評論進行了最小化
關於公式版本,您能否更詳細地解釋這部分的作用? *100+COLUMN($A:$C),7^8)),"R0C00") 具體來說,有哪些 * 100, 7 8 ^“R0C000” 正在做? 我理解其他所有內容,但我無法弄清楚這些是什麼。
網站主持人對此評論進行了最小化
我在這裡的回復有點晚了,但是......
ROW($2:$9)*100 - 這是行號 *100 的乘積,所以如果它在第 5 行,現在的數字是 500
COLUMN($A:$C) - 這被添加到第 100 行數字,所以如果它是第 5 行第 2 列,那麼數字是 502。
7^8)), - 這(我認為)是為之前的 min 語句設置一個最大值。
"R0C00") - 根據數字格式化文本。 在示例中,我們有 502,所以這給出了 R5C02(第 5 行,第 02 列)。

如果您有很多列但沒有很多行,那麼您可以將其更改為 ROW($2:$9)*1000+COLUMN($A:$C),7^8)),"R0C000")
網站主持人對此評論進行了最小化
感謝您的代碼。 我正在使用此頁面的 VBA 代碼。 有沒有辦法在提取唯一值後添加排序代碼以便自動排序?
網站主持人對此評論進行了最小化
我們可以創建 uniqdata 函數而不是宏嗎?
網站主持人對此評論進行了最小化
嗨,İlhan,如果您喜歡用戶定義函數來創建解決此問題的公式,下面的代碼可能會對您有所幫助:插入代碼後,選擇要放置結果的單元格列表。 然後輸入這個公式:=獨特(A1:C4)  在公式欄中。按 按Ctrl + Shift + Enter組合 鑰匙在一起。 


Function Uniques(ByVal inputRange As Range)
Dim inputArray As Variant
Dim myColl As New Collection
Dim xVal As Variant
Dim outArray() As Variant
On Error Resume Next
With inputRange
inputArray = Application.Intersect(.Cells, .Parent.UsedRange).Value
End With
On Error GoTo 0
On Error Resume Next
For Each xVal In inputArray
myColl.*** Item:=xVal, Key:=(CStr(xVal) & TypeName(xVal))
Next xVal
myColl.Remove "String"
On Error GoTo 0
ReDim outArray(1 To Application.Max(myColl.Count, Application.Caller.Cells.Count))
For xVal = 1 To UBound(outArray)
outArray(xVal) = vbNullString
Next xVal
For xVal = 1 To Application.Min(myColl.Count, Application.Caller.Cells.Count)
outArray(xVal) = myColl(xVal)
Next xVal
If Application.Caller.Columns.Count = 1 Then
Uniques = Application.Transpose(outArray)
Else
Uniques = outArray
End If
End Function
查看附件 (1 / 5)
網站主持人對此評論進行了最小化
Czy 到 żart?
網站主持人對此評論進行了最小化
頂部的數組公式在與同一張表中的數據一起使用時效果很好,但是當我嘗試使用它從另一張表中引用相同的確切數據時,該公式不返回任何內容。 我無法弄清楚為什麼。 數組函數是否存在阻止您在不同工作表中引用範圍的限制?

感謝您提供的任何見解。
網站主持人對此評論進行了最小化
你好艾琳,

樂意效勞。 此公式中的 INDIRECT 函數在引用其他工作表中的數據時使用起來更加複雜。 在不同工作表中引用範圍時,不建議使用此功能。

例如:現在數據在Sheet1中,我想在Sheet2中引用Sheet1的單元格C2的內容。 首先,在 Sheet2 的任意兩個單元格中,例如 D1 和 D2,分別輸入 Sheet1 和 C2。 此時,在Sheet2的空單元格中輸入公式:
=INDIRECT("'"&D1&"'!"&D2),則可以返回Sheet2中C1單​​元格的內容。

如您所見,它使事情變得更加複雜。 希望我的解釋能有所幫助。 祝你今天過得愉快。

此致,
曼迪
網站主持人對此評論進行了最小化
先生,你好! VBA 創造了奇蹟,非常感謝您! 我想知道,如果我更改原始數據,是否可以自動刷新具有唯一值的列?
5中的5評分
網站主持人對此評論進行了最小化
你好伊奧尼斯,

樂意效勞。 更改原始數據後,VBA 無法自動刷新結果。 我能想到的最簡單的方法是按 Ctrl + Alt + F9 刷新所有打開的工作簿中的工作表中的所有結果。 祝你今天過得愉快。

此致,
曼迪
網站主持人對此評論進行了最小化
謝謝你這篇很棒的文章。

對於正在使用 非英語 Excel 中的數組公式 必須特別注意文本格式字符串:在您的示例中:“R0C00”。
對於德語,這將轉換為“Z0S00”。 但是,“S”是一個特殊字符,表示時間格式的秒數。 該字符需要轉義,因此德語 Excel 的正確格式字符串是“Z0\S00”。

我希望這對將來的某人有所幫助:-)
這裡還沒有評論
載入更多
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護