You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel/Google Sheets无VB获取稀疏网格宽深及右下角单元格方法

我来帮你梳理一下在Office 365 Excel和Google Sheets里,不用VB纯函数实现获取目标网格宽度、深度和右下角单元格的方法,完全适配你提到的稀疏数组场景:

Office 365 Excel 实现方案

首先说明:如果你的左上角单元格(TLC)是直接引用(比如B4),可以用非易失性公式;如果TLC是文本形式存储(比如A1单元格存"B4"),则需要用到INDIRECT(易失性函数),我会分别给出两种场景的写法。

获取宽度(BREADTH)

宽度定义为从TLC到最宽行最右侧非空单元格的列数,核心思路是遍历所有行,找到每行最右侧非空单元格的列号,取最大值后和TLC的列号计算差值再加1。

  • 直接引用TLC(如B4,非易失性,推荐):
    =MAX(BYROW(B4:XFD1048576, LAMBDA(row, MAX(IF(row<>"", COLUMN(row), 0))))) - COLUMN(B4) + 1
    
  • TLC为文本(如A1存"B4",易失性):
    =MAX(BYROW(INDIRECT(A1)&":XFD1048576", LAMBDA(row, MAX(IF(row<>"", COLUMN(row), 0))))) - COLUMN(INDIRECT(A1)) + 1
    

获取深度(DEPTH)

深度定义为从TLC到最深列最下方非空单元格的行数,核心思路是遍历所有列,找到每列最下方非空单元格的行号,取最大值后和TLC的行号计算差值再加1。

  • 直接引用TLC(如B4,非易失性,推荐):
    =MAX(BYCOL(B4:XFD1048576, LAMBDA(col, MAX(IF(col<>"", ROW(col), 0))))) - ROW(B4) + 1
    
  • TLC为文本(如A1存"B4",易失性):
    =MAX(BYCOL(INDIRECT(A1)&":XFD1048576", LAMBDA(col, MAX(IF(col<>"", ROW(col), 0))))) - ROW(INDIRECT(A1)) + 1
    

获取右下角单元格(BRC)

结合上面的最大行号和最大列号,用ADDRESS函数生成单元格引用:

  • 直接引用TLC(如B4):
    =ADDRESS(MAX(BYCOL(B4:XFD1048576, LAMBDA(col, MAX(IF(col<>"", ROW(col), 0))))), MAX(BYROW(B4:XFD1048576, LAMBDA(row, MAX(IF(row<>"", COLUMN(row), 0))))))
    
  • TLC为文本(如A1存"B4"):
    =ADDRESS(MAX(BYCOL(INDIRECT(A1)&":XFD1048576", LAMBDA(col, MAX(IF(col<>"", ROW(col), 0))))), MAX(BYROW(INDIRECT(A1)&":XFD1048576", LAMBDA(row, MAX(IF(row<>"", COLUMN(row), 0))))))
    
Google Sheets 实现方案

Google Sheets没有BYROW/BYCOL函数,但可以用ARRAYFORMULA结合MAX来实现,同样分直接引用和文本存储TLC的场景:

获取宽度(BREADTH)

  • 直接引用TLC(如B4):
    =MAX(ARRAYFORMULA(IF(B4:XFD1048576<>"", COLUMN(B4:XFD1048576), 0))) - COLUMN(B4) + 1
    
  • TLC为文本(如A1存"B4"):
    =MAX(ARRAYFORMULA(IF(INDIRECT(A1):XFD1048576<>"", COLUMN(INDIRECT(A1):XFD1048576), 0))) - COLUMN(INDIRECT(A1)) + 1
    

获取深度(DEPTH)

  • 直接引用TLC(如B4):
    =MAX(ARRAYFORMULA(IF(B4:XFD1048576<>"", ROW(B4:XFD1048576), 0))) - ROW(B4) + 1
    
  • TLC为文本(如A1存"B4"):
    =MAX(ARRAYFORMULA(IF(INDIRECT(A1):XFD1048576<>"", ROW(INDIRECT(A1):XFD1048576), 0))) - ROW(INDIRECT(A1)) + 1
    

获取右下角单元格(BRC)

  • 直接引用TLC(如B4):
    =ADDRESS(MAX(ARRAYFORMULA(IF(B4:XFD1048576<>"", ROW(B4:XFD1048576), 0))), MAX(ARRAYFORMULA(IF(B4:XFD1048576<>"", COLUMN(B4:XFD1048576), 0))))
    
  • TLC为文本(如A1存"B4"):
    =ADDRESS(MAX(ARRAYFORMULA(IF(INDIRECT(A1):XFD1048576<>"", ROW(INDIRECT(A1):XFD1048576), 0))), MAX(ARRAYFORMULA(IF(INDIRECT(A1):XFD1048576<>"", COLUMN(INDIRECT(A1):XFD1048576), 0))))
    

额外说明

  • 易失性提示:Excel中的INDIRECT是易失性函数,会在工作表任何变动时重新计算,所以优先使用直接引用TLC的非易失性公式;Google Sheets中的INDIRECT同样有类似特性。
  • 稀疏数组适配:所有公式都会忽略空白单元格,只统计非空单元格的最大行/列,不管网格是稀疏还是密集都能正确计算。
  • 示例验证:以你提到的TLC为"B4"为例,公式会计算出最大列是H(第8列),8-2+1=7(宽度);最大行是11,11-4+1=8(深度);ADDRESS(11,8)返回"H11",完全符合你的示例预期。

内容的提问来源于stack exchange,提问作者tkp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:59