VBA 函数参数和结果输出的二三事

想说的都写在批注了,就不多写了。

'带有一个参数的函数
Function CAL(a) As Double
    Select Case a
        Case Is > 100:
            CAL = 100
        Case 55 To 100
            CAL = 55
        Case Else
            CAL = 0
    End Select
End Function

'带1个参数写1个,带2个写2个,多个的话可以选择数组
'函数过程主要是在单元格用,意味着经常一框,不晓得多少个参数,怎么处理?
'用数组作为参数
'经过测试,类似=SUMARRAY(A4:D4)可以运行,但是=SUMARRAY(A4,B4,C4,D4)无法计算

Function SUMARRAY(list) As Double
    '未明确是啥类型就用Variant
    Dim Item As Variant
    SUMARRAY = 0
    For Each Item In list
        '是数字就加总
        If WorksheetFunction.IsNumber(Item) Then
            SUMARRAY = SUMARRAY + Item
        End If
    Next Item
End Function
Sub MakeList()
    Dim nums(1 To 100) As Double
    Dim i As Integer
    For i = 1 To 100
        '随机赋值1-100的值到nums数组的各个元素
        nums(i) = Rnd * 100
    Next i
    MsgBox SUMARRAY(nums)
End Sub

'部分函数带可选参数,可选参数怎么实现呢?
'在参数名前面加上Optional就是可选参数啦!
'假设实现一个返回大小写功能的函数,不写参数全大写,可选参数填了则全小写


Function UPORLOW(cell As Variant, Optional UpperCase As Variant)
    'cell是必须提供的参数,用IsMissing判断是否提供了后面的UpperCse参数
    
    If IsMissing(UpperCase) Then
        UPORLOW = UCase(cell)
    Else
        UPORLOW = LCase(cell)
    End If
        
End Function

'参数传入1.固定数量参数;2.数组;3.可选参数
'问题:怎么输出数组

Function WEEKTOTAL()
    WEEKTOTAL = Array("周一", "周二", "周三", "周四", "周五", "周六", "周日")
    '使用方法
    '1.框柱不能多于数组数量的单元格(多了的会显示错误值,还不能单独删除)
    '2.把=WEEKTOTAL输入到单元格中,然后注意不要就按回车键哈,是按Ctrl+Shift+Enter三个一起
    '3.数组输出的值在单元格只会横着排
End Function

'怎么实现想横着就横着想竖着就竖着的数组排列呢?
'和之前一样,传入一个可选参数,这里简单点,随便穿了参数就当做竖着排列好了
Function WEEKTOTALPLUS(Optional arg As Variant)
    '基本流程就是1.没参数,不管了;有参数,横着排
    Dim weeks As Variant
    '不能Dim weeks(7) as String ,然后weeks =arry(7个值)这样操作
    weeks = Array("周一", "周二", "周三", "周四", "周五", "周六", "周日")
    '还是用IsMissing判断有没有参数
    If IsMissing(arg) Then
        WEEKTOTALPLUS = weeks
    Else
        '有参数了,就变成竖的往下排列,用系统的转置函数
        WEEKTOTALPLUS = Application.Transpose(weeks)
    End If
End Function

'刚才例子SUMARRAY在输入=SUMARRAY(A4:D4)可以运行,但输入=SUMARRAY(A4,B4,C4,D4)无法计算
'不定数量的参数的处理办法:使用数组作为最后一个参数,加上关键字PrarmArray

Function SUMPLUS(ParamArray arglist() As Variant) As Double
    Dim arg As Variant
    For Each arg In arglist
        SUMPLUS = SUMPLUS + arg
    Next arg
    '这个时候输入=SUMARRAY(A4,B4,C4,D4)等等多个参数可以计算
    '但是输入=SUMARRAY(A4:D4)又可以运行,后面完善类似SUM的功能
