我在单元格中有许多以破折号分隔的项目。我试图通过拆分行来规范化数据库,以便每行只包含一个条目。如何在Excel VBA中查找/计算字符串。我知道你可以用
为整个细胞做值myVar = Application.WorksheetFunction.COUNTIF(Range("A1:Z100"),"Value")
我需要搜索单个单元格并找出有多少个连字符。实施例
123-456-789 = 2
9876-12 = 1
答案 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个盒子中。真的建议在工具栏中放置一个代码停止开始图标。