
我嘗試使用各種函數組合,但似乎沒有特定函數可以返回未搜尋/匹配的值。由於我需要整理大量數據,手動執行此操作需要幾天時間。
我希望 MS excel 2003 根據清單 B 提取清單 A 的其餘部分。
*列表A有2000個項目,列表B最多只有10-30個
清單 A
No.1----1 2 3 4 5 6(每個數字放在 1 個儲存格中,總是 6 位元)
No.2----1 1 2 3 4 5(每個數字放在1 個單元格中,始終為 6 位)始終為 6 位數字)
No.3----1 3 4 5 6 7(每個數字放在 1 個單元格中,始終為 6 位數字)
列表B
No.1----1 2 3(每個數字放在 1 個單元格中,始終為 3 位數字)
No.2----1 1 4(每個數字放在1 個單元格中,始終為3 位數字)
3----2 3 5(每個數字放在1個單元格中,始終為3個數字)
例如:
在清單 A 中,根據清單 B 的輸入尋找符合項目(如果有),並將餘數作為輸出傳回。如果未找到匹配項,則不需要輸出。
列表A
No.1----1 2 3 4 5 6(每個數字放在1個單元格中,始終為6位數字)
基於列表B
No.1----1 2 3(找到匹配(存在1&2&3),然後我手動選擇餘數### 4 5 6或= 456)
No.2----1 1 4(未找到匹配項(1&1&4 不存在),無輸出)
No.3----2 3 5(找到匹配項(2&3&5 存在),然後我選擇 1 # # 4 # 6 或輸出= 146)
我想我使用COUNT 函數來計算列表A 上每個項目中每個數字0-9 的頻率,然後使用IF & AND 函數(指定每個數字需要哪些數字和多少個數字才能符合匹配條件)來告訴我哪個數字清單 B 上的項目與清單 A 相符。
因此,對於清單 A 中的每個項目,我需要 excel 遍歷整個清單 B,並且輸出範圍可以從無輸出到最多 3 個輸出。
我還希望能夠更改清單 B 中的值而不更改用於搜尋的公式,以便我可以輕鬆地重複使用相同工作表。
到目前為止,我使用其他函數的所有其他嘗試都未能以我想要的方式提取剩餘部分。如果您有任何建議請教我。
答案1
好的,這是一個可行的解決方案,但設定它可能會給您帶來腦損傷。我一次一步地建立它,計算一組內容,然後供下一個計算使用。一旦我有了一個工作模型,我就會向後工作,用實際公式替換單元格引用,以便所有公式僅引用您的實際列表而不是中間計算。公式如雨後春筍般湧現。事實上,第一次嘗試產生的配方超出了電池容量。我把它分成兩張桌子,第一張桌子餵第二張桌子。這些表格非常大,如果您試圖讓所有單元格引用指向正確的位置,以便在整個表格的兩個方向上填充公式,您可能會非常瘋狂。因此,我添加了一些間接引用,以便可以簡單地複製和貼上公式,並且無需手動清理即可工作。不幸的是,這產生了一些相當大的公式。
我將作為位於電子表格上特定位置的範例來解釋這一點。如果您需要在其他地方找到這些片段,請編輯第一個儲存格中的所有行和列引用,然後複製並貼上以填入表格。為了您自己的理智,請設定一些已知的範例,以便您可以在填充整個表之前驗證每個表中的前幾行和前幾列是否正常工作。服用一些預防性阿斯匹靈,我們就可以開始了。
這基於 A 至 F 列中的清單 A,資料從第 1 行(2,000 行)開始。清單 B 位於 H 至 J 欄中,資料從第 1 行(30 行)開始。
第一個表格從 L1 開始。此表格建立清單 B 條目在清單 A 記錄中的位置清單。例如:
Position: 1 2 3 4 5 6
So if a List A record contains: 1 3 3 5 7 9
and a List B record contains: 1 3 7
the entry in this table will be: 1 2 5 (stored as a single number: 125)
如果清單 B 記錄與清單 A 記錄不匹配,則儲存格中將顯示 #N/A。這個表的佈局是這樣的:
[L] [M] [N] [O]
[1] <=======List B Row========>
[2] List A Row 1 2 3 ...
[3] 1
[4] 2
[5] 3
...
您實際上需要將行號作為列標題放入 M 列到 AP 的第 2 行中,並作為行標籤放入 L 列中。有 30 個資料列,清單 B 條目的每一行都有一個,您將有 2,000 行,代表清單 A 中的條目,從第 3 行開始。這是 M3 的公式:
=MATCH(INDIRECT("H"&M$2),$A1:$F1,0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)
+MATCH(INDIRECT("J"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)+1, , )&":$F"&$L3),0)
我在這裡對公式進行了分解,以使其更具可讀性,但它只是一個公式。使用一些範例資料驗證它是否可以在 M3 到 N4 中工作,然後複製並貼上以填充表格。
第二個表從 AR1 開始。該表的結構相同:
[AR] [AS] [AT] [AU]
[1] <=======List B Row========>
[2] List A Row 1 2 3 ...
[3] 1
[4] 2
[5] 3
...
此表的工作方式與第一個表類似 - 每個單元格代表清單 B 記錄與清單 A 記錄的結果。該表包含您的剩餘部分。因此,在我為第一個表給出的示例中,餘數將為 359:
So if a List A record contains: 1 3 3 5 7 9
and a List B record contains: 1 3 7
the remainder is: 3 5 9
單元格 AS3 中的公式為:
=IF(ISNA(M3),"",IF(ISERROR(FIND(COLUMN(INDIRECT("a"&$AR3)),M3)),INDIRECT("a"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("b"&$AR3)),M3)),INDIRECT("b"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("c"&$AR3)),M3)),INDIRECT("c"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("d"&$AR3)),M3)),INDIRECT("d"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("e"&$AR3)),M3)),INDIRECT("e"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("f"&$AR3)),M3)),INDIRECT("f"&$AR3),""))
該表中的每個單元格將包含餘數或空字元(如果沒有匹配項)。
您想要取得每個清單 A 記錄的結果摘要。由於表格的每一行代表一個清單 A 記錄,因此摘要可以位於表格的每一行的末尾。表的 30 列以 BV 列結束,因此結果位於 BW 列中。 BW3 的公式為:
=AS3&IF(ISBLANK(AS3),""," ")&AT3&IF(ISBLANK(AT3),""," ")& ... &BV3&IF(ISBLANK(BV3),""," ")
這裡沒有顯示所有 30 個術語,而是僅顯示前兩個和最後一個。按照相同的模式添加其餘部分。它透過連接每個匹配的結果來建立結果字串。如果儲存格中有一個值,它會在下一個值之前加上一個空格。如果您想要不同的分隔符,請將空格變更為其他內容,例如逗號空格。將此公式複製到 BW 列的所有行中。
這可能不是結果最有用的地方。一旦一切正常,你就可以移動東西了。事實上,如果你移動任何東西,你可能會大量清理單元格引用。在另一個位置建立所需的輸出並使用儲存格引用來引用已設定的內容會更有意義。