1. 程式人生 > >一個公式,將資料提取到指定工作表

一個公式,將資料提取到指定工作表

今天和大家分享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程式設計等,也可以達到快速拆分資料的目的。但三者之間在可操作性、可接受性、動態性、適用性上是有蠻多區別的。