俞木發(fā)
我們經(jīng)常要對Excel文檔中的數(shù)據(jù)進行查詢,舉個例子,對股民來說,經(jīng)常會在Excel中收集一些股票的信息數(shù)據(jù),一般每只股票代碼是和名稱一一對應的。對于常規(guī)正向查詢,如要通過代碼查詢股票名稱,只要在需要查詢的單元格使用VLOOKUP函數(shù)即可快速找到。但很多時候,需要通過名稱來反向查詢代碼(因為股票名稱比代碼更好記憶),比如要在H2輸入股票名稱,I2顯示出相應的代碼和內(nèi)容(圖1)。這種反方向的查詢,可通過如下多種方法實現(xiàn)。
方法1:重組數(shù)據(jù) 逆向變正向
大家知道,VLOOKUP函數(shù)輸入查詢數(shù)據(jù)只能位于首列,本例需要輸入查詢的數(shù)據(jù)為B列。要實現(xiàn)使用VLOOKUP函數(shù)進行查詢,我們可以通過數(shù)據(jù)重組的方法,將需要輸入查詢的數(shù)據(jù)列變?yōu)槭琢屑纯?。?shù)據(jù)重組借助IF函數(shù)實現(xiàn),在H2輸入公式“=VLOOKUP( H2,IF({1,0},B2:B10,A2:A10),2,0)”即可。
公式解釋:這里先使用IF({1,0},B2:B10,A2:A10)函數(shù),函數(shù)的意思是使用數(shù)組{1,0}進行判斷,通過“1”返回B2:B10的數(shù)值,通過“0”返回A2:A10的數(shù)值,然后將數(shù)組重組,B2:B10變?yōu)榈谝涣?。這樣符合VLOOKUP函數(shù)的查詢條件,當我們在H2輸入股票名稱,函數(shù)就會在I2顯示出對應的代碼了(圖2)。
方法2:直接使用LOOKUP函數(shù)
由于這里是使用輸入股票名稱來查找代碼,因此可以使用“LOOKUP(1,0/(條件),查找數(shù)組或區(qū)域)”的方式進行查找。在I2單元格輸入公式“=LOOKUP(1,0/(H2=B2:B10),A2:A10)”。
公式解釋:這里條件就是“H2=B2:B10”,H2的數(shù)值是從B2:B10(即股票名稱列)獲得的一組邏輯值,再用0除以這些邏輯值,得到由0和錯誤值組成的內(nèi)存數(shù)組,最后用1作為查詢值,在內(nèi)存數(shù)組中進行查詢。查詢數(shù)組內(nèi)容為A2:A10中的代碼,這樣當在H2輸入股票名稱的時候,在I2就會出現(xiàn)相應的代碼(圖3)。
同樣,對于J2,如果也要顯現(xiàn)原來對應的D列(即占總股本比例)數(shù)值,可以在J2輸入公式“=LOOKUP(1,0/(H2=B2:B10),D2:D10)”,依此類推。這樣即使原來股票的數(shù)據(jù)很多,只要記住股票名稱,輸入相應的名稱后即可得到相應資料(圖4)。
方法3:INDEX嵌套MATCH函數(shù)
因為這里是在H2輸入名稱,然后在I2顯示代碼,實際上是要在I2根據(jù)H2的內(nèi)容引用A列的代碼數(shù)據(jù)。因此我們可以使用INDEX函數(shù)進行引用,在I2輸入公式“=INDEX( A2:A10,MATCH(H2,B2:B10,))”即可。
公式解釋:這里我們先使用MATCH找到H2在股票名稱列(B2:B10)的相對位置,然后將這個位置數(shù)據(jù)作為INDEX函數(shù)的索引值,在A列中找到對應的代碼顯示。比如在H2輸入特定名稱如“佳訊飛鴻”時,MATCH會將其定位到第7行(B7),同時以此為索引,INDEX就會找到B7對應的A7數(shù)據(jù)(即300213)(圖5)。
對于索引的引用也可以使用OFFSET函數(shù),通過MATCH函數(shù)獲取的行號,OFFSET函數(shù)進行偏移引用。同樣在I 2輸入函數(shù)“=OFFSET(A2:A10,MATCH(H2,B2:B10,)-1,0,1,1)”即可(圖6)。
從以上過程描述可以看到,上述查詢實際上只是Excel中的一種條件查詢技巧,我們可以根據(jù)自己的實際需要進行更多的查詢。比如可以自定義一個查詢數(shù)據(jù)庫,如選擇股票名稱即實現(xiàn)對代碼、市值的精確查詢。選中H2,點擊“數(shù)據(jù)→數(shù)據(jù)驗證”,切換到“設置→允許→序列”,來源選擇“B2:B10”(圖7)。在I2輸入公式“=INDEX(A2:G2,MATC H(H2,B2:B10,))”,J2輸入公式“=INDEX(G2:G 10,MATCH(H2,B2:B10,))”,這樣我們在H2展開下拉列表選擇相應的股票名稱,在I2、J2即可快速顯示所需的代碼和市值數(shù)據(jù)了(圖8)。