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() 函數將錯誤值顯示為空上一篇58同城培訓靠譜嗎
下一篇為什么有些家長越不管