VBA应用笔记1——split函数+数据+自定函数

1、案例说明:

 (1),需要处理的内容格式如下:

序号 总支出明细
1 餐饮:65.00,加油:1000.00,餐饮:90.00,加油:1000.00,ETC:800.00
2 加油:1000.00,ETC:95.00,ETC:92.00,餐饮:40.00,ETC:28.50,餐饮:20.00,ETC:69.30,餐饮:40.00,停车费:15.00,ETC:102.55,餐饮:20.00,ETC:219.00,ETC:110.00,餐饮:40.00,加油:1000.00,ETC:185.00,加油:1000.00,尿素:224.00,ETC:92.64,餐饮:28.00,保养:40.00,ETC:102.00,加油:1000.00,ETC:123.00,ETC:487.00,餐饮:38.00,加油:1000.00,餐饮:94.00,餐饮:10.00,维修:100.00,加油:1500.00

 (2),处理要求:计算 “ 总支出明细” 列不同项目费用合计,也就是统计每行餐饮费、加油、ETC等格式多少。

2、处理思路:

(1),通过自定义函数,本例中自定义函数名为cal,自定义函数方便实现代码重用。

3、VBA代码:

Function cal(tar As Range, des As Range)
  Dim j
  arr = Split(tar.Value, ",")             'tar为统计单元格
  For j = LBound(arr) To UBound(arr)
    
    If InStr(arr(j), des.Value) <> 0 Then  'des为需要统计的项目,如加油,餐饮,ETC等
    cal = cal + Val(Split(arr(j), ":")(1))
    End If

  Next
End Function

4、其他补充:

(1),为了是函数在使用的时候,显示参数提示,可以通过运行一遍下面的代码来实现。

(2),但是下面的代码只能在通过 “插入函数” 的方式才能显示,通过 “ =” 等号后输入函数名的方式没能体现,琢磨了很长时间,也没能实现该功能,学习到这方面的知识的时候再弄吧。

Sub 添加参数说明()
    Dim argsname As String              '函数名称
    Dim argsdes As String               '函数描述
    Dim argsclass As String             '函数类别
    Dim argsarray(0 To 1) As String     '函数参数描述 数组 个数
    argsname = "cal"
    argsdes = "统计特定项目费用合计"
    argsclass = "自定义测试函数"
    argsarray(0) = "函数第1个参数,被统计的单元格"
    argsarray(1) = "函数第2个参数,统计项目"
    
    Call Application.MacroOptions(Macro:=argsname, Description:=argsdes, Category:=argsclass, ArgumentDescriptions:=argsarray)
End Sub

 

5,案例附件:

案例下载地址:https://files.cnblogs.com/files/li-cz/VBA%E5%AE%9E%E4%BE%8B1%E2%80%94%E2%80%94split%E5%8F%8A%E6%95%B0%E7%BB%84%E5%BA%94%E7%94%A8.rar?t=1657692286

 

posted @ 2022-07-13 15:13  铜豌豆_li  阅读(574)  评论(0)    收藏  举报