俞木發
我們經常要對Excel文檔中的數據進行查詢,舉個例子,對股民來說,經常會在Excel中收集一些股票的信息數據,一般每只股票代碼是和名稱一一對應的。對于常規正向查詢,如要通過代碼查詢股票名稱,只要在需要查詢的單元格使用VLOOKUP函數即可快速找到。但很多時候,需要通過名稱來反向查詢代碼(因為股票名稱比代碼更好記憶),比如要在H2輸入股票名稱,I2顯示出相應的代碼和內容(圖1)。這種反方向的查詢,可通過如下多種方法實現。

方法1:重組數據 逆向變正向
大家知道,VLOOKUP函數輸入查詢數據只能位于首列,本例需要輸入查詢的數據為B列。要實現使用VLOOKUP函數進行查詢,我們可以通過數據重組的方法,將需要輸入查詢的數據列變為首列即可。數據重組借助IF函數實現,在H2輸入公式“=VLOOKUP( H2,IF({1,0},B2:B10,A2:A10),2,0)”即可。
公式解釋:這里先使用IF({1,0},B2:B10,A2:A10)函數,函數的意思是使用數組{1,0}進行判斷,通過“1”返回B2:B10的數值,通過“0”返回A2:A10的數值,然后將數組重組,B2:B10變為第一列。這樣符合VLOOKUP函數的查詢條件,當我們在H2輸入股票名稱,函數就會在I2顯示出對應的代碼了(圖2)。
方法2:直接使用LOOKUP函數
由于這里是使用輸入股票名稱來查找代碼,因此可以使用“LOOKUP(1,0/(條件),查找數組或區域)”的方式進行查找。在I2單元格輸入公式“=LOOKUP(1,0/(H2=B2:B10),A2:A10)”。
公式解釋:這里條件就是“H2=B2:B10”,H2的數值是從B2:B10(即股票名稱列)獲得的一組邏輯值,再用0除以這些邏輯值,得到由0和錯誤值組成的內存數組,最后用1作為查詢值,在內存數組中進行查詢。查詢數組內容為A2:A10中的代碼,這樣當在H2輸入股票名稱的時候,在I2就會出現相應的代碼(圖3)。
同樣,對于J2,如果也要顯現原來對應的D列(即占總股本比例)數值,可以在J2輸入公式“=LOOKUP(1,0/(H2=B2:B10),D2:D10)”,依此類推。這樣即使原來股票的數據很多,只要記住股票名稱,輸入相應的名稱后即可得到相應資料(圖4)。
方法3:INDEX嵌套MATCH函數
因為這里是在H2輸入名稱,然后在I2顯示代碼,實際上是要在I2根據H2的內容引用A列的代碼數據。因此我們可以使用INDEX函數進行引用,在I2輸入公式“=INDEX( A2:A10,MATCH(H2,B2:B10,))”即可。
公式解釋:這里我們先使用MATCH找到H2在股票名稱列(B2:B10)的相對位置,然后將這個位置數據作為INDEX函數的索引值,在A列中找到對應的代碼顯示。比如在H2輸入特定名稱如“佳訊飛鴻”時,MATCH會將其定位到第7行(B7),同時以此為索引,INDEX就會找到B7對應的A7數據(即300213)(圖5)。

對于索引的引用也可以使用OFFSET函數,通過MATCH函數獲取的行號,OFFSET函數進行偏移引用。同樣在I 2輸入函數“=OFFSET(A2:A10,MATCH(H2,B2:B10,)-1,0,1,1)”即可(圖6)。
從以上過程描述可以看到,上述查詢實際上只是Excel中的一種條件查詢技巧,我們可以根據自己的實際需要進行更多的查詢。比如可以自定義一個查詢數據庫,如選擇股票名稱即實現對代碼、市值的精確查詢。選中H2,點擊“數據→數據驗證”,切換到“設置→允許→序列”,來源選擇“B2:B10”(圖7)。在I2輸入公式“=INDEX(A2:G2,MATC H(H2,B2:B10,))”,J2輸入公式“=INDEX(G2:G 10,MATCH(H2,B2:B10,))”,這樣我們在H2展開下拉列表選擇相應的股票名稱,在I2、J2即可快速顯示所需的代碼和市值數據了(圖8)。