【问题标题】:Formula for sequential numbering based on rules基于规则的顺序编号公式
【发布时间】:2014-10-27 17:41:31
【问题描述】:

我需要创建一个非常复杂的 Excel 公式,但我一直卡住。我的数据如下所示:

Date         ID   Focal  Time      Condition
08/22/2014   FJ   1      7:52:00   T
08/22/2014   FJ   1      7:52:00   T
08/22/2014   FJ   1      7:52:00   T
08/22/2014   RJ   1      8:52:00   T
08/22/2014   FJ   2      9:52:00   T
08/22/2014   FJ   2      9:52:00   T
08/22/2014   FJ   2      9:52:00   T
08/22/2014   FJ   2      9:52:00   T
08/22/2014   FJ   3      10:52:00  T
08/22/2014   FJ   3      10:52:00  T
08/22/2014   FJ   1      11:32:00  C
08/22/2014   FJ   1      11:32:00  C
08/22/2014   RJ   2      11:52:00  T
08/22/2014   RJ   2      11:52:00  T
08/22/2014   FJ   4      10:52:00  T
08/22/2014   FJ   4      10:52:00  T
08/22/2014   MD   1      12:52:00  T
08/22/2014   RJ   3      13:52:00  T
08/22/2014   RJ   3      13:52:00  T 
08/22/2014   FJ   2      14:52:00  C 
08/23/2014   FJ   1      7:52:00   T
08/23/2014   FJ   1      7:52:00   T
08/23/2014   RJ   1      8:52:00   T
08/23/2014   FJ   1      9:52:00   C

我需要 Focal number 列根据以下规则自动填充:

  • 第一个条目将始终为“1”。
  • 当日期、时间和条件相同时,每个 ID 应具有相同的 Focal 编号。
  • 只有时间变化时,应按顺序列出数字。
  • 当条件改变时,数字应该从1开始,然后当时间改变时这些应该是顺序的。
  • 如果条件更改为之前经历过的 ID,则序列号应在其停止时继续。
  • 此外,当 ID 更改时,数字应从 1 重新开始。
  • 最后,一个新的日期将重新开始所有 ID 的此过程。

【问题讨论】:

  • 我怀疑你会得到一个公式来做到这一点。你考虑过 VBA 吗?
  • @mermaid-niki 为什么最后一行的焦点是 2,而不是 1?新的日期重新开始,条件更改从 1 点重新开始...这是 08/23 上 FJ 的第一个 C...
  • @chrisneilsen: Famous last words
  • 抱歉 - 最后一个应该是“1”。 (刚刚解决了这个问题)---我认为我的问题已经解决了。你们都很棒。谢谢! =)

标签: excel indexing vlookup


【解决方案1】:

我将此解决方案作为数组公式(使用 Ctrl+Shift+Enter 输入),例如在 C2 中:

=IF(COUNTIFS($A$1:$A1,$A2,$B$1:$B1,$B2,$E$1:$E1,$E2)=0,1,MAX(IF(($A$1:$A1=$A2)*($B$1:$B1=$B2)*($E$1:$E1=$E2),$C$1:$C1,0)+IF(COUNTIFS($A$1:$A1,$A2,$B$1:$B1,$B2,$E$1:$E1,$E2,$D$1:$D1,$D2)>0,0,1)))
  • 这是查看当前行上方的所有行(例如,$A$1:$A1 将开头锁定为顶部,将结尾锁定为上方的行)
  • 如果上面的行中现在有匹配的日期、ID 和条件 --> 1
  • 否则,使用数组公式部分查找该日期/ID/条件的MAX Focal,如果是新时间,则添加 1

希望这是一个足够清晰的解释......

您的示例似乎有两个不同之处...最后一行(根据我的评论)以及 FJ/T/10:%2 和 Focal 4...这种组合已经存在。

祝你好运,记得用Ctrl+Shift+Enter

输入

【讨论】:

  • 很好的解决方案,我有点太快了,因为单个公式太复杂而忽略了!
  • 我很久以来见过的最好的 Excel 答案。
【解决方案2】:

我有一些东西,但我无法将它作为一个单一的公式来完成。在第 2 行输入以下内容并将公式复制下来:

在 F 列中:

=A2&B2&D2&E2    ' Concatenate the required fields to create a reference

在 G 列中:

=IF(COUNTIF($F$2:F2,F2)>1,"",1)    ' Create a marker to determine the first occurrence of each reference

在 H 列中:

=IF(G2=1,A2&B2&E2,"")    ' Create a reference to count occurrences in a day

在第一列中:

=IF(G2=1,COUNTIF($H$2:H2,H2),0)    ' Count first occurrences in the day

在 J 列中:

=INDEX($I$2:I2,MATCH(F2,$F$2:F2,0))    ' Return the count of first occurrences

它可以整理很多,但我认为它可以满足您的要求,这是展示我所做的最简单的方式。

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多