是否可以在 Excel 中制作图表自动显示过去一年收集的数据?
背景信息:
我收集数据,希望将其以图表的形式呈现,显示去年的情况。目前我需要手动调整显示的日期。我觉得这可以自动化,但无法在我们的好朋友谷歌上找到解决方案
答案1
为自己创建一个“命名范围”,在您的情况下,该范围将是一个公式。您可以使用功能区,“公式”选项卡和“定义的名称”部分定义命名范围或命名公式:
假设您的数据从第 4 行开始垂直列在 C 列中,因为数据之前有一些标题和行信息。
您可以使用 TODAY() 函数将今天定义为参考点。但是,这是一个不稳定的函数,可能会导致一些多余的计算,从而使您的系统陷入困境。对于小数据来说这不是什么大问题,但在数组函数中尤其糟糕。我猜想您想要某个日期之前的 365 天。例如您准备演示文稿/报告的那天,不一定是演示文稿的那天或打印的日期。因此,我会将参考日期放在某个单元格中。对于这种情况,让我们使用 E2 作为结束参考日期,使用 E3 作为开始参考日期。
在 E2 中只需输入报告的最后日期。
在 E3 中手动输入您想要报告的最后日期,使用以下公式自动获取 365 天前的日期:
=E2-365
365 是正常年份的天数。如果你想要更复杂一点,你可以用一个确定闰年的公式来代替 365,但我想现在还是让它简单一点。
下一步是确定您感兴趣的第一个日期的行。假设您的日期按升序排列 C4:C1000,您可以使用 MATCH 查找最早的条目。然后可以将其传递给 INDEX 以获取第一行的地址。
INDEX($C:$C,IFERROR(MATCH($E$2,$C:$C,1),0)+1)
IFERROR 用于处理 E3 中的日期偏离列表开头的情况。+1 用于处理匹配结果为截止日期之前的日期的情况。它将匹配结果推到下一行。MATCH(,,1) 查找小于或等于搜索值的最大值。我猜偏离 1 个日期条目并不是什么大问题,但如果是,您可以更改 +1 以查看近似搜索的匹配结果是否与精确搜索或 E3 中的值相同。
然后可以做一些非常类似的事情来找到最后一行。
INDEX($C:$C,IFERROR(MATCH($E$2,$C:$C,1),1))
由于没有 +1 选项可供考虑,因此此处的 IFERROR 结果设置为 1。这样做会使列表中的第一个日期成为当您选择的日期范围在所有数据之前时的唯一结果。
现在您有了所需日期范围的起点和终点,请按照以下格式定义范围:
INDEX():INDEX()
在这种情况下,它是:
INDEX($C:$C,IFERROR(MATCH($E$2,$C:$C,1),0)+1):INDEX($C:$C,IFERROR(MATCH($E$2,$C:$C,1),1))
以上内容涵盖了您的日期,但您还需要根据 Y 值(其他数据)进行调整。为此,您只需将 INDEX 范围的 C:C 引用更改为其他数据的列。在此示例集中,将 C:C 更改为 D:D,如下所示:
INDEX($D:$D,IFERROR(MATCH($E$2,$C:$C,1),0)+1):INDEX($D:$D,IFERROR(MATCH($E$2,$C:$C,1),1))
现在您有了范围公式,您需要将其放在已定义的名称中。话虽如此,我会将上述公式放在单元格中,以便检查括号计数并使范围选择更容易。当两个索引组合时,单元格将计算为错误,但这是可以的。您可以检查各个索引以查看其是否正常工作。将它们放在单元格中的另一个原因是,您可以在转到命名公式之前将公式复制到剪贴板。
按照答案开头的提示,单击功能区中的“定义名称”。应出现如下窗口:
输入 X 系列的名称。不能有空格,我也不确定,但为了省事,我会避免使用特殊字符,但下划线除外。在示例中,您可以看到我将其命名为 X_Series。在底部粘贴或输入与系列名称相对应的公式。对您需要的其他每个系列重复此过程。在我的示例中,我再次对 Y_Series 执行此操作。如您在下面的名称管理器窗口中所见:
最后插入图表并转到数据系列信息。在此示例中,我使用的是 XY 散点图。
然后编辑系列并将 x 系列设置为工作簿/文件名!命名公式。这意味着您需要先保存工作簿才能使其工作。在本例中,我将工作簿保存为 DEMO.xlsx。您可以在下面看到我如何填写系列:
您还可以通过选择图表并查看 C:C 或 D:D 列(在本例中)中突出显示的位置来验证系列是否被适当地选择:
因此,现在当您更改单元格 E2 中的日期时,图表将自动更新。如果您想看到更新,请确保删除您在图表上设置的任何手动限制,因为更新可能会使您超出之前施加的限制。