我正在尝试计算一列中有多少行在其字符串中具有特定条件。示例数据如下:
96.001
96.001
96.002
97.0052
1201 - Mining
1201 - Drilling
1205 - Safety
此数据出现在 F 列中。我希望代码检查该列并计算有多少个不同单元格中包含小数,并将该计数分配给变量。因此,如果变量是 X,则在上述情况下 X = 4。
真的被困在这个问题上,希望得到任何帮助。
Int
:
Sub foo()
Dim arr() As Variant
arr = Range("F2:F8").Value
Dim i As Long
For i = LBound(arr, 1) To UBound(arr, 1)
If Int(arr(i, 1)) <> arr(i, 1) Then
Dim count As Long
count = count + 1
End If
Next
Debug.Print count ' returns 4
End Sub
编辑:
根据您更新的示例数据,也许是以下内容?
Sub foo()
Dim count As Long
count = Application.CountA(Range("F2:F8")) - Application.CountIfs(Range("F2:F8"), "*-*")
End Sub
这相当于计算所有不包含
-
的已填充单元格。
编辑2:
更简单,正如 @FunThomas 所指出的,只需使用
Count
:
Count = Application.Count(Range("F2:F8"))
Sub CountCellsContainingStringTEST()
Const RANGE_ADDRESS As String = "F2:F8"
Const CHAR As String = "."
Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
Dim rg As Range: Set rg = ws.Range(RANGE_ADDRESS)
Dim x As Long: x = CountCellsContainingString(rg, CHAR)
MsgBox x
End Sub
Function CountCellsContainingString( _
ByVal rg As Range, _
ByVal SearchString As String, _
Optional ByVal MatchCase As Boolean = False) _
As Long
Dim CompareMethod As VbCompareMethod
If MatchCase Then
CompareMethod = vbBinaryCompare
Else
CompareMethod = vbTextCompare
End If
Dim cell As Range
For Each cell In rg.Cells
If InStr(1, cell.Text, SearchString, CompareMethod) > 0 Then
CountCellsContainingString = CountCellsContainingString + 1
End If
Next cell
End Function