|
楼主 |
发表于 2019-12-3 16:13
|
显示全部楼层
本帖最后由 WYS67 于 2019-12-3 16:20 编辑
多位数数字多条件求和.zip
(274.41 KB, 下载次数: 6)
老师:由于《举例》A列函数公式的特殊性,造成了A221:A1004里有看不见的字符存在,直接导致B列用您写的ZFCSUM()代码求和时,公式输入列在B221:B1004之间显示“参数错误”警告!
恳请您修改下面代码,把第一参数【数据区域】中有看不见字符的单元格忽略为空白单元格【由于ZFCSUM是专门用于数字求和的,所以可以把数据区域A列里所有非数字的单元格都忽略为空白单元格,这样结果输出列B221:B1004自然也就显示为空白了!】,不再显示“参数错误”。就像F、J列那样只显示数字结果。
ZFCSUM的代码就是您10楼的代码,只不过把SHUZIQH改成了ZFCSUM--
Function ZFCSUM(s, n1, n2, ParamArray m())
Dim he(), arr()
If IsError(m(0)) Then
ReDim mm(1)
mm(0) = 1
mm(1) = 2
Else
mm = m
End If
ss = s
If IsArray(ss) Then
arr = ss
Else
ReDim arr(1 To 1, 1 To 1)
arr(1, 1) = s
End If
If Application.Version = "11.0" Then '2003版本
N3 = Application.Caller.Rows.Count
m3 = Application.Caller.Columns.Count
Else
gsh = Application.ThisCell.Formula
Do While gsh = Application.ThisCell.Offset(N3, 0).Formula
If Application.ThisCell.Offset(N3, 0).Row = Rows.Count Then Exit Do
N3 = N3 + 1
Loop
Do While gsh = Application.ThisCell.Offset(0, m3).Formula
If Application.ThisCell.Offset(0, m3).Row = Columns.Count Then Exit Do
m3 = m3 + 1
Loop
End If
If N3 > UBound(arr) Then k1 = N3 Else k1 = UBound(arr)
If m3 - 1 > UBound(mm) Then k2 = m3 - 1 Else k2 = UBound(mm)
ReDim he(1 To k1, k2)
If IsError(n1) Then n1 = 1
If IsError(n2) Then
For i = 1 To UBound(arr)
If arr(i, 1) <> "" Then n2 = Len(arr(i, 1)): Exit For
Next
Else
n2 = n2 + n1 - 1
End If
For i = 1 To UBound(arr)
If arr(i, 1) <> "" Then
For k = 0 To UBound(mm)
If n2 > Len(arr(i, 1)) Then
he(i, k) = "参数错误"
Else
For j = n1 To n2 Step mm(k)
he(i, k) = he(i, k) + Val(Mid(arr(i, 1), j, mm(k)))
Next
End If
Next
Else
For k = 0 To UBound(mm)
he(i, k) = ""
Next
End If
Next
For j = k To m3 - 1
For ii = 1 To N3
he(ii, j) = ""
Next ii, j
For ii = i To N3
For j = 0 To m3 - 1
he(ii, j) = ""
Next j, ii
ZFCSUM = he
End Function
是不是需要修改判断--当数据区域的任何单元格里的内容不是0~9组成的数字字符串时,则把当前单元格设置为空白? 这样,结果输出列就不会显示“参数错误”了,要么是求和的结果,要么就是空白。
|
|