Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从excel中单元格区域中以逗号分隔的一组数字中计算特定数字_Excel_Count_Numbers_Cell - Fatal编程技术网

从excel中单元格区域中以逗号分隔的一组数字中计算特定数字

从excel中单元格区域中以逗号分隔的一组数字中计算特定数字,excel,count,numbers,cell,Excel,Count,Numbers,Cell,我有一个特例,需要从一系列单元格或列中计算一个特定的数字,如下所示 1 A 2 1,2,3 3 1,4,5 4 1,3,5,6 我需要从A列中单独计算“1”。其他数字的计算方法相同,例如“2”、“3”等 我尝试了下面的代码,但是它给出了单个单元格中唯一的数字计数 Public Function Count(r As Range) As Long Dim c As Collection Set c = New Collection ary = Split(r.Text,

我有一个特例,需要从一系列单元格或列中计算一个特定的数字,如下所示

1  A        
2  1,2,3
3  1,4,5
4  1,3,5,6
我需要从A列中单独计算“1”。其他数字的计算方法相同,例如“2”、“3”等

我尝试了下面的代码,但是它给出了单个单元格中唯一的数字计数

Public Function Count(r As Range) As Long
Dim c As Collection
Set c = New Collection
ary = Split(r.Text, ",")
On Error Resume Next
For Each a In ary
    c.Add a, CStr(a)
    If Err.Number = 0 Then
        Count = Count + 1
    Else
        Err.Number = 0
    End If
Next a
On Error GoTo 0
End Function`

如何将其更改为一个范围,以及仅针对该范围中的一个数字进行计数?

您可以执行以下操作:

公共函数CountNum(rng作为范围,num)作为长度
尺寸rv为长,c为范围,arr为a
num=CStr(num)
对于每个c In rng.单元格
如果Len(c.值)>0,则
arr=拆分(c.值,“,”)
对于arr中的每个a
如果a=num,则rv=rv+1
下一个
如果结束
下一个c
CountNum=rv
端函数
打电话(例如):


您可以这样做:

公共函数CountNum(rng作为范围,num)作为长度
尺寸rv为长,c为范围,arr为a
num=CStr(num)
对于每个c In rng.单元格
如果Len(c.值)>0,则
arr=拆分(c.值,“,”)
对于arr中的每个a
如果a=num,则rv=rv+1
下一个
如果结束
下一个c
CountNum=rv
端函数
打电话(例如):

计数分隔字符串出现次数(UDF)

代码
'***********************************************************************
'标题:计数分隔字符串的出现次数
'用途:统计值在分隔部分中出现的次数
'不包含数值的单元格范围。
“投入:
'CountRange:必需。要搜索的单元格的范围。
'CountValue:必需。要搜索的值。变体。
'CountDelimiter:可选。分隔符,用于分隔每个文件的每个部分
'单元格将根据CountValue进行检查。默认值为“,”。
'CompareBinary0Text1:可选。检查将如何进行的方法
"表演。(二进制)-0,即AA。违约
“(文本)-1,即AA=AA=AA。
'All0OnlyOne1:可选。确定是全部(0-默认值)还是仅
'必须找到每个单元格中的第一(1)个事件。
'*************************************************************************
函数CDSO(CountRange作为范围,CountValue作为变量_
可选的CountDelimiter为String=“,”_
可选的CompareBinary0Text1,长度为0_
可选全部0仅限1倍长)尽可能长
Dim rng As Range“当前范围(集合区域的范围)
Dim vntR作为变型范围阵列(基于2D 1)
作为变体的Dim vntC单元阵列(基于1D 0)
Dim vntCell作为“变体”单元变体
Dim i As Long“当前单元格行计数器
Dim j作为“长”当前单元格列计数器
将k调暗为“长”计数范围区域计数器
Dim m As Long“单元阵列元素计数器
作为“长”值计数器的Dim ValCount
Dim strVal作为字符串的值字符串
Dim strCell作为字符串的单元格字符串
'将CountValue转换为字符串(CStr),因为已创建数组
'使用拆分只包含字符串。
'将CountValue写入值字符串。
strVal=CStr(计数值)
'循环通过CountRange的区域集合(范围)。
对于k=1到CountRange.Areas.Count
'检查当前范围是否仅包含一个单元格。
如果CountRange.Areas(k).Cells.Count=1,则
'将当前范围(仅一个单元格)的值写入单元格变量。
vntCell=CountRange.Areas(k)
'转到引用计数器子例程。
GoSub发生中心
其他的
'将当前范围复制到范围数组。
vntR=计数范围。面积(k)
'循环范围数组的行。
对于i=1至UBound(vntR)
'循环范围数组的列。
对于j=1至UBound(vntR,2)
'将范围数组的当前元素的值写入单元格
“变体。
vntCell=vntR(i,j)
'转到引用计数器子例程。
GoSub发生中心
下一个
下一个
如果结束
下一个
'写入值计数器的值以计数字符串出现次数(CDSO)。
CDSO=价值计数
退出功能
“事件计数器
'目的:统计单元格字符串中CountValue出现的次数。
发生中心:
'检查单元格变量是否为数字。
如果是数字(vntCell),则返回
'将单元格变量的值写入转换为字符串到单元格字符串。
strCell=CStr(vntCell)
'检查单元格字符串是否为空(“”)。
如果strCell=“则返回
'按CountDelimiter将单元格字符串拆分为单元格数组。
vntC=Split(strCell,CountDelimiter)
'通过单元格数组的元素循环。
对于m=0至UBound(vntC)
“有时这些价值观包含故意或偶然的
'空格,因此使用修剪将其删除。
'如果要使用vbTextCompare,即AA=AA,AA=AA,
'在公式集中,将CompareBinary0Text1设置为1。
'检查单元格数组中当前元素的值是否为
'等于CountValue。
如果StrComp(Trim(vntC(m)),strVal,CompareBinary0Text1)=0,则
'计算发生次数,即增加值计数器。
ValCount=ValCount+1
'注意:如果每个单元格中只需要第一次出现,
“使用公式中的出口提高效率
'将所有0仅限1设置为1。
'检查All0OnlyOne1是否等于1。
如果All0OnlyOne1=1,则
'停止循环,找到事件。
退出
如果结束
如果结束
下一个
Ret
=countnum(A2:A4,1)