【原创】VBA学习笔记(18) VBA的自定义函数 / 过程,到底能不能改变EXCEL单元格内容?
目录
一 自定义函数
1.1 什么是EXCEL 的自定义函数
1.2 明确概念: 函数错误 Vs 函数返回值错误
二 自定义函数详情总结
2.1 自定义函数总结
2.2 自定义函数问题1:自定义函数命名有玄机,可能造成问题
2.3 自定义函数问题2: 数据类型要匹配,否则可能返回错误
2.4 自定义函数问题3:自定义函数不一定有返回值
2.5 自定义函数问题4:自定义函数不能改变EXCEL的单元格里的值?
三 过程是可以的?
3.1 function不能的,过程可以做哪些?
3.2 function的可以的,sub哪些不可以?
四 原因呢?
五 例外呢
参考的文档 和继续学习
一 自定义函数
1.1 什么是EXCEL 的自定义函数
- VBA里用户自己写了一些函数,这些非 EXCEL 和 VBA 内置的函数,也可以在EXCEL直接使用
- VBA的函数在 EXCEL里如何使用?
- 单元格里输入 = 自定义函数名 即可
1.2 明确概念: 函数错误 Vs 函数返回值错误
- 函数错误:是 语法错误,允许错误,逻辑错误等等
- 函数返回值错误:是 函数调用后,返回值报错了。(不一定是函数本身的错误)
二 自定义函数详情总结
2.1 自定义函数总结
- 1---自定义函数的命名需要注意,有时候,自定义函数不正确是因为 函数命名 有问题
- 2---自定义函数在excel里使用,最好有返回值!
- 没有的话也可以,会返回默认值,如0
- 3---自定义函数,在excel里使用,要注意数据类型是否有问题,比如要求是int的函数,无法处理字符串!
- (exce l或 VBA的内置函数也一样,比如sum 也无法处理 字符串,sum("a") 也会报错)
- 4---自定义函数
2.2 自定义函数问题1:自定义函数命名有玄机,可能造成问题
- 下面2个自定义函数,就函数名不同
- 推测原因是:函数名冲突
- 实测:2个字母的很容易出错,函数名长点比如加个test,或者用中文就没问题
- 实测在EXCEL里输入
- =SUM2(A1,B1) 返回值会报错,怀疑和 系统内置的函数名有些冲突 sum2?
- =mysum2(A1,B1)

Function sum2(a As Integer, b As Integer) '怀疑函数名不能用
sum2 = a + b
End FunctionFunction mysum2(a As Integer, b As Integer)
'Dim a As Integer
'Dim b As Integer
mysum2 = a + b
End Function
2.3 自定义函数问题2: 数据类型要匹配,否则可能返回错误
- 自定义函数,也要注意,处理的数据的数据类型,如果不合适可能报错
- 这一点和EXCEL的内置函数一样
- 虽然sum之类的函数无法处理string
- 但string 就可以把 5这样的 integer当做字符串处理没问题

Function merge1(m As String, n As String)
merge1 = m & n
End FunctionFunction cube1(a)
cube1 = a * a * a
End Function
2.4 自定义函数问题3:自定义函数不一定有返回值
- 自定义函数里没定义 function_name= 赋值,返回,就会返回空值,可以试1个啥也不做的函数
- 相当于在一个EXCEL 的单元格里引用 自定义函数,因为自定义函数没有返回值,所以单元格的值就显示 #n/a #value
- 下面这个是因为试图改变单元格的值引起的报错
Function mysum1()
mysum1 = Cells(1, 1).Value + Cells(1, 2).Value
End FunctionFunction mysum3() '函数本身在VBA里OK,但这个当自定义函数使用,函数本事没事,但返回值会报错
Cells(10, 1).Value = Cells(1, 1).Value + Cells(1, 2).Value
End Function

Function mysum4() '改变单元格的值,会返回报错
Cells(10, 1).Value = 100
End FunctionFunction mysum5() '没返回值,不会返回报错,但是会返回0
End Function
用function 只干改变EXCEL单元格的值也不行
- 可能是没有函数返回值引起的问题?NO
- 还是因为改变EXCEL的单元格的值引起的
- 怀疑是因为cells()的语法,是在VBA内合法,在EXCEL内并没有cells()这样的写法导致?
Function mysum4() '这样也会返回错误
Cells(10, 1).Value = 100
End Function
2.5 自定义函数问题4:自定义函数不能改变EXCEL的单元格里的值?
- 自定义函数,在EXCEL运行也可以改变excel里的单元格的值啊?可以吗?--不行
- 怀疑是因为cells()的语法,是在VBA内合法,在EXCEL内并没有cells()这样的写法导致?
Function mysum3()
mysum3 = Cells(1, 1).Value + Cells(1, 2).Value
'Cells(10, 1).Value = 100 '这句如果不注释掉,带上就返回错误,真TMD
Rem "function可以改变EXCEL的单元值?--现在测试还是不能啊!!!"End Function
三 过程是可以的?
3.1 function不能的,过程可以做哪些?
- 过程可以改变EXCEL的单元格的值?--可以
- 而且是需要点击运行的
3.2 function的可以的,sub哪些不可以?
- 过程不能有返回值,
- sub不能在excel里当自定义函数只有使用,只能 点击运行等
四 原因呢?
但空的可以增加,删除?增删改不能改? 但也能函数处理
这个是为啥?
EXCEL 数据 和VBA代码 隔开安全?
五 例外呢
看不懂的牛逼帖子
[推荐]谁说自定义函数不能修改其它单元格的值-Excel VBA程序开发-ExcelHome技术论坛 -
参考的文档 和继续学习
VBA不能修改已写内容,可以写入单元格_百度知道
自定义函数中如何改变单元格的值?-Excel VBA程序开发-ExcelHome技术论坛 -
这2个需要学习
他山之石——VBA自定义函数_预见未来to50的博客-CSDN博客
[推荐]谁说自定义函数不能修改其它单元格的值-Excel VBA程序开发-ExcelHome技术论坛 -
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
