使用公式动态修改命名范围

时间:2015-08-09 21:31:26

标签: excel excel-formula named-ranges

我在工作簿中使用了一堆命名范围。以下是它们如何变化的历史,以便在它们要求我修改它时使其更具动态性。

我想要做的是在A列中搜索1到100的A列中的标签(我编码到命名的范围公式中)并找到它,命名范围将知道该行。我知道如果我们更改行的名称,我仍然需要更新命名范围,但我只需更新一个命名范围而不是75-100命名范围,就像我现在每次进行更改时一样。

以下是我正在使用的当前命名范围:

=INDIRECT("Input!$C$23:"LastColumn&"$23")

LastColumn是一个命名范围,包含最后一列的字母。

以下是我这样做的原因:

当我第一次创建它时,我直接在公式中引用了单元格(没有命名范围),并且每当我添加另一行,列等时都必须更改所有公式。然后我将其切换为命名参考。这样就解决了这个问题,每当我们添加一行时,我根本不需要更改引用。但是,每当我们更改列数时,我仍然需要更改所有引用。我所做的是使列变量,所以如果我们改变列的数量,我不必对命名范围进行任何更改。不幸的是,这会产生意想不到的后果,每当我添加,删除或移动一行时,我都需要更新所有引用。现在,我有一个想法,将使行和列变量。因此,我可以进行任何更改,而无需更新任何引用。

我需要这样做,因为大多数时候列都是空的,我不知道他们什么时候会有数据。

1 个答案:

答案 0 :(得分:0)

放弃易变INDIRECT function并使用INDEX function终止范围,MATCH找到最后一列。该行可以通过A列上的MATCH确定到"标签"。

据我所知,你想找到"标签"在A列中,其位置定义=INDIRECT("Input!$C$23:"LastColumn&"$23")中的行,其中23当前定义该行。

放弃INDIRECT,Input!$C$23引用可以更改为:

=INDEX(Input!$C:$C, MATCH("Label", Input!$A:$A, 0))

所以剩下的就是找到最后一列。该工作表上必须有某些,可以用来定位最后一列而不管列删除或添加,但我只会使用包含"标签"的行中的最后一个值。在A栏中。

'this finds the last text value in row 23
=MATCH("zzz", Input!23:23)
'this finds the last number or date value in row 23
=MATCH(1e99, Input!23:23)
'since I do not know whether *the row* (e.g. 23:23) contains text, numbers, dates 
'or a combination of any of those, I will have to double up the formula and add error control
=MAX(IFERROR(MATCH("zzz", Input!23:23), 0), IFERROR(MATCH(1e99, Input!23:23), 0))

您可以使用冒号拼接两个INDEX函数,就像键入C23:Z23一样。

=INDEX(Input!$C:$C, MATCH("Label", Input!$A:$A, 0)):INDEX(Input!$A:$ZZ,MATCH("Label",Input!$A:$A,0),MAX(IFERROR(MATCH(1E+99, INDEX(Input!$A:$ZZ,MATCH("Label",Input!$A:$A,0),0)),0),IFERROR(MATCH("zzz",INDEX(Input!$A:$ZZ,MATCH("Label",Input!$A:$A,0),0)),0)))

是的,它看起来很复杂但很多都是因为不知道有问题的行是否包含文本或数字而且它的工作量少于易失性的INDIRECT(在整个工作簿中的任何内容发生变化时重新计算),同时保持向上 - 尽管行和列删除/插入仍然是最新的。

顺便说一下,当在INDIRECT中使用text-as-cell-references时,不需要使用$ absolute参考指示符。地址作为文本是文本字符串;无论你做什么都不会改变它,它不会改变。上面的方法 需要绝对的单元格引用,因为它使用的是实际的单元格和单元格范围引用。