根据分类计算过去的事件

时间:2017-09-28 16:28:11

标签: excel excel-vba excel-formula vba

我有一张表,如下图所示。我想计算自上一个条目以来列Leg中的单元格数,给定列类型的特定分类。 例如,仅对于KFT类型,自Leg的最后一个条目以来,Legendary列中有多少个空白条目?

我知道如何解决此问题创建帮助列。但鉴于我有太多类型,我将不得不为每种类型创建一个帮助列,使我的表太大,因为我有多少行。有什么方法可以创建一个VBA函数来为我执行这个任务,这样我每个类型只需要一个单元格让我知道自每个类型的最后一个Leg条目以来空白单元格的数量?以下是我的表格外观的简短示例,仅使用了两种类型:

enter image description here

在这个例子中,我需要一个输出为MSG的公式,因为自从MSG的最后一个Leg以来它已经是0个条目,而UNG的输出是2,因为它是自UNG的最后一个Leg以来的2个条目。 / p>

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​

使用单一可怕的公式

好吧。我认为你的问题的最佳解决方案是使用辅助列或VBA,但如果你真的只想使用一个公式,我会为你找到一些东西。这个公式非常非常可怕,有人可能会给你更好的解决方案,但这个公式确实有效。

在下面的公式中,我假设数据在A2:F100范围内。将100更改为您的数据行数。 (更改所有100个,最好的方法是在空白工作表中复制没有=的公式,然后FIND 100REPLACE ALL复制到您的行号

如果您从Types开始在Column H列出Cell H2,则在Cell I2中输入以下表格,根据需要拖放/复制。

=COUNTIFS(INDIRECT("F" & INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=1),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1 & ":F" & IF(INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=1),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1>INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=""),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1,100,INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=""),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1)),"",INDIRECT("B" & INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=1),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1 & ":B" & IF(INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=1),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1>INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=""),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1,100,INDEX($A$2:$A$100,MAX(IF(($B$2:$B$100=H2)*($F$2:$F$100=""),ROW($B$2:$B$100)-ROW(INDEX($B$2:$B$100,1,1))+1)))+1)),H2)

这是一个数组公式,所以按 Ctrl + Shift + Enter 提交它。

enter image description here

解决方案2

使用辅助列

假设您从Types开始列出Column H中的所有Cell H2,然后在Cell I2中输入以下数组公式以获取最后一行TypeColumn H

中相应Leg =1的数据
=INDEX($A$2:$A$11,MAX(IF(($B$2:$B$11=H2)*($F$2:$F$11=1),ROW($B$2:$B$11)-ROW(INDEX($B$2:$B$11,1,1))+1)))+1

然后在Cell J2中输入以下数组公式,以获取TypeColumn H <中相应Leg ="" (blank)的数据的最后一行/ p>

=INDEX($A$2:$A$11,MAX(IF(($B$2:$B$11=H2)*($F$2:$F$11=""),ROW($B$2:$B$11)-ROW(INDEX($B$2:$B$11,1,1))+1)))+1

接下来,在Cell K2中,如果没有与行空白的特定类型相对应的行,请输入以下公式来设置最后一行(例如,在我的示例数据中ABC没有空{ {1}})

Leg

最后,在=IF(I2>J2,11,J2) 中输入以下公式以获取Cell E2

Count

enter image description here