我有一个过去12个月及以下的日期范围,每个客户的日期范围是“开”或“关”值。我基本上希望在重新开始之前计算好几天的每个“关闭”期间。
实施例
Col A 01/01/2014 02/01/2014 03/01/2014 04/01/2014
1 off off on off
2 on off off off
3 on on on on
所以基本上在每行日期结束时我想要另外六列第1块到第6块(第6块将永远是最大值)所以对于上面的ID 1已经关闭了两天,然后再次打开和关闭,所以我希望最后的列看起来像:
Col A Block 1 Block 2 Block 3 Block 4 etc etc
1 2 1 - -
2 3 - - -
3 - - - -
每次他们重新获益,然后再回来,开始一个新的阻止。这有什么简单的方法吗?我有近800k的行,真的不想手动执行此操作
答案 0 :(得分:1)
我已经设法使用数组公式自行完成,我现在还不能理解UDF使用之前的答案。
=IFERROR(SMALL(IF(($A3:$OF3="Off")*($B3:$OG3<>"Off"),COLUMN($B3:$OG3),""),OJ$1)-SMALL(IF(($A3:$OF3<>"Off")*($B3:$OG3="Off"),COLUMN($B3:$OG3),""),OJ$1),"")
这似乎适用于1到6的辅助列
我已经检查了近6000行数据的结果,并且似乎完美没有发现任何问题。
感谢您的帮助
答案 1 :(得分:0)
您可以使用以下用户定义的函数来实现此结果。
如果您不熟悉UDF,可以按照本教程进行操作:
http://www.wikihow.com/Create-a-User-Defined-Function-in-Microsoft-Excel
Function CountBlock(v As Variant) As Variant
Dim output(1 To 6) As Variant
Dim cell As Variant
Dim count As Integer
Dim i As Integer
i = 1
For Each cell In v
If cell = "off" Then
count = count + 1
ElseIf i = 6 Then
Exit For
ElseIf count > 0 Then
output(i) = count
i = i + 1
count = 0
End If
Next
output(i) = count
CountBlock = output
End Function
结果将作为数组输出,因此您将使用&#34;数组公式&#34;共6件。只需选择6个连续的单元格。然后写=CountBlock(B2:E2)
并执行control+Enter