各位朋友,你们好。

最近和网友沟通交流Excel问题,好些问题都没法直接实现,因此用了很多自定义函数,也给头条里的朋友写过几个自定义函数(比如颜色计算的函数、提取不重复内容的函数、汉字转拼音的函数……)。


在办公过程中,总需要把复杂的事情简单解决,于是用到了VBA代码。用VBA解决一些手工办起来繁琐重复的事情,又快又准又好。是便捷高效。

今天就和你们分享下Excel的自定义函数。详细内容如下:

1、什么是自定义函数;

2、自定义函数怎么使用;

3、怎样让自定义函数可以嵌套内置函数;

4、怎样设置客可忽略的函数参数;

5、私有与公有属性自定义函数的区别;

6、自定义函数放在模块和工作表中的区别;


一、什么是自定义函数

自定义函数:这也是一种函数,用户根据自己的需求,为完成特定的功能而自己编写的函数代码。有别于Excel自带的函数,所以叫做自定义函数。Excel自带的函数叫做内置函数。

自定义函数的代码结构

Function 函数名称(函数参数)

实现函数功能的代码

End Function

自定义函数的好处:
1、将复杂的问题简单化,碰到相同的,或类似的问题,修改参数就OK了;
2、可以重复使用,不用每用一次都写大段的代码,直接一句函数和参数就可以了;
3、需要修改时,只修改函数内的代码即可,不用再每一个使用的地方都修改;
4、自定义函数可以在工作表中像自带公式一样使用,也可以在窗体过程中调用。


二、自定义函数怎么使用

自定义函数的代码,一般放在VBE编辑器的【模块】中。在模块中设置好代码后,就可以在工作表中直接使用,就像使用Excel内置函数一样(效果见下图)。

自定义函数的使用


三、怎样让自定义函数可以嵌套内置函数

有些时候,我们需要将像使用内置函数一样,进行一些函数的嵌套计算,如何才能在自定义函数中实现与内置函数的嵌套使用呢?我们先看下图:

内置函数嵌套

如动图演示中所示:

1、当函数的第一个参数申明为Range型时,用VLOOKUP函数提取数据后进行字符串提取,会显示错误值。这是由于VLOOKUP函数的结果,是一个具体的值,其类型不是Range,所以结果会出错;

2、让我把函数第一个参数的类型修改为Variant型时,就可以嵌套计算;

3、当我把函数的第一个参数变量类型删除时,也可以正常计算。

4、这里的Variant,是什么意思呢?Variant就是可变的数据类型,可以存放任何数据(不设置变量类型,则默认就是Variant,第三种演示结果);

5、当函数参数类型为Range时,可以与内置函数的OFFSET、INDEX、INDIRECT函数嵌套,因为这几个函数时引用函数,返回的内容是单元格,和Range类型是一样的。

扩展:既然Variant类型是万能的,在实际使用中,在申明变量时,可否就不用申明变量类型呢?

(先透露下,这个话题是我下篇文章的内容,这里只做简单介绍)

解答:在有速度要求和空间限制的情况下不要用variant.,因为variant类型数据占用字符多,所以一般人很少用。.vba默认未定义的数据类型是variant. 有这个默认我就懒得定义数据类型直接用变量这样写代码省时间,但是代码运行会慢,如果你电脑配置足够好,那就不用考虑节省空间的问题。


四、怎样设置可以忽略的函数参数

要设置自定义函数可忽略的参数,可以在参数前面添加【Optional】,这里的Optional就是设置可选参数。写法如下:

Function 函数名称(参数1,Optional 参数2)

实现函数功能的代码

End Function

1、可选参数效果1:

在效果1中,我们设置函数的第二参数为可选参数,不写第二参数,内容就直接合并;设置了第二参数,内容就用连接符全部连接起来。

2、可选参数效果2:

在效果2中,我们设置函数的第二参数默认值,不写第二参数,内容就用默认连接符合并;设置了第二参数,内容就用设置的连接符合并起来。


五、自定义私有与公有函数

Private:定义私有属性,只能在函数所在的模块中使用;

Public:定义公有属性,整个程序都能使用(若未注明Private,则默认是Public)。

注意::

1、以上概念,对SUB过程也是一样的效果;

2、只要自定义函数的代码在模块中,无论是私有还是公有,都不影响在工作表中的使用;

3、所以,这里的私有和公有,仅在于用VBA代码调用函数上的差异。

下面我用一个示例展示下:

图中展示了三个效果:

1、将函数定义为私有函数时,在工作表中可以正常使用;

2、将函数定义为私有函数时,在另一个模块中就无法调用;

3、将函数的属性修改为公有时,在另一个模块中就可以正常使用了。


六、自定义函数放在模块和工作表中的区别

都是在VBE编辑器中,将代码放在模块中,和把代码放在工作表代码中,有什么区别呢?看图:

上图演示了两个效果:

1、当自定义函数代码在模块中时,在工作表中使用正常;

2、当把自定义函数代码放到工作表代码区域中时,在工作表中失效。

所以,我们要使用自定义函数,就需要将自定义函数的代码放在模块中。


今天,关于自定义函数的基础内容,包含了函数代码的写法、使用,怎么样可以让自定义函数嵌套内置函数,怎么样设置自定义函数的可选参数、怎么样设置自定义函数的参数默认值等。希望能对各位朋友有所帮助。


我是上班下班,因为爱好办公软件、喜欢分享。所以来到这里将我的学习心得和踩过的一些坑,和大家聊聊,希望大家学习我成功的经验,避开我踩过的坑。我和你们一起进步。

