如何用Excel/Google Sheets公式获取最后一列列标并应用于SUM函数?
我太懂这种每次加新列就要手动改公式的烦躁了!刚好之前做报表时也解决过这个问题,下面分别给你说Excel和Google Sheets的具体实现方法,两种工具的思路类似但细节有差异:
Excel 动态引用最后一列
方法1:直接用INDEX构建动态区域(推荐,非易失性)
如果只是要在SUM里引用从J4到最后一列的同一行单元格,不用特意转成列标,直接用INDEX定位最后一列的单元格就行,公式写起来更简洁还不会卡顿:
=SUM(J4:INDEX(4:4,1,MAX(COLUMN(1:1)*(1:1<>""))))
解释下各部分:
MAX(COLUMN(1:1)*(1:1<>"")):找到第一行最后一个非空单元格的列号(就算表头有空单元格也能精准定位)INDEX(4:4,1,列号):定位到第4行对应列号的单元格- 把J4和这个INDEX结果连起来,就是你要的动态区域
方法2:先获取列标再用INDIRECT拼接(适合必须用列标的场景)
如果确实需要单独拿到最后一列的列标(比如要用到其他地方),可以用这个公式提取列标:
=SUBSTITUTE(ADDRESS(1,MAX(COLUMN(1:1)*(1:1<>""))),4),"1","")
然后要用到SUM里的话,用INDIRECT把字符串转成单元格引用:
=SUM(INDIRECT("J4:"&SUBSTITUTE(ADDRESS(1,MAX(COLUMN(1:1)*(1:1<>""))),4),"1","")&"4")
⚠️ 注意:INDIRECT是易失性函数,表格数据多的话可能会变慢,优先用方法1。
Google Sheets 动态引用最后一列
Google Sheets的逻辑和Excel差不多,函数写法稍有不同:
方法1:INDEX构建动态区域(推荐)
同样不用转列标,直接写SUM公式:
=SUM(J4:INDEX(4:4,MAX(COLUMN(1:1)*(1:1<>""))))
方法2:提取列标再拼接
提取列标的公式可以更简洁,用正则提取字母部分:
=REGEXEXTRACT(ADDRESS(1,MAX(COLUMN(1:1)*(1:1<>""))),4),"[A-Z]+")
然后用INDIRECT整合到SUM里:
=SUM(INDIRECT("J4:"®EXEXTRACT(ADDRESS(1,MAX(COLUMN(1:1)*(1:1<>""))),4),"[A-Z]+")&"4")
通用注意事项
- 如果你表格的表头不在第一行,把公式里的
1:1改成表头所在的行号(比如表头在第2行就改成2:2) - 如果是要引用整列(比如从J列到最后一列的所有行),把行号改成整列引用,比如Excel里
=SUM(J:INDEX(A:XFD,MAX(COLUMN(1:1)*(1:1<>""))))(XFD是Excel最大列)
内容的提问来源于stack exchange,提问作者QuickFast




