【问题标题】:Count multiple values in Same Cell, within whole Row in Excel在 Excel 的整行中计算同一单元格中的多个值
【发布时间】:2017-10-27 01:32:34
【问题描述】:

我想创建一个公式来查看 excel 中的列并计算是否有条目,例如 D48。因此它将遍历并计算整个列中的所有“D48”条目,即使它是用逗号分隔的。因此,包含“D48,D48”或“D48,D48,D48”的单元格都将被计算在内。

我现在有一个工作公式,但它需要空白单元格并分配一个值 -1。我怎样才能避免这种情况?有没有更有效的方法来编写这个公式?

Function CountText(sLookFor As String, rSearchRange As Range) As Long

Dim cel As Range

For Each cel In rSearchRange
    CountText = CountText + UBound(Split(cel.Value, sLookFor))
Next cel

End Function

但这是基于以下响应的代码(问题已解决!!!)

Function CountText(sLookFor As String, rSearchRange As Range) As Long
    Dim cel As Range

    For Each cel In rSearchRange

    If cel = "" Then

    Else
        CountText = CountText + UBound(Split(cel.Value, sLookFor))
    End If
Next cel

End Function

【问题讨论】:

  • D48 是文字还是表示第 48 行第 4 列中的文本或数字(或错误)值?
  • @Jeeped D48 是我想在不同的 Excel 选项卡中搜索的单元格中的内容。

标签: vba excel


【解决方案1】:

通过检索字符串的长度减去检索的不带分隔符的字符串长度除以分隔符的长度来跟踪“分隔符”的实例数。

Function CountText(sLookFor As String, rSearchRange As Range) As Long
    Dim cel As Range
    For Each cel In rSearchRange
        CountText = (Len(cel.Value) - Len(Replace(cel.Value, sLookFor, vbNullString))) / Len(sLookFor)
    Next cel
End Function

替换功能目前区分大小写,但可以更改为不区分大小写。

【讨论】:

  • 感谢您的回复-我不确定这个到底是怎么回事,但我得到的所有搜索结果都是“0”结果,无论实际有多少是。
【解决方案2】:

怎么样:

For Each cel In rSearchRange
    if cel = "" then
        next cel
    else
        CountText = CountText + UBound(Split(cel.Value, sLookFor))
    end if
Next cel

For Each cel In rSearchRange
    if cel <> "" then
        CountText = CountText + UBound(Split(cel.Value, sLookFor))
    end if
Next cel

【讨论】:

  • 谢谢我得到了一个没有 For 错误的 Next
  • 我假设它是 if 语句中的下一个 cel
  • 太棒了。您是否必须编辑示例才能使其正常工作?
  • 是的,我不得不稍微编辑一下这个例子,你可以在我编辑的原始帖子中看到它。我唯一的问题是这使我的工作表运行非常非常缓慢!您知道如何提高效率/运行得更快吗?
  • 我怀疑“如果”是减慢代码速度的罪魁祸首。我编辑了答案以提供另一种方法来做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2015-10-09
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多