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

一個公式,將數據提取到指定工作表

得出 eight 工作組 學習 相等 圖片 查詢 在那 銷售部

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

一個公式,將數據提取到指定工作表