我這里有一個簡單的例子。我有一個帶有兩個表格(如實際表格)的 Excel 表。一張表列出 App 要求,其他顯示硬體要求
| 一種 | 乙 | C | D | |
|---|---|---|---|---|
| 1 | 應用 | 軟體開發 | 網路開發 | 游戲開發 |
| 2 | 單詞 | X | ||
| 3 | 微軟幻燈片軟體 | X | ||
| 4 | Excel | X | X | |
| 5 | 外表 | X | X |
| 一種 | 乙 | C | D | |
|---|---|---|---|---|
| 7 | 硬體 | 軟體開發 | 網路開發 | 游戲開發 |
| 8 | 筆記本電腦 | X | X | |
| 9 | 桌面 | X | X | X |
| 10 | 移動的 | X |
我有一個單元格,我可以在其中輸入職位(例如軟體開發),但我一生都無法弄清楚 VLOOKUPS 來獲得我想要的輸出,向我展示所有的應用程式和硬體。我錯過了一個非常簡單的解決方案嗎?
| 輸入職位 | 軟體開發 |
|---|---|
| Excel | |
| 桌面 | |
| 移動的 |
理想情況下,像輸出一樣的 id 也有像“Apps”和“Hardware”這樣的側標題,但 id 喜歡先弄清楚這個
謝謝
uj5u.com熱心網友回復:
您應該重新考慮資料的布局方式,以使查詢更簡單。唯一的東西(記錄的唯一 ID,行的鍵)將是職位。其他所有內容都基于職位名稱,因此將是列。不使用“x”來指定是否應為特定作業分配特定的硬體或軟體,而是使用布爾邏輯“True”或值“1”。

我還在上面做了一個智能表格(選擇所有表格單元格,轉到“插入”選項卡,選擇“表格”,確保選中“我的表格有標題”)。我在“表格設計”下將其命名為 tblJobs,以便公式看起來更清晰。對于查找表,我使用資料驗證下拉串列(“資料”選項卡 ->“資料驗證”)限制了用戶輸入,因此他們無法在欄位中輸入垃圾。否則他們會打錯東西,并抱怨當他們真的“不能打字”時它是如何“不起作用”的。

O2 中的以下公式被復制到其余部分,用于確定是否應為特定作業分配特定的硬體或軟體:
- 氧氣:
=IF(INDEX(INDIRECT("tblJobs[" & N2 & "]"), MATCH($O$1, tblJobs[Job Title], FALSE))=1, TRUE, FALSE)
所有公式都參考 $O$1,因此當您從下拉驗證串列中選擇不同的作業時,所有單元格都會根據所選作業進行更新。最后,如果您愿意,可以向 N 和 O 列添加過濾器,并且只顯示“真”值。

如果您要保持電子表格不變,我將創建一個 ADDRESS() 參考,然后使用 INDIRECT() 回傳地址參考的內容。

其中 G2 ==ADDRESS(MATCH(F2, A:A, FALSE), MATCH($G$1,A$1:D$1,FALSE))
然后間接包裝: =INDIRECT(ADDRESS(MATCH(F2, A:A, FALSE), MATCH($G$1,A$1:D$1,FALSE)))
- 通過使用 MATCH() 向下搜索 A:A 來查找您正在為每項作業尋找的每一件事的行。
- 通過使用 MATCH() 搜索 A1:D1 來查找您參考的每個作業的列。
- 在 ADDRESS() 函式中以 ADDRESS(row, column) 格式組合行和列,它回傳一個地址參考,如 $B$4。
- INDIRECT() 然后使用地址參考并回傳該位置中存在的內容。

uj5u.com熱心網友回復:
使用陣列公式的替代答案
如果您不想更改原始資料而只是在它之外作業,您可以為此目的使用陣列公式并結合一些技巧使其作業。
通過使用您的示例資料(我故意更改了第二個表的列,以證明它們可以位于不同的列或作業表中)。這是基于
| 字符到點要求 | 職稱 | 表 1 中的列 | 表 1 中的列 |
|---|---|---|---|
| X | 軟體開發 | =SUBSTITUTE(地址(1,MATCH(N4,A5:D5,0),4),1,"") | =SUBSTITUTE(地址(1,MATCH(N4,F5:I5,0) 5,4),1,"") |
| 結果列 | =SUBSTITUTE(ADDRESS(1,MATCH("Apps",A5:D5,0),4),1,"") | =SUBSTITUTE(ADDRESS(1,MATCH("硬體",F5:I5,0) 5,4),1,"") | |
| 行表開始 | 3 | 3 | |
| 行表開始 | 10 | 10 |
然后在單獨的行上獲取陣列公式作為這個公式(一個用于應用程式,一個用于硬體)
在我的圖片中,這是用于應用程式
=INDEX(INDIRECT("$"&$O$5&"$"&$O$6&":$"&$O$5&"$"&$O$7), SMALL(IF(ISNUMBER(MATCH(INDIRECT("$"&$O$4&"$"&$O$6&":$"&$O$4&"$"&$O$7), $M$4, 0)), MATCH(ROW(INDIRECT("$"&$O$4&"$"&$O$6&":$"&$O$4&"$"&$O$7)), ROW(INDIRECT("$"&$O$4&"$"&$O$6&":$"&$O$4&"$"&$O$7))), ""), ROWS($A$1:A1)))
這是針對硬體的
=INDEX(INDIRECT("$"&$P$5&"$"&$P$6&":$"&$P$5&"$"&$P$7), SMALL(IF(ISNUMBER(MATCH(INDIRECT("$"&$P$4&"$"&$P$6&":$"&$P$4&"$"&$P$7), $M$4, 0)), MATCH(ROW(INDIRECT("$"&$P$4&"$"&$P$6&":$"&$P$4&"$"&$P$7)), ROW(INDIRECT("$"&$P$4&"$"&$P$6&":$"&$P$4&"$"&$P$7))), ""), ROWS($A$1:A1)))
擴展公式并獲得所需的結果
示例作業公式

盡管如果您確實需要保留表格格式,則 VBA 解決方案可能會更好(要么構建一個混合它們的虛擬格式,要么遍歷它們中的每一個并附加結果)
uj5u.com熱心網友回復:
如果您有 Excel 365,則可以通過應用兩個FILTER函式然后加入兩個溢位范圍來獲得此結果(如
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479538.html
上一篇:VBAInputBox如果不??回圈回自身,則需要用戶輸入詳細資訊
下一篇:串列框為空時型別不匹配
