如何使用Excel VBA计算单元格中特定字符的数量

时间:2014-01-27 01:55:52

标签: vba

我在单元格中有许多以破折号分隔的项目。我试图通过拆分行来规范化数据库,以便每行只包含一个条目。如何在Excel VBA中查找/计算字符串。我知道你可以用

为整个细胞做值
myVar = Application.WorksheetFunction.COUNTIF(Range("A1:Z100"),"Value")

我需要搜索单个单元格并找出有多少个连字符。实施例

123-456-789 = 2
9876-12 = 1

5 个答案:

答案 0 :(得分:6)

使用上面ron's function的提示,我创建了这个公式,它运行良好:

=LEN(A1) - LEN(SUBSTITUTE(A1, "-", ""))

答案 1 :(得分:2)

这将计算activecell中连字符的数量

Sub test()
    a = Len(ActiveCell)
    my_txt = Replace(ActiveCell, "-", "", 1, -1, vbTextCompare)
    b = Len(my_txt)
    numb_occur = a - b
End Sub

答案 2 :(得分:0)

这是UDF计算字符串中单个字符串的出现次数:

Option Explicit
Function COUNTTEXT(ref_value As Range, ref_string As String) As Long

Dim i As Integer, count As Integer

count = 0
If Len(ref_string) <> 1 Then COUNTTEXT = CVErr(xlErrValue): Exit Function
For i = 1 To Len(ref_value.value)
    If Mid(ref_value, i, 1) = ref_string Then count = count + 1
Next

COUNTTEXT = count

End Function

这是使用Array公式:

=SUM(IF(ISERROR(SEARCH("-",MID(A1,ROW(INDIRECT("$1:$" & LEN(A1))),1))),0,1))

使用 Ctrl + Shift + 输入
希望这会有所帮助。

答案 3 :(得分:0)

此代码可能对您有所帮助..您也可以将其用作UDF ... :)

Function CountHypens(rng_Src As Range) As Long

'A VARIANT FOR SPLITTING CELL CONTENTS
Dim var As Variant

On Error Resume Next
var = Split(rng_Src.Value, "-", , vbTextCompare)

If Err.Number <> 0 Then
    Debug.Print "This cell does not have any hyphens."
Else
    CountHypens = UBound(var)
    End If
Err.Clear: On Error GoTo 0

End Function

答案 4 :(得分:0)

跟进:davex,davex ..:)

我一直在寻找一种方法来测试公式中查找文本字符串的相同方法。 这个答案似乎适用于两个公式/不是&amp;适合1个班轮..   (我仍然是vba的新手,让我知道是否有更好的方式)谢谢。

If countChar(UCase(Selection.Formula), UCase("offset")) > 0 Then   'YES (thee? answer, works for both formulas / not)
'If countChar(Selection.Formula, "OFFSET") > 0 Then   'yes
'If countChar(Cells(ActiveCell.row, Selection.Column).Formula, "OFFSET") > 0 Then   'yes
'If countChar(Cells(ActiveCell.row, "BG").Formula, "OFFSET") > 0 Then   'yes
'If countChar(UCase(Selection), UCase("OffSET")) > 0 Then    'yes but not work on formula
'If Selection.Formula Like "*offset*" Then   'no (for eq)
MsgBox "YES" & Space(15), vbQuestion
Else
MsgBox "NO" & Space(15), vbQuestion
End If

注意:代替变量&#34; BG&#34;上面,我使用永久工作单元来改善列BG示例的使用,工作单元A3具有/显示:BG:BG

=SUBSTITUTE(SUBSTITUTE(CELL("address",$BG3),"$",""),ROW(),"")&":"&SUBSTITUTE(SUBSTITUTE(CELL("address",$BG3),"$",""),ROW(),"")

你还需要在vba顶部/之前调暗工作单元:

Dim A3 As String
A3 = RANGE("A3")
赦免,尝试了3次将所有代码放入1个盒子中。真的建议在工具栏中放置一个代码停止开始图标。