因为我不想添加冗长乏味的描述,所以我可能会做相反的事情,所以我在这个问题中添加了更多细节:
我想要做的是将当前分布在 4 张表中、没有明确结构、位于一个大而慢的 Excel 文件中的一些输入收集到 1 个表中,以便我们可以简化文件、使其更快,并且将来可能与数据库兼容。
现在,输入由命名范围标识,并且大多数输入的公式都包含对由命名范围定义的其他输入的引用。我希望如果仅将命名范围引用移动到 Excel 自动表中就可以了,但是我发现对表进行排序会导致命名范围丢失其引用(它们不会与表一起排序),所以我正在寻找一种无需实际使用查找公式(类似于通过名称识别列的方式)即可识别表中的行的方法,如果可能的话。有两个原因我不使用查找公式:查找公式会减慢文件速度,并且某些公式最终会查看公式所在的同一列,从而导致循环引用。
有没有什么方法可以向 Excel 表(较大的表)添加行标题或索引,以便我可以使用像行 + 列名称引用这样的国际象棋,并且即使您对表进行排序它仍然有效?
我尝试过的:
- 有一行包含键,并使用 Index/Match 或 vlookup => 表太大,使用这样的查找功能会降低速度。而且值在同一列上,所以我会得到循环引用。
- 我尝试使用命名范围 => 如果对表进行排序,则命名范围将保持在原位,它们独立于表,并且引用不再有效。
答案1
除非您提供的信息不足而隐藏着意想不到的事情,否则NO
,除非您使用 VBA,否则无法使用查找功能来做到这一点。
您所写的内容唯一有意义的方式是,您将在表格中添加一行基于字母的列标题和一列基于数字的行标题。由于您大概不会像世界上其他人一样按列排序,因此重要的是行标题。如果按行排序,您将包括该列,以便开始行的相同数字将始终开始行。请注意,必须如此,如果您希望它们始终保持原位,它们将与行号无异,保持原位并因此与排序前的数据断开连接,那么既然行号始终存在,为什么还要有它们呢?
但是,一旦对它们进行排序,它们就会变得杂乱无章。那么,Excel 如何在不使用某种查找的情况下知道它们在哪里呢?即使是 VBA 也会使用某种查找,其主要优势在于 VBA 处理事情的速度,尽管这并不总是优于函数。
至于某种查找,我将其归结为索引和匹配。有 27 列(我不想解决字母表以外的问题,因为要继续的内容很少),240,000 行,结果是即时的,它包括 18 个函数和另外 5-10 个操作。如果写得不好,需要检查 6,480,000 个单元格,而且它是即时的。这就是试图避免任何更接近查找的结果,而不是使用INDEX
创建地址来查找值。鉴于查找必须以某种方式使用,我相信它可以更简洁,因此更快(比即时……嗯……那里没有太多实际目标)。
因此,您要超越的标准是:
- 不,表格对于使用查找来说不是太大。(无论如何都是如此。)因此,在添加标题框架后,您可以使用标准字符串操作将国际象棋符号分解为两个有用的信息,然后使用该信息进行查找。
或者,
- 提供一些有意义的细节,以便人们可以看到表格确实太大而无法使用任何类型的查找。
最后说明:之所以能即时完成,是因为它没有逐个单元格地搜索现实世界中的杂乱数据以寻找匹配项。它被赋予了信息,使其可以MATCH
在一列简单的数字数据和 26 个字母的列标题上使用。因此,它很快就变成了一个INDEX
让 Excel 读取单个单元格地址的过程。不必使用查找来检查所有 6,500,000 个单元格,因此不必很慢。此外,查找的单元格包含“数组常量”或人类所熟知的简单数字和字母,因此没有找到可能需要计算的公式。Excel 可以快速(基本上是即时)看到在评估元素以返回结果之前不需要进行计算。即使结果是一个带有讨厌公式的单元格,隐藏在 6,359,972 个其他带有公式的单元格中。它在查找之前不进行任何计算,只进行检查并返回当前值,因此在找到所需的单元格后甚至不需要运行计算。