End Function

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Office百宝箱29.0是著名微软办公软件Office(Microsoft Office of Addins)增强超级大型插件。包括380个菜单功能和200个左右自定义函数,集580个宝贝于一身,但体积小于30MB。当安装Office百宝箱后,分别会在Excel、Word、PowerPoint、Outlook、Publisher、Access、VBA编译器等的主程序界面将产生【万能百宝箱】菜单及相应的扩展功能菜单或函数。总共包括380多个子菜单,并在Excel 2016或者2013中将产生【经典】与【万能百宝箱】功能区,而在其函数向导对话框中也新增200个左右新的Excel函数。Office百宝箱多国语言全家福版,包括Excel万能百宝箱、Word万能百宝箱、PPT百宝箱、Outlook万能百宝箱、Office编程百宝箱、Publisher万能百宝箱、VBA百宝箱、Access百宝箱等。所有功能Office2003--Office2019+繁简体通用,XP至WIN10繁简系统通用。功能适用于Office 2003、2007、2010、2013、2016、2019。支持中英文显示与繁简体操作系统、拥有30多款华丽的皮肤界面。Office百宝箱全家福系列,为中汛软件科技公司(梁瑞春)荣誉出品,现有: Excel万能百宝箱、Word百宝箱、PowerPoint百宝箱、Outlook百宝箱、Publisher百宝箱、Access百宝箱、VBA百宝箱、WPS百宝箱、Office编程百宝箱、银河ERP企业管理平台、银河ERP等企业信息化办公系列产品,欲知更多资讯,敬请登录软件版权作者(Jackey.Liang--梁瑞春) 中汛软件科技官方网站。图片批量尺寸及嵌表格式导图、导入多行列图片具备18项可设置参数,多达80种组合导入方式,满足各行业不同需求的图片导入导出与规范排版。表达式计算精灵让数学函数及复杂公式表达式全自动计算一切变得那么轻巧与高效,且能与EXCEL智能交互操作。工程解密功能可以解除VBA工程不可查看的OFFICE工程文档,解除后重新打开文档可100%准确还原源代码,是VBA开发者的必备利器。采用字典补码查漏纠错技术实现台湾繁体系统中繁简转换与GB2BIG5转换准确率达100%,达到微软同效功能。每款功能千锤百炼。更内置了比Vlookup()函数更强大且好用的VlookupIn()函数。能对VBA宏程式能实现撤销与还原操作,防止鼠标误点功能与误操作。在EXCEL另存DBF功能的基础上还可以轻松实现对所有SQL数据库(*.DBF)文件进行加密或解密操作,防止重要内容不被随意读写操作。全能语音朗读器具备英语学习复读机的功效可重复及延时朗读。存储格朗读机即时响应按回车时朗读指定的或偏移行列的存储格内容。原创批量图片排序功能,誉为“图片排版大师”,有21种样式可选,能批量将工作表中指定存储格范围的图片快速排序并输出到新表中。原创无穷加密与解密功能,能对选定的存储格或文本内容进行军方级加密保护,使其显示只包括英文字母与数字及标点符号的“乱码”。支持XP至WIN10多个操作系统完美兼容,实现无缝隙对接,U盘版用户除了在原有可换机使用的基础上,实现XP/WIN7/WIN8/WIN10通行无阻。批量二维码识别、批量二维码生成、表格数据汇总、全自动检索录入、批量改图片大小、批量导图、批量导入批注、等功能一应俱全。原创Office编程百宝箱,集30多个VBA开发功能,为广大VBA编程爱好者的福音与必备利器。轻松实现一键关机、一键开机、锁机待机等。由全球顶尖级水平微软MVP专家与财会管理信息团队历时多年开发,是与OFFICE用户与爱好者共同努力的结晶,被誉为'全能的办公瑞士军刀'。
Excel VBA与数据库整合应用范例精讲(书及范例源代码) 内容简介   《Excel VBA 数据库整合应用范例精讲》用180个实例介绍了利用Excel VBA来操作数据库(包括Access、SQL Server和FoxPro)的实用方法和技巧。   全书共11章。第1~6章是利用Excel VBA操作Access数据库的实例;第7~8章是利用Excel VBA操作SQL Server数据库和FoxPro数据库的方法和技巧实例;第9~10章是将工作簿当作数据库以及将文本文件当作数据库进行操作的方法和技巧实例。第11章以一个具有较大使用价值的固定资产管理系统为案例,详细介绍Excel VBA开发管理系统的过程。每个实例分析透彻,代码完整,技巧全面,使用得心应手。 目录 第1章 动态创建Access数据库和数据表 实例1-1 利用DAO创建数据库和数据表 实例1-2 利用ADOX创建数据库和数据表 实例1-3 利用SQL语句创建数据库和数据表 实例1-4 在已有的数据库中创建数据表(DAO) 实例1-5 在已有的数据库中创建数据表(ADOX) 实例1-6 在已有的数据库中创建数据表(SQL,Command对象) 实例1-7 在已有的数据库中创建数据表(SQL,Recordset对象) 实例1-8 利用Access对象创建数据库和数据表 实例1-9 利用Access对象在已有的数据库中创建数据表 实例1-10 利用工作表数据创建数据表(ADOX) 实例1-11 利用工作表数据创建数据表(ADO+SQL) 实例1-12 利用工作表数据创建数据表(DAO) 实例1-13 利用已有的数据表创建新数据表(ADO) 实例1-14 利用已有的数据表创建新数据表(DAO) 实例1-15 利用已有的数据表创建新数据表(Access) 第2章 获取Access数据库信息 实例2-1 检查数据表是否存在(ADO) 实例2-2 检查数据表是否存在(ADOX) 实例2-3 检查数据表是否存在(DAO) 实例2-4 检查数据表是否存在(Access) 实例2-5 获取数据库中所有表的名称和类型(ADO) 实例2-6 获取数据库中所有表的名称和类型(ADOX) 实例2-7 获取数据库中所有的表名称(DAO) 实例2-8 获取数据库中所有数据表名称(ADO) 实例2-9 获取数据库中所有数据表名称(ADOX) 实例2-10 获取数据库中所有数据表名称(DAO) 实例2-11 获取数据库中所有数据表名称(Access) 实例2-12 检查某字段是否存在(ADO) 实例2-13 检查某字段是否存在(ADOX) 实例2-14 检查某字段是否存在(DAO) 实例2-15 检查某字段是否存在(Access) 实例2-16 获取数据库中某数据表的所有字段信息(ADO) 实例2-17 获取数据库中某数据表的所有字段信息(ADOX) 实例2-18 获取数据库中某数据表的所有字段信息(DAO) 实例2-19 获取数据库中某数据表的所有字段信息(Access) 实例2-20 获取数据库的所有查询信息(ADOX) 实例2-21 获取数据库的所有查询信息(DAO) 实例2-22 获取数据库的模式信息(OpenSchema) 实例2-23 获取表的创建日期和最后更新日期(ADOX) 实例2-24 获取表的创建日期和最后更新日期(DAO) 第3章 查询获取Access数据库记录数据 实例3-1 将数据库记录数据全部导入到Excel工作表(ADO,之一) 实例3-2 将数据库记录数据全部导入到Excel工作表(ADO,之二) 实例3-3 将数据库记录数据全部导入到Excel工作表(ADO,之三) 实例3-4 将数据库记录数据全部导入到Excel工作表(DAO,之一) 实例3-5 将数据库记录数据全部导入到Excel工作表(DAO,之二) 实例3-6 将数据库记录数据全部导入到Excel工作表(QueryTable集合) 实例3-7 将数据库的某些字段的记录数据导入到Excel工作表(ADO) 实例3-8 将数据库的某些字段记录数据导入到Excel工作表(DAO) 实例3-9 查询前面的若干条记录(全部字段)(TOP) 实例3-10 查询前面的若干条记录(部分字段)(TOP) 实例3-11 查询不重复的字段记录(DISTINCT) 实例3-12 利用Like运算符进行模糊查询 实例3-13 查询某一区间内的记录(BETWEEN) 实例3-14 查询存在于某个集合里面的记录(IN) 实例3-15 将查询结果进行排序(ORDER BY) 实例3-16 进行复杂条件的查询(WHERE) 实例3-17 利用合计函数进行查询(查询最大值和最小值) 实例3-18 利用合计函数进行查询(查询合计值和平均值) 实例3-19 将一个查询结果作为查询条件进行查询 实例3-20 将查询结果进行分组(GROUP BY) 实例3-21 将查询结果进行分组(HAVING) 实例3-22 通过计算列进行查询 实例3-23 使用IS NULL运算符进行查询 实例3-24 使用COUNT函数进行查询 实例3-25 使用FIRST函数与LAST函数查询第一条记录和最后一条记录的字段 实例3-26 使用Parameters参数动态查询记录(DAO):指定单个参数 实例3-27 使用Parameters参数动态查询记录(DAO):指定多个参数 实例3-28 使用Parameters参数动态查询记录(ADO):指定单个参数 实例3-29 使用Parameters参数动态查询记录(ADO):指定多个参数 实例3-30 使用别名查询数据库 实例3-31 将查询结果作为窗体控件的源数据 实例3-32 通过窗体控件查询浏览数据库记录 实例3-33 多表查询(WHERE连接) 实例3-34 多表查询(内连接INNER JOINT) 实例3-35 多表查询(左外连接LEFT OUTER JOINT) 实例3-36 多表查询(右外连接RIGHT OUTER JOINT) 实例3-37 多表查询(子查询WHERE,ANY,SOME) 实例3-38 多表查询(子查询EXISTS,NOT EXISTS) 实例3-39 从两个数据表中查询出都存在的记录 实例3-40 从两个数据表中查询出只存在于某个数据表的记录 实例3-41 将查询结果生成一个数据表 实例3-42 将查询结果保存为一个XML文件 实例3-43 利用工作表实现记录的分页显示 实例3-44 利用窗体实现记录的分页显示 第4章 编辑Access数据库数据 实例4-1 添加新记录(ADO+AddNew) 实例4-2 添加新记录(ADO+SQL) 实例4-3 添加新记录(DAO+AddNew) 实例4-4 添加新记录(DAO+SQL) 实例4-5 添加新记录(Access+SQL) 实例4-6 修改更新特定记录(ADO+SQL) 实例4-7 修改更新特定记录(DAO+SQL) 实例4-8 修改更新特定记录(Access+SQL) 实例4-9 修改更新全部记录(ADO+SQL) 实例4-10 修改更新全部记录(DAO+SQL) 实例4-11 修改更新全部记录(Access+SQL) 实例4-12 删除特定记录(ADO+SQL) 实例4-13 删除特定记录(DAO+SQL) 实例4-14 删除特定记录(Access+SQL) 实例4-15 删除全部记录(ADO+SQL) 实例4-16 删除全部记录(DAO+SQL) 实例4-17 删除全部记录(Access+SQL) 实例4-18 通过窗体编辑记录 第5章 将Excel工作表数据导入到Access数据库 实例5-1 将整个工作表数据都保存为新Access数据库(Access) 实例5-2 将工作表的某些区域数据保存为新Access数据库(Access) 实例5-3 将工作簿的所有工作表数据分别保存为不同的数据表(Access) 实例5-4 将多个工作簿的某个工作表数据汇总为新Access数据库(Access) 实例5-5 将多个工作簿的某个工作表数据保存为不同的数据表(Access) 实例5-6 将工作表数据保存到已有的Access数据库(循环方式)(ADO) 实例5-7 将工作表数据保存到已有的Access数据库(循环方式)(DAO) 实例5-8 将工作表数据保存到已有的Access数据库(数组方式)(ADO) 实例5-9 将工作表数据保存到已有的Access数据库(数组方式)(DAO) 实例5-10 将工作簿的所有工作表数据分别保存为不同的数据表(ADO) 实例5-11 将工作簿的所有工作表数据分别保存为不同的数据表(DAO) 第6章 操作Access数据表 实例6-1 打开数据库和数据表(GetObject函数) 实例6-2 打开数据库和数据表(CreateObject函数) 实例6-3 删除数据表(ADO) 实例6-4 删除数据表(ADOX) 实例6-5 删除数据表(DAO+DELETE) 实例6-6 删除数据表(DAO+SQL) 实例6-7 删除数据表(Access) 实例6-8 为数据表增加字段(ADO) 实例6-9 为数据表增加字段(ADOX) 实例6-10 为数据表增加字段(DAO) 实例6-11 为数据表增加字段(Access) 实例6-12 删除字段(ADO) 实例6-13 删除字段(ADOX) 实例6-14 删除字段(DAO) 实例6-15 删除字段(Access) 实例6-16 改变字段的类型(ADO) 实例6-17 改变字段的类型(DAO) 实例6-18 改变字段的类型(Access) 实例6-19 改变字段的长度(ADO) 实例6-20 改变字段的长度(DAO) 实例6-21 改变字段的长度(Access) 实例6-22 重命名数据表(Access) 实例6-23 复制数据表(Access) 实例6-24 复制数据表(ADO) 实例6-25 复制数据表(DAO) 实例6-26 通过窗体维护数据库 第7章 操作SQL Server数据库 实例7-1 判断SQL Server数据库是否存在(ADO) 实例7-2 检查数据表是否存在(ADOX) 实例7-3 创建新的SQL Server数据库和数据表(ADO) 实例7-4 在已有的SQL Server数据库中创建数据表(ADO) 实例7-5 从SQL Server数据库服务器中删除数据库(ADO) 实例7-6 从SQL Server数据库中删除数据表(ADO) 实例7-7 将SQL Server数据库中的数据导入到Excel工作表(ADO) 实例7-8 将SQL Server数据库中的数据导入到Excel工作表(DAO) 实例7-9 查询获取SQL Server数据库的数据(ADO) 实例7-10 查询获取SQL Server数据库的数据(DAO) 实例7-11 将工作表数据导入到SQL Server数据库(ADO) 实例7-12 向SQL Server数据库中添加记录的一般方法 实例7-13 将SQL Server数据库转换为Access数据库 实例7-14 将Access数据库转换为SQL Server数据库 第8章 操作FoxPro数据库 实例8-1 将FoxPro数据库全部数据导入到Excel工作表 实例8-2 查询获取FoxPro数据库数据 实例8-3 将Excel工作表数据保存到FoxPro数据库 实例8-4 判断FoxPro数据库的字段是否存在 实例8-5 获取FoxPro数据库的字段信息 第9章 将Excel工作簿当作数据库来操作 实例9-1 从工作簿的某个工作表中查询获取数据(ADO) 实例9-2 从工作簿的全部工作表中查询获取数据(ADO) 实例9-3 利用DAO从工作表中查询数据 实例9-4 查询其他工作簿的数据(ADO) 实例9-5 获取其他工作簿中的工作表名称清单(ADOX) 实例9-6 利用ADO对工作表数据进行多重排序 实例9-7 利用ADO按照字符的长度对数据进行排序 实例9-8 比较两张表,将两个表中相同的行数据抓取出来 实例9-9 比较两张表,将只存在于某个表中的行数据抓取出来 实例9-10 删除工作表数据区域内的所有空行 第10章 将文本文件当作数据库来操作 实例10-1 利用ADO导入文本文件的全部内容 实例10-2 利用DAO导入文本文件的全部内容 实例10-3 利用ADO导入文本文件的部分内容 实例10-4 利用DAO导入文本文件的部分内容 实例10-5 利用ADO获取文本文件的行数和列数 实例10-6 利用ADO将超过65536行的文本文件数据导入到Excel工作表 实例10-7 将工作表全部数据保存为文本文件(SaveAs) 实例10-8 将工作表全部数据保存为文本文件(循环) 实例10-9 将数据库数据导出为文本文件 实例10-10 将文本文件保存为Access数据库(Access) 实例10-11 将文本文件保存为Access数据库(ADO+ADOX) 第11章 Excel VBA开发数据库管理系统 11.1 固定资产管理系统的总体设计 11.1.1 固定资产管理系统功能模块 11.1.2 固定资产管理系统数据库和数据表的设计 11.1.3 设计系统工作簿 11.1.4 设计系统的自定义菜单 11.1.5 引用对象库 11.2 系统管理模块设计 11.2.1 用户名和密码的保存 11.2.2 “用户登录”窗口结构设计 11.2.3 “用户登录”窗体程序代码设计 11.2.4 “修改用户名”窗体结构设计 11.2.5 “修改用户名”窗体的程序代码设计 11.2.6 “修改密码”窗体结构设计 11.2.7 “修改密码”窗体的程序代码设计 11.3 基础资料管理模块设计 11.4 固定资产日常管理模块设计 11.4.1 固定资产日常管理窗体的结构设计 11.4.2 固定资产日常管理窗体的程序代码设计 11.4.3 “固定资产查询”窗体的结构设计 11.4.4 “固定资产查询窗体”的程序代码设计 11.4.5 固定资产日常管理模块的应用 11.5 报表输出模块设计 11.5.1 固定资产折旧计算方法 11.5.2 生成固定资产卡片子模块的设计 11.5.3 生成统计报表子模块的设计 11.5.4 生成固定资产折旧表子模块的设计 11.5.5 编制折旧费用分配表子模块的设计 11.6 系统菜单转换模块的设计 11.6.1 恢复Excel系统菜单 11.6.2 恢复固定资产管理系统自定义菜单 11.7 为工作簿指定Open和BeforeClose件 11.7.1 为工作簿指定Open件 11.7.2 为工作簿指定BeforeClose

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值