我正在尝试创建一个公式,仅包含某个字段下方的 12 行。
我遇到的主要问题是,第一行有一个公式,它会计算字段 A2:A13 上的内容。我不断在 A2 添加新行,这是必需的。我想保留旧数据进行存档,但希望公式只考虑 A2:A13,无论我在顶部插入多少行。
为了更清楚起见,公式如下: =IF(COUNT(I11:I$26)=0,"N/A",INDEX(I11:I$26,MIN(IF(SUBTOTAL(3,OFFSET(I11,ROW(I11:I$26)-ROW(I11),0)),ROW(I11:I$26)-ROW(I11)+1))))
基本上,我想弄清楚如何做 A2:(A2+12)。
任何帮助,将不胜感激!
答案1
使用 INDIRECT 函数 在公式中引用这些单元格。此函数从给定的文本字符串返回有效的单元格引用。
您可以参考A2:(A2+11)
和
INDIRECT("$A$2")
。INDIRECT("$A$13")
答案2
获取范围 A2:A13 且仍不受插入单元格损害的另一种方法是:
=OFFSET(A1,1,0):OFFSET(A1,12,0)
请记住,它的直接结果是一个动态数组,它会从 A1 溢出到 A12,因此单独使用它会导致错误#SPILL!
。但是你想对数据进行操作,如果你这样做,一切都会好起来。一个例子是用 包装它SUM()
。基本上,你对其数据进行的任何导致错误的操作都会使用不同的方法导致相同的错误,因此公平竞争。
OFFSET()
和都INDIRECT()
可以相当轻松地构建范围。一个人可能更喜欢OFFSET()
使用公式构建每个部分,并且每个部分都是独立的(因此计算要使用的行偏移不会直接干扰计算要使用的列偏移),而使用INDIRECT()
为整个表达式构建单个字符串,并且元素在用于构建它时可能会令人困惑。对于许多人来说,字符串构建是一件可怕的事情,而简单地计算一个值似乎很容易。反之亦然,因为许多人即使构建的字符串很复杂,也可以毫无问题地跟踪它们。
您的使用非常直接和简单,没有明显想要使您的范围动态化的愿望,因此任何一个都非常容易使用。
执行此类操作的其他明显方法,例如,INDEX()
存在XLOOKUP()
一个问题,即当您插入新单元格以将数据下推时,它们的范围会进行调整。¡No bueno!您会使用某些东西来避免使用,INDIRECT()
并且必须在该东西中使用它以将其保持在原位……谈论兔子洞!