示例
在单元格"A2“中,我有2,4,5,7-9
如何使用公式或使用vba进行编码来计数?
计算为2 4 5 7 8 9,之和值为6。
和单元格"B2“中的返回值
发布于 2022-09-09 05:30:02
假设活动工作表中的列XFD为空,且字符串中的任何整数都不会超过2^20
=SUM(COUNTIF(INDIRECT("XFD"&SUBSTITUTE(TEXTSPLIT(A2,","),"-",":XFD")),""))
对于那些没有TEXTSPLIT的人
=SUM(COUNTIF(INDIRECT(SUBSTITUTE(FILTERXML("<a><b>XFD"&SUBSTITUTE(A2,",","</b><b>XFD")&"</b></a>","//b"),"-",":XFD")),""))
发布于 2022-09-09 08:18:58
请试试下一个函数。它构建一个虚拟的不连续范围并计数其单元格:
Function countNumb(strNo As String) As Long
Dim arr, i As Long
arr = Split(Replace(Replace(strNo, " ", ""), "-", ":"), ",")
For i = 0 To UBound(arr)
If Not InStr(arr(i), ":") > 0 Then
arr(i) = arr(i) & ":" & arr(i)
End If
Next
countNumb = Intersect(Range(Join(arr, ",")), Range("A:A")).cells.count
Debug.Print Range(Join(arr, ",")).Address 'only to visually see the built range before intersection address...
End Function它还可以处理字符串为"2,4,5,7-9“.
它可以使用下一段代码进行测试:
Sub testCountNumbers()
Dim x As String: x = "2,4,5,7-9"
Debug.Print countNumb(x)
End Sub发布于 2022-09-09 06:08:41
对VBA来说
Function AddNumbers(rngTarget As Range) As Long
Dim arrValues() As String
Dim lngValue As Long
Dim strValue As String
Dim lngMinimum As Long
Dim lngMaximum As Long
arrValues = Split(rngTarget.Text, ",")
For lngValue = LBound(arrValues) To UBound(arrValues)
strValue = arrValues(lngValue)
If InStr(strValue, "-") > 0 Then
lngMinimum = CLng(Left(strValue, InStr(strValue, "-") - 1))
lngMaximum = CLng(Replace(strValue, lngMinimum & "-", vbNullString))
AddNumbers = AddNumbers + ((lngMaximum - lngMinimum) + 1)
Else
AddNumbers = AddNumbers + 1
End If
Next lngValue
End Functionhttps://stackoverflow.com/questions/73657562
复制相似问题