我有一组数据,需要对其进行一些基本分析。但是,我需要按星期几处理数据,这在一系列关联单元格范围的合并单元格中显示(见下图)。
我有一个手动流程,但有点麻烦;我想根据合并的单元格创建一个按天列出的单元格范围表。这些范围将在其他公式中用于执行我需要的操作。给定日期的数据行数可能会发生变化,因此我需要范围表自动反映数据。
上图捕捉到了我在此阶段要寻找的内容;A 列中列出了五天,B 列中列出了不同数量的相关数字。范围表显示了值集所需的范围。例如,“星期五”有 2 个值,范围从 B16:B17。范围列出了“B16:B17”。
如果我添加两个额外的数字,并扩展合并的“星期五”单元格以包含接下来的两个单元格,则此列出的范围应自动更改为“B16:B19”。
我一直在互联网上寻找这样的功能,但我得到的搜索结果太多,都是不相关的任务,例如查找合并单元格或删除它们。我尝试使用ROW
和ROWS
公式,但它们似乎没有给出我想要的结果。
以防万一,我正在使用 Office 365 版本的 Excel。
答案1
这使用了一个包含一些重复的公式,因此我在下面用几个辅助列来展示它,这将使它更容易理解。您可以隐藏辅助列,或者如果您不介意公式太长,可以将它们的公式合并到 E 列结果中。这将自动调整值的数量变化。
我添加了一个占位符 ( End
) 来标记数据的末尾,以便于搜索,这与公式的工作方式一致。您可以隐藏它,或者修改公式以仅查找 B 列中最后一行的值。
使用辅助列,E2 中的公式如下:
="B" & G2 & ":B" & H2
G 列和 H 列分别是 D 列中当天的第一行和最后一行。G2 中的公式:
=MATCH(D2,A:A,0)
这只是在 A 列列表中查找 D 列日期的行。H2 中的公式:
{=MATCH(FALSE,ISBLANK(OFFSET($A$1,G2,0,MATCH("End",A:A,0))),0)+G2-1}
这是一个数组公式。当您使用 ++Ctrl确认时,Excel 将添加花括号。ShiftEnter
这将开始查找日期单元格之后的第一个非空白单元格(即下一个日期标签;合并的单元格使用范围内第一个单元格的内容)。“结束”用作最后一天的下一个“日期标签”。然后,它会调整起始日期标签的位置。
如果您想要消除辅助列,则将它们合并到 E 列中,对于 E2,公式将如下所示:
{="B" & MATCH(D3,A:A,0) & ":B" & MATCH(FALSE,ISBLANK(OFFSET($A$1,MATCH(D3,A:A,0),0,MATCH("End",A:A,0))),0)+MATCH(D3,A:A,0)-1}
注意E列公式变成了数组公式,需要用CSE进行确认。
警告:如果 A 列数据不是 A 列内容的开头,而列表上方某处出现了日期名称,则这些公式将首先找到该信息,并且不起作用。在这种情况下,请使用明确的范围引用。范围的结束可以是数据可能到达的下方的任意单元格。范围的开始将是列标题“日期”所在的位置。要获得正确的行引用,您需要添加调整以在查找范围内局部偏移起始行的位置。
答案2
如果您的数据结构是按此顺序排列的,我有一个几乎可行的解决方案。此方法获取除最后一天之外的所有天数的范围。
公式: =CELL("address",OFFSET($A$1,MATCH(C2,$A$2:$A$16,0),))&":"&IFERROR(CELL("address",OFFSET($A$1,MATCH(C3,$A$2:$A$16,0)-1,)),"")
如果你不想显示“$”符号,你可以使用公式SUBSTITUTE
删除这些符号
编辑:
如果您的“参考”栏(C:C in the image above)
是连续的,您可以使用以下公式获取所有数据: =CELL("address",OFFSET($A$1,MATCH(C3,$A$2:$A$16,0),))&":"&IFERROR(CELL("address",OFFSET($A$1,MATCH(C4,$A$2:$A$16,0)-1,)),ADDRESS(MATCH("zzz",A:A),1))
IFERROR
用于获取 A 列中最后一行填充内容的公式。ADDRESS(MATCH("zzz",A:A),1)
我在在这篇文章中回答。