好了,今天就聊到这里,感谢各位朋友的关注和支持。

如果你喜欢我分享的内容,请点个赞支持下;

如果你觉得我分享的内容对你有帮助,可以关注我;

如果要看我以前分享过的好玩的内容,大家可以去我的主页查看历史文章。

自定义_Excel中的自定义函数(自定义函数的基础内容)相关推荐

  1. java 自定义arraylist_Java 中模仿源码自定义ArrayList

    Java 中模仿源码自定义ArrayList 最近看了下ArrayList的源码,抽空根据ArrayList的底层结构写了一个功能简单无泛型的自定义ArrayLsit,帮助自己更好理解ArrayLis ...

  2. 如何用excel筛选相似内容_Excel中如何将两组数据的相同内容进行快速筛选配对...

    原标题:Excel中如何将两组数据的相同内容进行快速筛选配对 文/郭远明 在工作中,我们时常会遇到这样一种情况:原有数据需要进行更新,同时要原有的名单排序不变,新数据要与原有的名单一一对应.如果是数据 ...

  3. matlab中if语句的用法_Excel中最常用的逻辑函数IF用法介绍

    ​几日随风北海游,回从扬子大江头.臣心一片磁针石,不指南方不肯休.---[宋]文天祥<扬子江> IF函数在我们的实际工作中,用的是非常多的,相信大家对这个函数应该也不陌生,今日就给大家分享 ...

  4. bat判断文本中是否存在一个相同内容比较_Excel中的9个逻辑函数都不掌握,还敢称Excel达人?...

    Excel中的逻辑函数主要用于在公式中对条件进行测试,并根据测试结果返回不同的数值,从而使公式更加智能. 一.TRUE. 功能:返回逻辑值TRUE. 目的:判断两个值是否相等. 方法: 在目标单元格中 ...

  5. 向上取整函数_Excel中平时不用的舍入函数的Floor和Ceiling公式,很实用

    关于数字的舍入,最常用的方式是四舍五入,平时也用的最多,关于四舍五入,我们在Excel里面的公式是Round函数 =ROUND(单元格,保留小数点位数) 举个例子,A列是部分数值,我们使用公式: =R ...

  6. 微博小尾巴自定义名字中的Android,新浪微博自定义来自XX小尾巴怎么改 新浪微博显示来自XX小尾巴设置教程...

    新浪微博小尾巴是验证你手机型号的标志,最近新浪微博更新了能够任意修改小尾巴的功能,那么该如何修改呢?小编将为大家带来修改新浪微博小尾巴的教程,希望能够帮助大家,下面就一起来看看了解一下吧. 新浪微博小 ...

  7. 微信小程序 自定义组件中 triggerEvent() 函数失效的一种情况 (Cannot read property ‘triggerEvent‘ of undefined)

    在网络上并没有搜索到这种情况,这里记录下避免以后的自己和广大码农踩到这个坑 问题描述:在自定义组件中想调用 this.triggerEvent()函数给父组件传参,过程中报错:Cannot read ...

  8. matlab 自定义对象,面向对象:MATLAB的自定义类 [MATLAB]

    这几天刚刚开始学习MATLAB的面向对象编程.以前做的事情都是用MATLAB写一些简单的脚本或者函数,这方面MATLAB成熟的函数和直截了当的矩阵运算方法和语法都很容易上手,方便人专注于算法本身.前几 ...

  9. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

最新文章

  1. 图片上加动图怎么弄_用PS把千张图片拼成心爱的人的样子,只需三步!
  2. Android系统源码编译最重要的一步
  3. 6.package配置相关
  4. 转型中的知不知、能不能、愿不愿
  5. WebGIS中解决使用Lucene进行兴趣点搜索排序的两种思路
  6. protect db by denying DDL operations
  7. 最详细的quartz表达式解释
  8. Python2.7利用xpath爬取韩寒博客(多线程版)
  9. 常用等价无穷小以及泰勒公式
  10. 如何自己动手免费申请软件著作权
  11. 树梅派应用27:通过USB蓝牙适配器连接BLE设备
  12. 学历学位验证查询流程中国执行信息公开网执行人查询结果查询流程
  13. 学前端,学线下班还是丁鹿学堂或者慕课网?
  14. 使用DBeaver连接mysql报Access denied for user ‘test‘@‘%‘ to database
  15. Check Point R81.10 - 下一代防火墙 (NGFW)
  16. 领英精灵和领英助理哪个好,看这一篇就够了
  17. Apache Storm 官方文档 —— Trident API 概述
  18. 2019牛客多校 第七场 B Irreducible Polynomial 多项式因式分解判断
  19. 中南大学计算机学院董蕴仪,共青团中南大学计算机学院第一次代表大会暨学生代表大会顺利举行...
  20. MySQL5.7安装--二进制方式安装

热门文章

  1. Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法
  2. VS Code 终端窗口无法输入命令的解决方案
  3. 在Windows上忽略Git存储库中的目录
  4. win11正式版如何安装安卓app windows11正式版安装安卓app的步骤方法
  5. QObject::startTimer: Timers cannot be started from another thread [使用自定义信号与曹函数来解决在子线程中不能调用QTimer定时器]
  6. 正坐标系及矢量知识,点乘与差乘,旋转
  7. python的实时音频传送_python – 使用Alexa传输音频的最简单示例
  8. Gcc:gcc -o操作
  9. 电子商务的核心是不是计算机技术,电子商务的核心内容是网络营销
  10. python mysql res_python操作mysql(三)查询