首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果A或B没有双倍计数

如果A或B没有双倍计数
EN

Stack Overflow用户
提问于 2017-01-20 18:44:29
回答 2查看 434关注 0票数 1

我有一组单元格,它们的字符串表示各种语句。如果它有(例如) ABC、ABD或ABQ,我需要它唯一地计数细胞,但是一个单元格可以读取“ABC ABD AMN”,并且只需要计数一次。这是不标准的。

在查看时,我只发现了使用"CountIf(ABC) + CountIf(ABD)+CountIf(ABQ)“的建议,但这会使多个细胞双计数。

然后CountIfs(ABC,ABD,ABQ)只对包含所有这些的细胞进行计数。在不重复计算的情况下,我能用什么方法来唯一地计数细胞?

代码语言:javascript
复制
Set j = .Range(Cells(s, 8), Cells(e, 8))
    .Cells(s - 1, 8).Value = Application.WroksheetFunction.CountIfs(j, "* ABC*", j, "*ABD*", j, "*ABQ*") 

所以输入单元可能是

代码语言:javascript
复制
 [ACD AQM AFD ABD]
 [ABM ARQ ABQ ABC]
 [AAA ABE ARQ]

两个细胞至少有一个所需的短语(ABC,ABD,ABQ)。CountIfs会错误地给出0。CountIf + CountIf会错误地给出3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-20 18:58:19

你想要这样的东西:

代码语言:javascript
复制
Set j = .Range(.Cells(s, 8), .Cells(e, 8))
With Application.WorksheetFunction
    .Cells(s - 1, 8).Value = .COUNTIF(j,"*ABC*") + .COUNTIF(j,"*ABD*") - .COUNTIFS(j,"*ABC*",j,"*ABD*")
End With
票数 2
EN

Stack Overflow用户

发布于 2017-01-20 19:10:15

像这样的东西会做到这一点,如果您正在处理非常大的数据列,可能需要优化。这样做的目的是根据每个ABC、ABD或ABQ检查每个单元格,如果在单元中找到匹配的值,则提前退出循环。这将防止可能符合多个标准的细胞重复计数。

代码语言:javascript
复制
Option Explicit

Sub foo()
Dim rng As Range
Dim i As Long
Dim word, words, val, vals
words = CountedWords
Set rng = Range("A1:A3")  'Modify as needed
vals = Application.Transpose(rng.Value)

For Each val In vals
    For Each word In words
        If InStr(val, word) Then
            i = i + 1
            Exit For
        End If
    Next
Next
MsgBox i
End Sub

Function CountedWords()
    CountedWords = Array("ABC", "ABD", "ABQ") 'Modify as needed
End Function
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41770411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档