ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: WYS67

[求助] 创建多位数数字多条件求和的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-21 17:29 | 显示全部楼层

1.gif

打开后直接弹出上面的警告。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-21 17:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 WYS67 于 2019-3-21 19:05 编辑

几乎一半的情况下,都需要第四参数指定字节为1进行求和【所有传统型caipiao】,只有对【乐透型caipiao】求和时指定为2。所以最好是设置成2、3、4参数都可以忽略。

TA的精华主题

TA的得分主题

发表于 2019-3-21 21:54 | 显示全部楼层
WYS67 发表于 2019-3-21 17:53
几乎一半的情况下,都需要第四参数指定字节为1进行求和【所有传统型caipiao】,只有对【乐透型caipiao】 ...

已更新。
2、3、4参数都可以忽略,但须站位(不能省略,,,)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-21 22:17 | 显示全部楼层
yjh_27 发表于 2019-3-21 21:54
已更新。
2、3、4参数都可以忽略,但须站位(不能省略,,,)

已测试,除了2、3、4参数都可以忽略,但须占位外,其它都很完美!谢谢老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-21 23:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

老师:什么原因?10楼附件G12:H12输入的是  同样的数组公式 {=SHUZIQH(A12,5,,)  ,为什么显示的计算结果不同?还无法清除公式?甚至无法删除这两列? 1.gif

TA的精华主题

TA的得分主题

发表于 2019-3-22 11:29 | 显示全部楼层
WYS67 发表于 2019-3-21 23:17
老师:什么原因?10楼附件G12:H12输入的是  同样的数组公式 {=SHUZIQH(A12,5,,)  ,为什么显示的计算结果 ...

G12:H12是一组数组公式,不能个别修改(删除)。必须同时选中G12:H12修改(删除)。

同理,在末行有个3行3列的数组公式,造成:甚至无法删除这两列

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-22 11:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yjh_27 发表于 2019-3-22 11:29
G12:H12是一组数组公式,不能个别修改(删除)。必须同时选中G12:H12修改(删除)。

同理,在末行有个 ...

感谢老师指点迷津!

TA的精华主题

TA的得分主题

发表于 2019-11-15 17:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
牛,正在 学习 这方面的知识,自带 函数大数据量运行时 太卡了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-3 16:13 | 显示全部楼层
本帖最后由 WYS67 于 2019-12-3 16:20 编辑

1.gif

多位数数字多条件求和.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组成的数字字符串时,则把当前单元格设置为空白?    这样,结果输出列就不会显示“参数错误”了,要么是求和的结果,要么就是空白。



TA的精华主题

TA的得分主题

发表于 2019-12-3 16:31 | 显示全部楼层
WYS67 发表于 2019-12-3 16:13
老师:由于《举例》A列函数公式的特殊性,造成了A221:A1004里有看不见的字符存在,直接导致B列用 ...

If arr(i, 1) <> "" Then
改为
        If IsNumeric(arr(i, 1)) Then

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 01:33 , Processed in 0.043181 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表