excel vba 報出包含指定文字的儲存格數目

2014-08-12 8:06 pm
小弟需要以 vba 方法點算在儲存格中出現的數目。


資料類型:文字串
例子如下:
儲存格I2: 釘書機, 印表機, 報事貼, 快勞
儲存格I3: 快勞, 報事貼, 碎紙機
儲存格I4: 界紙器, 碎紙機, 快勞

在excel中可以用以下formula點算:

=COUNTIF(I:I,"*"&N1&"*")
在N1可填入所需要的資料,如"快勞",就可得出結果3.

但在vba寫程式時遇到困難... 小弟寫的程式如下... 不知如何可達到上述效果? 想請各位大大指教一下.......

Method 1:

Sub StatisticRpt

Dim StatRpt As String '統計目標
Dim CounterString As Long '統計用counter


Worksheets("Sheet1").Cells(1, 1).Value = "Statistic Report" 'A1格輸入Statistic Report

Worksheets("Sheet1").Cells(2, 1).Value = "數點「" & StatRpt & "」 的數目"

CounterString = 0

If InStr(1, Worksheets("Sheet1").Range("I:I"), StatRpt)
Then CounterString = CounterString + 1
End If

Worksheets("Sheet1").Cells(2, 2).Value = CounterString

End Sub


Method 2:
也嘗試過用worksheetfunction.countif 也失敗了.....

Worksheets("Sheet1").Cells(2,2).Value = worksheetfunction.countif("I:I",*&StatRpt&*)

回答 (2)

2014-08-13 1:03 am
✔ 最佳答案
1st. 見你StatRpt係一個String variable, 但你無assign任何值畀佢。所以係empty string.
2nd. inStr function 用法:
Instr( 从第幾个字符起搜索, 被搜索的字符串, 要查找的字符串 )
eg: Instr(1,"Kitty is a cat", "is") --> answer is 7
因為instr唔可以搜尋range,所以你要用loop去check每一個cell。

Have fun :-)

2014-08-13 05:32:03 補充:
Method 2:
StatRpt = "*" + "釘書機" + "*"
CounterString = Application.WorksheetFunction.CountIf(Range("I:I"), StatRpt)
Worksheets("Sheet1").Cells(2, 2).Value = CounterString

但請注意,假設你有釘書機釘在list內,當搜尋釘書機字串時,也會把釘書機釘計算在內。
2014-08-19 8:16 am
此題必須用Loop 如:
Sub findx()
y = InputBox("")
For Each x In Range("I2:I2000")
If InStr(x, y) > 0 Then CounterString = CounterString + 1
Next
Worksheets("Sheet1").Cells(2, 2).Value = CounterString
End Sub


收錄日期: 2021-04-15 16:11:04
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20140812000051KK00068

檢視 Wayback Machine 備份