我需要计算A列中所有地址的部分结果。
如果" T =" A列中的值包含一个Semikolon它可以计算double,如果它包含2个Semikolons它可以计算3等等......
她是一张图片,展示了计数应该如何运作。
我有公式来计算状态完成或待定的金额以及计算总金额的公式。
您可以看到部分结果与总金额相同,因为没有过滤器。
当我设置过滤器时,它应该只显示可见单元格的数量,在此图片中为LIke。
答案 0 :(得分:1)
更新:
在更多的根源之后,我找到了一个应该做的技巧。它需要作为数组函数输入(Ctrl + Shift + Enter)。
=SUMPRODUCT((LEN(Range)-LEN(SUBSTITUTE(Range,";","")) +1)*--(SUBTOTAL(103,OFFSET(FirstCell,ROW(Range)-ROW(FirstCell),0))=1))
在您的情况下,FirstCell是A7,Range是A7:A22。
小计(103,...)是一个CountA函数,但忽略了隐藏的单元格。但是,它只返回一个值(隐藏单元格的数量),除非给出一个引用数组,这是Offset废话提供的。
注意:此问题与this one.
如果有这个诀窍,请告诉我:
Function CountFilter(rng As Range, delimiter As String) As Integer
CountFilter = 0
For Each c In rng
If Rows(c.Row).Hidden = False Then
CountFilter = CountFilter + 1 + CountChrInString(c.Value, delimiter)
End If
Next c
End Function
Public Function CountChrInString(Expression As String, Character As String) As Long
''
''' Returns the count of the specified character in the specified string.
'''
'
' ? CountChrInString("a/b/c", "/")
' 2
' ? CountChrInString("a/b/c", "\")
' 0
' ? CountChrInString("//////", "/")
' 6
' ? CountChrInString(" a / b / c ", "/")
' 2
' ? CountChrInString("a/b/c", " / ")
' 0
'
Dim iResult As Long
Dim sParts() As String
sParts = Split(Expression, Character)
iResult = UBound(sParts, 1)
If (iResult = -1) Then
iResult = 0
End If
CountChrInString = iResult
End Function
CountChrInString函数从here无耻地复制。