![](/img/trans.png)
[英]Excel VBA - Getting a list of unique entries across various columns and combine into a single column of unique items
[英]Excel UNIQUE Across Columns
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 的免費插件中獲得。
上面也會處理空值。 現在:
結果表:
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.