计数包含部分特定string的单元格数量

我想知道是否有可能计数具有特定string的单元格? 例如,我想使用Mid(C.Value, 6, 2) = "sh"并计算电子表格中有多less数据具有“sh”。

我到目前为止是这样的,我使用UsedRange来select电子表格中的所有数据,如果过滤并计算具有特定string的特定数据,我只需要执行这些操作。

 Sheets("Campaign").UsedRange 'Refresh UsedRange LastRow = Sheets("Campaign").UsedRange.Rows.Count Dim RangeString As String Worksheets("Campaign").Select Range("A1:A" & LastRow).Select RangeString = Selection.Address Range("A1").End(xlToRight).Select RangeString = RangeString & ":" & Selection.Address 

如果你想看看sh是否在单元格的任何值,那么,

 dim cnt as long with Sheets("Campaign").UsedRange cnt = application.countif(.cells, "*sh*") debug.Print cnt end with 

如果你想计算任何单元格的值为第六和第七个字母的单元格,

 dim cnt as long with Sheets("Campaign").UsedRange cnt = application.countif(.cells, "?????sh*") debug.Print cnt end with 

作为通配符,星号(例如* )表示任意数量的字符。 问号(例如? )是指单个字符,但可以堆叠起来。 这些计数不区分大小写。

这是可能的。 首先,为什么你使用这么多的select,我宁愿使用For循环。 无论如何,你可以像这样使用它:

 Dim i As Integer Dim count as Integer count=0 For i = 1 To 6 if(Instr(Cells(i,1).Text,"sh")) Then count=count+1 End if Next i 

我很抱歉,因为我使用的是Ubuntu,所以无法testing代码,但是我希望你能明白。

从我身边的其他变体已经由@Jeeped发布

 Sub test() Dim cl As Range, i&: i = 0 For Each cl In Sheets("Campaign").UsedRange If LCase(cl.Value) Like "*sh*" Then i = i + 1 Next cl MsgBox i End Sub