例如,我想要計算列A中出現的「johns」的數量,但是列中既有名字也有姓,我想統計所有johns,而不考慮他們的姓。如何使用具有條件作爲字符串文字一部分的countif函數?
我使用下面的代碼但似乎並沒有工作:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))
例如,我想要計算列A中出現的「johns」的數量,但是列中既有名字也有姓,我想統計所有johns,而不考慮他們的姓。如何使用具有條件作爲字符串文字一部分的countif函數?
我使用下面的代碼但似乎並沒有工作:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))
由於@ YowE3K評論說,有一個原因,我使用"=" & "John*")
。這是爲將來使用變量而不是硬編碼的「約翰」做準備。
如果你想使用VBA的解決方案,你可以使用:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & "John*")
或者,更好:
Const NametoFind As String = "John"
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & NametoFind & "*")
注意:Range("A1", Range("A1").End(xlDown))
將爲連續範圍只工作(如果沒有你有空白單元格在你的範圍中)。
你不需要VBA。您可以在COUNTIF/COUNTIFS中使用通配符 - 使您的標準爲「John *」(so,=COUNTIF(A1:A7, "John*")
)。
如果你被允許使用一個額外的列,讓一個對你的名字列之後,用下面的公式:
=ISNUMBER(SEARCH("JOHN"; A1)
上面的例子應該是在細胞B1
。那麼如果列A中的單元格包含名稱「JOHN」,則會得到TRUE
,否則您將得到FALSE
。然後你只需做一個計數:
=COUNTIF(B:B; TRUE)
這可能是一個輕微的缺點是你必須使用一個額外的列。但從正面來看,這是非常容易理解的(對於你自己和其他可能會讀你的代碼的人)。
'「=」&「John *」'?真??這浪費了5個按鍵!無論使用什麼''=約翰*「'??!?! (只是開玩笑 - 有一個很好的理由去做你所做的事情,或者甚至更好'「=」&「John」和「*」' - 它使得用變量代替硬編碼的「John」更容易) – YowE3K
@ YowE3K你是對的,我是在答案的中途,當我不得不參加一個工作會議(當你的工作干擾你的**時,你不是隻討厭它) –
我不能當我有一個工作會議時真的抱怨 - 我想我應該在每個工作日至少給公司30分鐘的時間。 ;) – YowE3K