回覆列表
-
1 # 見人拉屎喉嚨癢
-
2 # Excel學習世界
瀉藥!你這個需求是一對多查詢,且轉置表格。
案例:圖 1 是原始表格,需要按班級提取所有人的姓名,向右填充,佈局如圖 2 的右邊所示。
解決方案 1:萬金油公式先將班級列表去重,提取到右邊藍色區域:
1. 將 D 列作為輔助列,在 D2 輸入以下公式,下拉複製公式:
=COUNTIF(A$2:A2,A2)
公式釋義:
統計每個班級是第幾次出現A$2:A2:第一個單元格的行必須固定,第二個活動,這樣隨著公式下拉,始終統計 A$2 到當前行所在單元格區域內,班級名稱的重複次數,即第幾次出現2. 在 E2 單元格輸入以下公式,按 Ctrl+Shift+Enter 使陣列公式生效,下拉複製公式:
=INDEX($A$2:$A$10,SMALL(IF($D$2:$D$10=1,ROW($A$2:$A$10),4^8),ROW(A1)))
公式釋義:
index+small+if+row 就是傳說中的萬金油公式,什麼都能查$A$2:$A$10:要查詢的資料區域$D$2:$D$10=1:表示班級名稱第一次出現,即去重值ROW($A$2:$A$10):如果滿足上述去重條件,則返回班級名所在的行值4^8:如果不滿足,則返回 4 的 8 次方,即 65536,這是 Excel 2003 的最大行數,通常用來表示找不到就返回最後一個空單元格ROW(A1):a1 的行值,為“1”,隨著公式下拉,會產生步長為 1 的序列值small(...,row(a1)):依次取出陣列中第 n 小的值,這個 n 就是 row() 函式返回的值;這一組第 n 小的值就是每個班級名第一次出現時的行值最後用 index 函式根據行值,查找出班級這是個陣列公式,所以最後一定要按 Ctrl+Shift+Enter 結束現在根據班級一對多查詢姓名:
3. 在 F2 單元格輸入以下公式,按 Ctrl+Shift+Enter 使陣列公式生效,向右向下拖動複製公式::
=INDEX($B:$B,SMALL(IF($A$2:$A$10=$E2,ROW($A$2:$A$10),4^8),COLUMN(A1)))&""
公式釋義:
再次使用萬金油公式,挑不同之處解釋
$A$2:$A$10=$E2:將 A 列中的班級名與 E2 匹配COLUMN(A1):因為這次表格轉置了,向右拖動的時候 row 函式結果不會遞增,所以改用 column 函式&"":當找到 65536 行時,index 會返回“0”,為了不顯示無意義的“0”值,&"" 的作用是把數值轉換為文字,“0”就不會顯示出來了。解決方案 2:vlookup1. 在“班級”左邊增加一個輔助列,公式如下:
=B2&E2
E 列就是解決方案 1 中的輔助列 D,只是增加了 A 列之後順序右移了F 列也是在解決方案 1 中用第一個萬金油公式提取出的班級名2. 在 G2 單元格輸入以下公式,向右向下拖動複製公式:
=IFERROR(VLOOKUP($F2&COLUMN(A1),$A:$C,3,0),"")
公式釋義:
$F2&COLUMN(A1):向右拖動到時候,column 函式會返回步長為 1 的序列值,結果就為“一班1”,“一班2”……這就與 A 列的值匹配上了vlookup 是大家最熟悉的配方,就不多解釋了最後用 iferror() 函式將錯誤值顯示為空 -
3 # 曉宋的OFFICE專欄
先加一個輔助列 吧戶號,和在這個戶中的順序列出來
在用vlookup組合填充就可以了
這樣會有有報錯,可用iferror去掉報錯
簡單啊,1資料載入到power query,把身份證,姓名,關係欄位合併為一個新欄位,並且以分隔符隔離,例如逗號,
2分組依據,按照戶號,新列名隨便,操作改為求和,對新欄位求和。
3將編輯欄的sum函式,更改為Text.Combine注意字母大小寫!!
4拆分列,按照逗號拆分,並且把高階項拆分列數調大點,比如最多一戶7人,就得每人涉及身份證,名字,關係三個欄位,7人就要3*7=21列。
5關閉載入pq編輯器,資料發生變化,每次右鍵重新整理即可