2025年6月23日 星期一

【Excel進階教學】輕鬆搞懂 OFFSET 函數,從儲存格位移到動態範圍選取

在 Excel 中,OFFSET 是一個功能非常強大但常讓初學者感到困惑的函數。它不僅僅能做到簡單的儲存格位移,更強大的地方在於能夠建立「動態範圍」,這在製作自動更新的圖表或報表時尤其有用。

先前我們在製作「自訂圖表範圍」的教學中曾使用到它,有網友對這個函數特別感興趣,因此今天我們就來深入解析 OFFSET 的用法與常見問題。

範例檔案下載: offset範例.xlsx

OFFSET 函數的基本語法

首先,我們來看看 OFFSET 函數的完整結構:

=OFFSET(reference, rows, cols, [height], [width])

  • reference:起始儲存格,也就是計算位移的基準點。

  • rows:垂直位移的列數。正數代表向下移動,負數代表向上。

  • cols:水平位移的欄數。正數代表向右移動,負數代表向左。

  • [height]:(選用)回傳範圍的高度(列數)。

  • [width]:(選用)回傳範圍的寬度(欄數)。

核心觀念:

  1. 當只使用前三個參數 (referencerowscols) 時,OFFSET 主要功能是移動到指定的儲存格並回傳其值。

  2. 當加入了後兩個選用參數 (heightwidth) 時,OFFSET 的功能就昇華為回傳一個指定大小的範圍


應用一:移動儲存格

這是 OFFSET 最基本的用法。假設我們想從 B2 儲存格開始,向下移動 1 列,水平不移動(0 欄),公式如下:

=OFFSET(B2, 1, 0)

這個公式會從 B2 開始,向下移動 1 列到達 B3,並回傳 B3 的值 2

應用二:回傳動態範圍與 #VALUE! 錯誤解析

OFFSET 的精髓在於建立動態範圍。當我們指定了 height 或 width 參數,它回傳的就不再是單一值,而是一個儲存格範圍(陣列)。

為什麼會出現 #VALUE! 錯誤?

在範例檔案的 F2 儲存格中,我們輸入了:
=OFFSET(B2,,,4)

這個公式的意思是:

  • 從 B2 開始。

  • 垂直移動 0 列,水平移動 0 欄(因為 rows 和 cols 參數被省略,預設為 0)。

  • 回傳一個高度為 4 列、寬度為 1 欄(預設)的範圍。

這個範圍實際上是 B2:B5,其內容是 {1; 2; 3; 4} 這樣一個陣列。然而,單一儲存格無法顯示一個多值的陣列,因此 Excel 就會顯示 #VALUE! 錯誤。

實用技巧:F9 偵錯
當你不確定公式某個部分的回傳結果時,可以在編輯模式下將該部分反白,然後按下 F9 鍵。Excel 會立即計算並顯示該部分的結果。看完後記得按 Esc 鍵取消,否則結果會被寫死在公式裡。

如何正確處理 OFFSET 回傳的範圍?

有兩種主要方式可以處理 OFFSET 回傳的範圍陣列:

1. 使用陣列公式(較少用)

如果你確實想在儲存格中顯示陣列,可以選取對應大小的範圍(例如 F2:F5),輸入公式後按下 Ctrl+Shift+Enter。這樣公式前後會自動加上大括號 {},並將陣列結果依序填入選取的儲存格中。

2. 搭配其他函數使用(最常用)

這是最實用也最常見的方法。將 OFFSET 函數放在另一個可以處理「範圍」的函數中,例如 SUMAVERAGECOUNT 等。

例如,在 H2 儲存格中,我們想加總 B2:B5 這個動態範圍:

=SUM(OFFSET(B2,,,4))

這樣一來,OFFSET 會將 B2:B5 這個範圍傳遞給 SUM 函數,SUM 接收到範圍後進行加總,得到正確結果 28,完全避免了 #VALUE! 錯誤,也不需要使用 Ctrl+Shift+Enter

再看一個例子,在 G4 儲存格中:

=SUM(OFFSET(B2,0,0,2,3))

  • OFFSET(B2,0,0,2,3) 會回傳一個從 B2 開始、高 2 列、寬 3 欄的範圍,也就是 B2:D3

  • SUM 函數會將 B2:D3 範圍內的所有數字(1, 5, 9, 2, 6, 10)相加,得到 33

重點整理

  1. OFFSET 可用於移動儲存格定義範圍。差別在於是否使用 [height] 和 [width] 參數。

  2. 當 OFFSET 用於定義範圍時,它回傳的是一個陣列。若直接將其放入單一儲存格,會因無法顯示多個值而出現 #VALUE! 錯誤。

  3. 要解決 #VALUE! 問題,最常見的方法是將 OFFSET 巢狀包裝在其他如 SUMCOUNTAVERAGE 等能處理範圍的函數內。

  4. 善用 F9 鍵可以幫助你理解公式中 OFFSET 實際回傳的範圍或陣列內容,是偵錯的絕佳工具。

掌握了 OFFSET,你就能在 Excel 中建立更具彈性與自動化的報表了!



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

如何使用notepad++的正規表示法取代舊版的php語法

因為 PHP 8.2 起已 正式棄用未加引號的字串索引 ,所以之前不好的寫法會造成在新版出現錯誤,想說要改版就把之前不好的寫法都改掉,以免之後的版本不支援又要再改一次。 記得要點選【規則運算式】才會有作用 1.將未加引號的字串索引補上 像 $UserName=$_GET[name...