计算每行字符串中有多少行具有特定条件[关闭]

问题描述 投票:0回答:2

我正在尝试计算一列中有多少行在其字符串中具有特定条件。示例数据如下:

96.001
96.001
96.002
97.0052
1201 - Mining
1201 - Drilling
1205 - Safety

此数据出现在 F 列中。我希望代码检查该列并计算有多少个不同单元格中包含小数,并将该计数分配给变量。因此,如果变量是 X,则在上述情况下 X = 4

真的被困在这个问题上,希望得到任何帮助。

excel vba string variables count
2个回答
2
投票

如评论中所述,将数据加载到数组中并使用

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"))

0
投票

计算包含字符串的单元格

  • 此示例对包含句点的单元格进行计数,无论它们代表什么(例如,仅句点、日期、小数或千位分隔符)。
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
© www.soinside.com 2019 - 2024. All rights reserved.