Excel(2016)。假设我有一些 Excel分析表分析其他数据表中的数据。并假设以下内容:
实际上有好几份这样的数据表。例如,它们可能被命名为梅达,君达,七月数据, 等等。
所有数据表的格式都相同,只是数据不同。例如,它们可能是不同月份的同一份财务报告
分析表每次只查看一份数据表。在任何给定的“使用点”,它都会分析其中之一梅达, 或者君达, 或者七月数据。 ETC。
数据表可能与分析表,或者它们可能位于单个不同的其他工作簿中,或者它们可能分布在多个其他工作簿中,或者这些情况的组合
我需要今天运行分析,并且不会让我想向我的电脑扔石头(请参阅下面我描述我目前如何做到这一点)
问题:在纯 Excel 中(即没有 VB,也没有第三方插件),如何尽量减少允许用户工作表分析更改从哪个数据表获取的数据?
我现在是如何做的
我使用 INDIRECT() 动态构造对所需数据表的引用。例如,在分析表我可能有以下情况:
B1 = “MayData”(即包含数据的工作表的名称)
B2 = “MayReport.xlsx”(即包含数据表的工作簿的名称;如果数据表与分析表)
B3 = “C23”(例如,数据表中某些感兴趣的单元格的名称)
然后我会在 B4 中得到类似这样的内容:
B4 = CONCATENATE("'", IF(ISBLANK(B2),"",CONCATENATE("[",B2,"]")),B1,"'!",B3)
在此示例中,最后生成的字符串是:'[MayReport.xlsx]MayData'!C23
然后我可以在 INDIRECT() 中使用它进行适当的分析。因此,要查看该特定单元格,我可以这样做;
B5=INDIRECT(B4) (见注释**)
它不受数据表或其工作簿名称变化的影响(或者甚至不受感兴趣的单元格名称变化的影响,尽管在这个例子中我已经说过数据表的格式都是相同的)。
要更改要查看的数据,我只需更改单元格 B1 和 B2。如果我很细心,我可以将其简化为仅更改月份名称(在此示例中),然后据此构建 B1 和 B2 中的内容。
问题是 INDIRECT() 不稳定!因此,当数据集很大,并且可能有很多类似的事情发生时,性能就会受到重创。最糟糕的情况是,我发现自己不得不等待几分钟才能看到对单个单元格的更改分析表,而 Excel 会检查每一个 INDIRECT() 并重新运行它。在工作表右下角的状态区域中,我可以看到所有节点的 CPU 使用率都在疯狂增长。
我将非常感激任何想法。
** 当然,我通常不会只选择单个单元格。相反,我会将目标数据表中的一个或多个完整表格拖放到与分析表。从那里开始,其他一切都可以使用对该本地版本数据的引用。
答案1
问题:在纯 Excel(即没有 VB 也没有第三方插件)中,如何最大限度地减少允许 SheetAnalyze 用户更改从哪个数据表获取数据所需的工作量?
这是观点问题。你想减少你的工作或者你想减少用户工作?
减少你的工作很简单,只需将您拥有的任何东西留在原处。不要编辑它,不要触摸它。这样做不需要任何工作,而且您不能没有工作,所以这是最佳解决方案。
减少用户工作量,除了编辑单元格之外很难简化,但您可以通过使用下拉列表来改进它并创建更简单的用户体验。
当你需要 时INDIRECT
,你需要INDIRECT
但很多时候其他选项也是可能的。例如,命名范围可以与链接工作簿一起使用,并且可以与 一起动态变化。当你将和投入到组合中时COUNTA
,事情真的会变得有趣。一定要避免,因为它是易变的。CHOOSE
INDEX
OFFSET