簡體   English   中英

Excel 跨列唯一

[英]Excel UNIQUE Across Columns

新的 function UNIQUE是否可以在各個列中使用,並且 output 是否可以溢出到單個列中?


所需的 output 是單列中的UNIQUE值,基於列中存在的所有值Columns: A, B, & C示例中紅色重復

在此處輸入圖像描述


  • 如果我只使用UNIQUE(A7:C7)我會得到跨列的溢出范圍(這甚至不提供跨列的唯一值,這是出乎意料的
  • 我也嘗試過UNIQUE(A2:A6) & UNIQUE(B5:B10) & UNIQUE(C2:C5)但這只是連接了值(也是意外但不相關

可能有更好的方法,但這里有一個使用 TEXTJOIN 和 FILTERXML 創建一個可以調用 UNIQUE 的數組:

=SORT(UNIQUE(FILTERXML("<t><s>"&TEXTJOIN("</s><s>",TRUE,A1:C6)&"</s></t>","//s")))

在此處輸入圖像描述

TEXTJOIN 確實有字符限制。 我們可以用 INDEX、SEQUENCE 和 FILTER 來克服這個問題:

=SORT(UNIQUE(FILTER(INDEX(A1:C6,MOD(SEQUENCE(COLUMNS(A1:C6)*ROWS(A1:C6),,0),MAX(ROW(A1:C6)))+1,INT(SEQUENCE(COLUMNS(A1:C6)*ROWS(A1:C6),,0)/(MAX(ROW(A1:C6))))+1),INDEX(A1:C6,MOD(SEQUENCE(COLUMNS(A1:C6)*ROWS(A1:C6),,0),MAX(ROW(A1:C6)))+1,INT(SEQUENCE(COLUMNS(A1:C6)*ROWS(A1:C6),,0)/(MAX(ROW(A1:C6))))+1)&""<>"")))

INDEX 創建一個垂直數組,可以先將其傳遞給 FILTER 以刪除空白,然后再傳遞給 UNIQUE。

盡管這更復雜,但它沒有字符限制。

在此處輸入圖像描述

我正在提供這個問題的答案,因為它被標記為與該線程重復。 您可以直接從FILTERXML()公式中獲取唯一值,而無需使用UNIQUE function。 因此,您可以將這個 function 用於非O365僅具有TEXTJOIN()FILTERXML() function 例如: Excel2019

FILTERXML()可能會以最佳方式給出您想要的結果。 試試下面的公式 -

=FILTERXML("<t><s>"&TEXTJOIN("</s><s>",TRUE,B4:D10)&"</s></t>","//s[not(preceding::*=.)]")
  • 帶有分隔符</s><s> Textjoin()將連接指定范圍內的所有非空單元格以構造有效的XML字符串。
  • "<t><s>"&TEXTJOIN("</s><s>",TRUE,B4:D10)&"</s></t>"將構造XML字符串以通過FILTERXML()公式處理。
  • XPath參數//s將返回所有節點,其中[not(preceding::*=.)]將僅過濾唯一節點。
  • 您可以調整范圍B4:D10以供將來輸入數據,以便無論何時輸入任何文本,它都會自動出現在結果列中。

JvdV 關於FILTERXML()的診斷文章Excel - 使用 FILTERXML 從字符串中提取子字符串

在此處輸入圖像描述

使用 Microsoft365 訪問LET() ,您可以使用:

在此處輸入圖像描述

E2中的公式:

=LET(X,A2:C7,Y,SEQUENCE(ROWS(X)*COLUMNS(X)),Z,INDEX(IF(X="","",X),1+MOD(Y,ROWS(X)),ROUNDUP(Y/ROWS(X),0)),SORT(UNIQUE(FILTER(Z,Z<>""))))

這樣,公式變得很容易重復使用,因為我們必須更改的唯一參數是對“X”的引用。


對於它的價值,它也可以通過 PowerQuery AKA Get&Transform 完成,可從 Excel2013 或 Excel 2010 的免費插件中獲得。

  • Select 您的數據(包括標題)。 Go 到功能區 > 數據 > “從表/范圍”。
  • 確認您的數據有標題並且 PowerQuery 應該打開。
  • 在 PowerQuery select 所有列中。 Go 轉換>“轉置”。
  • 再次 Select 所有列。 Go 轉換 >“取消透視列”。

上面也會處理空值。 現在:

  • Select 屬性列並將其刪除。
  • 對剩余的列進行排序並刪除重復項(右鍵單擊 header >“刪除重復項”)。
  • 關閉 PowerQuery 並保存更改。

結果表:

在此處輸入圖像描述

M-Code:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"A Values", Int64.Type}, {"B Values", Int64.Type}, {"C Values", Int64.Type}}),
    #"Transposed Table" = Table.Transpose(#"Changed Type"),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Transposed Table", {}, "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Value", Order.Ascending}}),
    #"Removed Duplicates" = Table.Distinct(#"Sorted Rows")
in
    #"Removed Duplicates"

您可以使用我的存儲庫中的DM_ARRAY function: VBA-ArrayTools 有一個演示工作簿可用,您將找到每個用戶定義的 Function (UDF) 的專用工作表。 對於DM_ARRAY ,第一個參數是您想要的列數 output 然后您可以根據需要傳遞任意數量的范圍。 在您的情況下,您可以使用=UNIQUE(DM_ARRAY(1,A2:A6,B5:B10,C2:C5))獲得所需的結果。

暫無
暫無

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

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