0

VBA新手。终于遇到了一个无法用公式解决的 Excel 问题。这是我的示例数据:

-----------------------
|   |   A     |  B*   |
-----------------------
| 1 |  Text1  |  3001 |
-----------------------
| 2 |  Text2  |  0231 |
-----------------------
| 3 |  Text1  |  1003 |
-----------------------
| 4 |  Text3  |  0012 |
-----------------------

我想实现 f(A1:A4, "Text1", B1:B4, "3") = 2。

即我想为包含“Text1”的每一行计算B列中字符“3”的累积出现次数。请注意,B 列中的单元格的类型为 text vs int。如果有办法在没有 vba 的情况下实现这一点,我也会欢迎。

这是我到目前为止所拥有的:

Function CountCharInStr(FilterStr As String, FilterRange As Range, SearchStr As String,    StrRange As Range) As Integer

    Dim Idx As Integer, IsFound As Boolean
    CountCharInStr = 0
    IsFound = False

    For Idx = 1 To FilterRange.Rows.Count
        IsFound = True
        If FilterRange(Idx) <> FilterStr Then
            IsFound = False
            Exit For
        End If

        If IsFound Then
            CountCharInStr = Len(StrRange(Idx)) - Len(Replace(StrRange(Idx), SearchStr, "")) + CountCharInStr
            Exit For
        End If
    Next Idx

End Function

该函数当前返回初始值 0,而不是 2。还想知道是否有一种简单的方法可以单步执行用户定义的函数以进行调试。

非常感谢!

4

1 回答 1

4

您可以直接在工作表上实现此目的:

     =SUM(IF(A1:A4="Text1",LEN(B1:B4)-LEN(SUBSTITUTE(B1:B4,"3","")),0))

请注意,这是一个数组公式:您必须在编辑时按 Ctrl+Shift+Enter(在公式栏中)而不是 Enter。

如果可能,最好避免使用 VBA。

如果您需要任何关于它如何工作的解释,请告诉我。

于 2013-05-20T10:09:41.750 回答