OFFSET函數和INDEX函數在日常工作中相對來說應用較多的函數,下面將介紹兩種函數的用法。
一、認識OFFSET函數
OFFSET函數是Excel引用類函數中非常實用的函數之一,無論在數據動態引用還是在數據位置變換,甚至在函數高級應用的三維引用中,該函數的使用頻率也非常高。由於此函數的功能強大,使用靈活,在很多綜合應用示例中都能見到它的身影。
OFFSET函數的語法如下:
OFFSET(Reference,rows,cols,[height],[width])
參數reference為函數引用基點,它必須是單元格引用,而不能是常量數組。
注意:OFFSET函數的首參數reference為函數引用基點,它必須是單元格引用(可為公式生成的單一單元格區域引用),而不能是常量數組。
函數返回的結果是以制定的引用為參數,最終通過給定偏移量得到一個新的單元格引用或單元格區域引用。
在使用OFFSET函數時,如果省略參數height或參數width,則系統視為其高度或寬度與引用基點相同。如果引用基點所指定的基點是一個區域引用,當用戶指定了參數height或參數width,則函數將以引用區域的左上角單元格為基點來進行區域偏移運算。
為了便於更直觀地理解,使用下面兩個實例進行說明,如圖1所示。
例1:以下兩個公式的作用完全相同,都返回區域$D$4:$E$8:
=OFFSET(B2,2,2,5,2) (公式1)
=OFFSET(G11,-3,-2,-5,-2) (公式2)
由於公式2的行偏移、列偏移為負數,表明從基點向上、向左產生偏移,而引用行高height為-5,列寬width為-2,則表明從偏移點向上擴展5行,並向左擴展2列來取得結果,因此其返回的引用區域等價於公式1.
例2:以下3個公式的作用也完全相同,都返回區域$D$4:$E$8:
=OFFSET(B2,2,2,5,2) (公式1)
=OFFSET(B2:C6,2,2) (公式2)
=OFFSET(F10:G11,-2,-2,-5) (公式3)
在公式2中的引用基點為B2:C6單元格區域(5行2列),而函數中只制定的行、列偏移量,在這種情況下,公式將保持源區域大小不變按行列偏移量來生成新的引用區域,返回的結果等價於公式1。
另外,在公式3中引用基點為F10:G11區域(2行2列),但在行高和列寬中僅制定了height為5行,因此在忽略列寬的情況下,引用源區域將忽略行高保留列寬(變為1行2列),再按指定行高 參數向上擴展5行生成新的引用區域,返回的結果仍然等價於公式1。
提示:通常來說,OFFSET函數的行數height或列數width都使用正數,表明從引用基點向下或向右偏移來生成新的引用。這兩個參數也支持使用負數做為參數值,表明偏移方向相反,即從基點向上或向左偏移來生產引用。
二、理解INDEX函數
INDEX函數做為Excel常用的引用函數之一,主要根據用戶在一個範圍(區域引用或數組)中指定的行號和列號來返回一個值,如果源範圍時區域則返回單元格引用,如果源範圍是數組,則返回數組中的某個值。
例如下面的公式返回A1:C10區域中第5行第2列的單元格引用B5:
=INDEX(A1:C10,5,2)
1. 根據指定條件提取數據
例3:利用INDEX函數隔行提取數據
如圖2所示,左側為一張數據表,其右側表格的F3:G7區域利用INDEX函數來實現從左表中隔行提取數據。
由於原表中的品名都在奇數行,F3單元格公式如下:
=INDEX($C$3:$C$12,ROW(A1)*2-1)
G3單元格公式如下:
=INDEX($C$3:$C$12,ROW(A1)*2)
公式主要利用ROW函數來生成公差為2的自然數序列,再利用INDEX函數取出數據。另外,還可以藉助行列函數組合應用將其合併為一個公式,如:
=INDEX($C$3:$C$12,(ROW(A1)*2-1)*2+COLUMN(A1))
這個公式對於需要轉換多行多列的數據(如每隔4行取出一組數據),就顯得非常有用,在轉換區域中只需要一個公式(將公式中*2修改為*4即可),無需每列單獨編寫公式。
2. 在二維數據表中進行查找
在Excel中,MATCH函數可以用於查找數據的位置,而INDEX函數則可以根據查找到的位置返回為實際的單元格引用。因此,在實際工作中常常可以使用二者的組合來完成條件查詢計算。
例4:多條件組合查詢資料
如圖3所示,展示了某公司的產品價格表,要求根據B2單元格和B3單元格中的產品型號和規格條件,從價格表中查詢產品價格。
B4單元格的查詢公式如下:
=INDEX($E$2:$G$10,MATCH($B$2,$D$2:$D$10,0),MATCH($B$3,$E$1:$G$1,0))
在公式中則直接使用兩個MATCH函數分別針對產品型號和產品規格進行獨立查找,最終將行號和列號返回給INDEX函數來返回查詢結果。
另外,B4單元格也可以使用vlookup函數來構造公式達到同樣的目的,如:
=VLOOKUP(B2,$D$2:$G$10,MATCH(B3,$D$1:$G$1,),)