一個公式,將資料提取到指定工作表
今天和大家分享CELL函式的知識。期待能收到一朵小花還有無數多情的目光。
在日常應用中,從總表中拆分資料還是經常會用到的。比如說,將銷售資料提取到各個銷售部工作表、將學生名單提取到各個班級工作表……
今天分享的內容,就是和拆分有關的那些事。
動態獲取工作表名稱
開啟一個Excel工作薄,在某個單元格里輸入公式:
=CELL("filename",A1)
會返回一串字串,比如D:學習[me.xlsx]總表。
其中,“學習”是資料夾的名稱;“[me.xlsx]”是工作薄的名稱和型別;“總表”是A1單元格所在工作表的名稱。
如果我們要單獨獲取工作表的名稱,比如此處的“總表”,可以使用文字函式對CELL函式的結果進行加工處理。
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,99)
FIND函式查詢字元"]"在字串中的位置並加1,(為啥加1?你猜唄),MID函式在此結果上開始取數,取99個數,99是一個很大的數,此處也可以是66、88等,只要超過了預想字串的長度,改成250或者25也是可以的。
好啦,這是我們今天分享的第一個知識,用CELL函式動態獲取工作表名稱。
有小夥伴說了,工作表名就在那,我一眼就看的到,你用函式算計它幹哈子嘛?做人可不要太宮心計……這當然是有意義的。
批量拆分資料
有這麼一份表格,是某公司的人員資訊表,現要根據性別,把相關人員的資訊批量填充到分表裡,比如女生填寫到女生表,男生填寫到男生表等。
而當總表裡的資訊發生改變,或者有新增資料時,分表裡的資料也發生相應的改變。
接下來就看看具體的步驟:
選取要拆分資料的工作表
單擊位於左側的【男生】工作表標籤,按住Shift鍵,再單擊最右側的【人妖】工作表,此時除【總表】外的分表會成為一個【工作組】,每個分表均處於選中狀態。
輸入公式,拆分資料
在成組工作表中的A2單元格,輸入下方的陣列公式,按組合鍵<Ctrl+Shift+Enter>,向下向右複製填充到A2:B50區域。
=INDEX(總表!B:B,SMALL(IF(總表!$C$2:$C$13=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,99),ROW($2:$13),4^8),ROW(A1)))&""
太陽照,長城長——嗨,那誰,你看,這個長長的老太太裹腳布函式又來了,又是INDEX+SMALL+IF的函式套路。
之前咱可就說過,這是一個萬金油套路,是玩函式必會的套路之一,也不知道你後來學了沒?你不說話不點贊,俺就當你學了哈。
還是簡單說下這個公式的意思。
MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,99)
用於獲取A1單元格所在工作表的表名。
需要說明的是,此處CELL("filename",A1)第二引數A1是不能省略的,倘若省略,獲取的將是最後更改單元格所在工作表的表名,會導致公式得出錯誤結果。
IF函式判斷總表C2:C13單元格區域的值是否和相應工作表表名相等,如果相等,則返回C列值對應的行號,否則返回4^8,結果得到一個記憶體陣列。
SMALL函式對IF函式的結果進行從小到大取數,隨著公式的向下填充,依次提取第1、2、3、4……N個最小值。由此依次得到符合條件——性別和公式所在工作表的名稱一致的單元格的行號。
INDEX函式根據SMALL函式返回的索引值,得出結果。
當SMALL函式所得到的結果為4^8,即65536時,意味著符合條件的行號已經被取之殆盡了。此時INDEX函式將返回B65536單元格的值,通常來說,這麼大行號的單元格是空白單元格,使用&“”的方式,規避空白單元格返回零值的問題,使之返回假空。
取消組合工作表狀態
公式填寫完成後,單擊不屬於成組工作表的【總表】標籤,Excel會自動取消組合工作表狀態。
至此根據工作表名稱批量拆分總表資料的操作也算是完成了;當總表的資料發生改變時,分表的資料也會隨之改變,耳聽為虛,口說無憑,那咱就眼見為實唄:
暖心小貼士
利用資料透視表的【顯示報表篩選頁】功能或者VBA程式設計等,也可以達到快速拆分資料的目的。但三者之間在可操作性、可接受性、動態性、適用性上是有蠻多區別的。