我有 5 列。我需要找出第二列中相同类型的值之间的时间(以天为单位)。最后一列已经计算了每个日期之间的时间差。它通过将单元格当前单元格的日期减去前一个单元格的日期来实现。例如:距离上次事件已经过去 1 天
我正在尝试弄清楚如何做到这一点:第 3 列将查找包含“s”的第 2 列之间的时间差。第 4 列将查找所有其他字母之间的时间差。
示例数据:
答案1
首先在数据上方的第 1 行添加一个标题行,然后从第 2 行开始显示数据。
在单元格 C2 中输入以下公式:
=IFERROR(IF(B2="s",A2-INDIRECT("A"&LOOKUP(2,1/($B$1:$B1="s"),ROW($B$1:$B1))),"-"),"n/a")
在单元格 D2 中输入以下公式:
=IFERROR(IF(B2<>"s",A2-INDIRECT("A"&LOOKUP(2,1/($B$1:$B1<>"s"),ROW($B$1:$B1))),"-"),"n/a")
将每个公式填入所有行。您将得到以下结果:
解释
C 列公式的工作原理是,首先检查 B 列是否 =“s”,然后向上搜索 ( lookup
) B 列中“s”的上一个实例,然后使用该实例的行号 ( indirect
) 引用与其相关的日期,并执行日期求和。D 列公式执行相同的操作,但匹配任何内容以外“s”。
列 C 中第一次出现的“s”和列 D 中第一次出现的“非 S”将导致错误(因为没有先前的数据),因此公式被函数包围iferror
,这些函数将 #N/A 错误结果更改为更清晰的 n/a 字符串(单元格 C4 和 D2)。
如果你的数据不是从左上角开始
如果你的数据不是从第 2 行开始,仍然将上述公式粘贴到我说的位置,然后将它们复制并粘贴到工作表上应该出现的位置,并且大部分排引用将相应更新 - 您只需更改 的实例$1:
以匹配标题行(例如,如果您的标题行是 25,则 的实例$1:
将变为$25:
)。如果您的数据不是从 A 列开始,那么您将需要在公式中手动更改相应的列字母。例如,如果您的数据从 F 列开始,则将 的每个实例更改为A
,将F
的每个实例更改B
为G
。
答案2
我知道这不是应该这样做的确切方式,但我通常会尝试使用更多列来帮助我解决此类任务。在其中一个列中,我让 excel 列出我在其他地方输入的值的日期(不确定你的任务是什么,但对我来说它可能是项目的 ID)。然后在附加列中,很容易计算它们之间的差异。我知道你可以写脚本或类似的东西,但如果你可以接受肮脏的解决方案,这个也可以……
我将使用另一列带有 IF 函数,如果 ID 与我所需的值匹配,则让它写入日期列的值。这样您将获得空单元格或日期。然后应该很容易使用另一列计算自上一个非空单元格以来的天数。
希望这可以帮助...