首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Excel INDIRECT 函數實現動態引用:按行獲取指定列單元格值

     編輯:程式設計綜合問答

Excel 中 INDIRECT 函數能將「字符串」轉換為真實的「單元格引用」,配合 ROW() / COLUMN() 可實現動態跨行跨列引用,是動態報表、矩陣運算的利器。

基礎語法

=INDIRECT(ref_text, [a1])
// ref_text: 單元格地址字符串,如 "B2"
// a1: TRUE(默認) A1 引用風格;FALSE R1C1 風格

經典場景:當前行 B 列 + C 列求和

在任意行輸入公式,自動計算該行 B、C 列之和:

=INDIRECT("B" & ROW()) + INDIRECT("C" & ROW())

原理:ROW() 返回當前行號(如 5),拼接成 "B5"、"C5",INDIRECT 轉為真實引用取值。

進階用法大全

1. 跨 Sheet 動態引用

=INDIRECT("'" & A1 & "'!B2")
// A1 儲存 Sheet 名稱(如 "1月"),動態引用該 Sheet 的 B2

2. 固定列、動態行(最常用)

=INDIRECT("D" & ROW())          // 當前行 D 列
=INDIRECT("E" & (ROW()-1))       // 上一行 E 列
=INDIRECT("F" & (ROW()+2))       // 下兩行 F 列

3. 動態列、固定行

=INDIRECT(CHAR(64+COLUMN()) & "10") // 當前列第 10 行 (A=65)

4. 批量生成引用地址(配合填充柄)

A1: =INDIRECT("B" & ROW())  // 下拉填充 → A2=B2, A3=B3...

5. 避免插入/刪除行導致引用錯亂

普通引用 =B5 插入行會變 =B6,但 INDIRECT("B"&ROW()) 永遠指向當前行 B 列,極其穩定。

注意事項與性能

  • 易失性函數:工作表任何變化都會重新計算,大量使用(>1萬個)會明顯拖慢表格
  • 外部工作簿引用:源文件必須打開,否則返回 #REF!
  • 替代方案:INDEX/OFFSET 非易失性,大數據場景優先考慮
  • INDIRECT("R[1]C", FALSE) R1C1 風格相對引用,不依賴列字母

實戰模板:動態月度彙總表

// 當前 Sheet 名為 "2024-01"
=INDIRECT("'" & TEXT(TODAY(),"yyyy-mm") & "'!B" & ROW())
// 自動引用當月 Sheet 同行 B 列數據

善用 INDIRECT,告別手動修改公式的繁瑣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved