Excel INDIRECT 函数引用以文本形式存储的“数字”命名单元格

Excel INDIRECT 函数引用以文本形式存储的“数字”命名单元格

我正在尝试使用 Excel INDIRECT 函数在数组中查找数据。

最上面一行是一组按字母顺序排列的名字

最左边一列是数字列表(排名)。这些“数字”已存储为文本,并使用 Excel 命名功能对其进行命名。

当使用 INDIRECT 函数作为交集时:

{  =INDIRECT(Reference)_INDIRECT(Reference)  }

发生错误---单元格引用不正确。

如果我将最左边的列更改为按字母顺序排列的名称(First、second...等),则没有问题。但对于数百或数千行数据,这并不实用。

答案1

嗯……这里最重要的问题是您不能用数字来命名命名区域。无论引用的单元格中的内容是什么,格式化为文本的数字,还是其他什么,Excel 都不会接受名为 1 的命名区域。所以您写的内容中存在误解。

接下来是列名。仅给它们添加字母或字母数字标签不会提供INDIRECT()任何可用的东西。像命名范围那样命名它们,但不要简单地将它们填充为标题。

按照您描述的方法(不使用函数INDIRECT())是将列也设置为命名区域。不过,当我这么说时,我并不是说单元格 A2 被命名为 Bravo,我指的是它下面的数据被命名为 Bravo,因此如果您有五行数据,则它的值将是“=Sheet1!$B$2:$B$6”,而命名区域 A(第一行数据,第 2 行)将具有类似的值:“=Sheet1!$B$2:$F$2”。那么公式将很简单:

=A Bravo

并且它甚至不需要隐式交集。

除了说像“1”和“33”这样的命名范围存在,并且想要使用之外INDIRECT(),这似乎就是您正在寻找的。

我认为这项工作最初的结构是使用隐式交集,并且不可能按照您想要的方式进行改进,但INDIRECT()仍然无法按照描述做出贡献。

例如,假设那些名为“1”或“33”的命名范围确实存在,并且引用了值所在的单元格。如果INDIRECT()要读取其中一个,它将查看所​​引用的单元格,获取其内容,并尝试从中生成单元格地址。因此,它将尝试使“33”引用单元格,但会失败。因此会出现错误。相反,如果命名范围“33”实际上引用了单元格范围(其右侧的数据)(例如:“=Sheet1!$B$34:$F$34”),则INDIRECT()可以读取其内容并找到该范围,它当然可以将其转换为单元格引用并将其传递下去,从而产生与上述相同的结果,但方式更为复杂且不必要。但名称不能引用单元格本身,而只能引用前面提到的数据范围。

如果引用的是数据,而不是隐含的数据本身,那么将名称“更改”为“First”等写出的值会有所帮助,因为它们是 Excel 可以使用的真实名称。但它们不可能是“1”或“33”,因此无法将它们从...

要执行您希望的操作,请为列和行创建命名范围,使用合法名称以便可以实际执行,然后使用上面给出的公式。

至于创建这些行名的不切实际,不要使用“First”等。只需使用单元格内容(存在的数字)并在其前面添加“a”,因此“a1”和“a2”等等(Excel 不允许以数字、句点开头,因此要添加)。您可以编写一个宏来完成实际工作,因为它可以使用单元格内容来命名,然后更改其右侧数据指定的范围,然后向下移动。循环它,或者只是复制并粘贴它,只要您认为需要处理所有行即可。如果可以的话,请更复杂一些。但即使它处理了所有标记的行,然后出现故障,谁在乎呢?它在失败之前处理了所有现有的数据行,是吗?

列也一样。然后,快乐时光!

答案2

Roy:谢谢……你的回答足以让我找到问题和解决方案。是的,Excel 不喜欢使用数字作为“名称”。如果您尝试命名一个由数字填充的单元格(即使该数字存储为文本),它也不会给出错误消息。

但 Excel 还是会继续为单元格创建名称。创建名称时,它会在数值前加上下划线 (_)。因此,单元格值 1000 变为名称 _1000。

使用 INDIRECT 函数的问题在于,存储在单元格中的值和单元格的名称不同。

如果您随后使用下拉列表填充单元格,并使用具有诸如 1000、2000、3000... 之类的值的单元格范围,则单元格中的下拉值将为 1000,而您尝试使用 INDIRECT(1000) 函数查找的行或列的 NAME 不存在。INDIRECT 函数查找 {1000},但只看到 {_1000、_2000、_3000 等}。

并且,这种缺乏一致性会生成 #REF 错误消息。

因此,这个故事的“寓意是”,如果您想使用数值指向行或列(例如,通过下拉列表),则必须在源数组中的每个数字前加上下划线 (_) --- 当 Excel 被告知为这些数字创建名称时,这些名称将与存储在该单元格中的值相同(并显示在下拉列表中)。希望这有意义。感谢您的帮助!

相关内容