VBA|输入公式和使用函数
![](https://timgmb02.bdimg.com/timg?searchbox_feed&sec=0&di=064c666adc64040f19a7d64bb0ad6417&src=http%3A%2F%2Ftimg01.bdimg.com%2Ftimg%3Fpa%26imgtype%3D3%26sec%3D1439619614%26di%3D2adcddda29ec3f3fe91f9c6597f6e2b8%26quality%3D90%26size%3Db870_10000%26src%3Dhttp%3A%2F%2Fbos.nj.bpc.baidu.com%2Fv1%2Fmediaspot%2Fc1c38a9f1bf4dc6f2668035ed3cb3e42.png)
墨指含香
1 VBA在单元格中输入公式
在公式中一般会出现对单元格地址的引用,引用的方式有绝对引用(A1方式)和相对引用(R1C1)方式,同样的,在用VBA输入公式时,也会有两种方式。
1.1 输入A1格式的公式
向单元格输入公式,实际上就是输入公式的字符串。这时采用Range的value属性或Formula属性均可。
.Range("E11").Formula = "=sum(E2:E10)"
1.2 输入R1C1公式
使用R1C1格式向单元格输入公式,实际上是录制宏的方式。是一种地址相对引用的方式,这里的相对引用的基准地址就是公式所在的地址, 以此地址为基准,偏移行R和列C得到相对引用位置。有些人可能喜欢这种方式,不过这种方式不像A1方式那样直观和容易理解。
(如果不是很熟悉VBA的语法格式,可以采取录制宏的方式去得到代码;如果觉得R1C1格式不习惯,可以在在Excel中设置公式的引用方式为A1(在Excel选项的公式项中设置),输入公式后再复制到VBA代码中。)
.Range("G11").FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)";
[]中的数据代表单元格相对于当前单元格的行列偏移。
1.3 输入数组公式
向单元格或单元格区域输入数组公式,需要使用FormulaArray属性。
Range("E1:E11")FormulaArray = "=C2:C10*D2:D10"
2 使用函数
2.1 VBA引用Excel内置函数
.Range("A16") = "=find(""."",A13,1)"
.Range("A18") = Application.WorksheetFunction.Find(".", fname, 1)
(在VBE的代码窗口中输入Application.WorksheetFunction.可以得到引用Excel内置函数的提示;)
2.2 VBA引用VBA内置函数
.Range("A14") = InStr(ActiveWorkbook.Name, ".")
(在VBE的代码窗口中输入VBA.,可以得到内置函数的提示;)
2.3 自定义函数
函数过程的标志以Function开头,定义好以后,可以像调用Excel已定义的函数一样通过等于号去使用它。
如:
Function 及格率(cell As Range)
及格率=WorksheetFunction.CountIf(cell, ">=60") / WorksheetFunction.CountIf(cell, ">0")
及格率=Format(及格率, "0.00%")
End Function
自定义函数可以必须有返回值,所以有函数体中必须至少被赋值一次,也因此在Function后跟数据类型定义;
Function过程通常三种方式调用:
(1)在工作表中通过公式调用:像内部函数一样在工作表中使用,也可以与其它函数嵌套。使用方法如下:
公式→插入函数→类别:用户定义→选择函数;
(2)在VBA代码中被其它过程调用。
(3)递归:Function过程和Sub一样可以实现递归。如果不是刻意地、有计划地进入递归状态,可以会造成资源耗尽或者溢出堆栈空间。例如下例函数的调用:
在VBA语言中,也有预定义一些函数,与Excel预定义的相同功能的函数有细微区别)。
3 综合实例
有如下工作表:
运行以下VBA:
Sub formulaTest()
With ActiveWorkbook.Sheets("使用公式和函数")
For i = 2 To 10
.Range("E" & i).Value = "=sum(A" & i & ":D" & i & "2)"
Next
.Range("E11").Formula = "=sum(E2:E10)"
.Range("G11").FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)"
.Range("G2:G10").FormulaArray = "=E2:E10*F2:F10"
.Range("A13") = ActiveWorkbook.Name
Dim fname As String
fname = Range("A13").Value
.Range("A14") = InStr(ActiveWorkbook.Name, ".")
.Range("A15") = InStr([A13], ".")
.Range("A16") = "=find(""."",A13,1)"
.Range("A17") = InStr(fname, ".")
.Range("A18") = Application.WorksheetFunction.Find(".", fname, 1)
.Range("A19") = Application.WorksheetFunction.Find(".", [A13], 1)
'[A13]相当于range("A13")
End With
'Instr([start,]string1,string2[,compare])
End Sub
效果如下:
对应的公式如下:
-End-
VBA|输入公式和使用函数相关推荐
- html输入公式得到混合运算结果,excel表格如何用公式计算加减乘除混合运算-excel乘法如何计算,excel函数怎么计算乘法...
Excel支持数学中的四则运算,直接在目标单元格写相应的公式即可.例百如求A1减B1的差,在C1单元格可输入:=A1-B1 需注意: Excel里面任何公式(包括数学四则运算)都是需要以等号度开头. ...
- Excel 2010 VBA 入门 028 向单元格输入公式
目录 示例: 利用Formula属性给单元格输入公式 Formula属性和Value属性的联系与区别 利用FormulaR1C1属性给单元格输入公式 R1C1引用样式的规则 (1)"绝对引用 ...
- VBA写入公式(2):日期公式集
Sub 日期公式集()'先选择数字所在的一个单元格,在选择大写金额保存的一个单元格.'&两边无空格是公式上的连接符,&两边有空格是vba上的连接符.'带有双引号的外面必须由两重双引号, ...
- VBA写入公式(3):身份证公式集
提取身份证信息: 1.出生日期: 2.性别: 3.年龄(周岁): 4.生肖: 5.星座: 6.省份简称: 7.省份全称: 8.退休日期(男60退休,女50退休): 9.用星号隐藏: 31.退休日期(男 ...
- excel输入公式显示公式_在Excel 2013中使用FORMULATEXT显示公式
excel输入公式显示公式 There is a new function in Excel 2013 – FORMULATEXT – that lets you show the text from ...
- cad用计算机怎么计算坐标,CAD坐标里能输入公式吗?
前几天有网友问在输入坐标或长度的时候是否能输入公式,比如20/3或7*8这样简单的算式.cad虽然在定位点或长度时不能直接输入算式,但利用计算器功能不仅可以输入数字的算式,还可以输入点之前的算式,点可 ...
- excel如何输入公式的技巧
第一,excel输入公式的注意事项 excel表格中如何输入公式呢? excel输入公式需要注意下面三点: 第一,excel公式以=开始,以enter键输入结束. excel公式以等号 (=) 开始. ...
- 计算机应用公式求和,Excel函数教程:与求和有关的函数
Excel函数教程:与求和有关的函数 SUM函数是Excel中使用最多的函数,利用它进行求和运算可以忽略存有文本.空格等数据的单元格,语法简单.使用方便.相信这也是大家最先学会使用的Excel函数之一 ...
- 计算机counta函数怎么用,Excel函数公式:Counta函数的多功能应用~
针对" Excel函数公式:Counta函数的多功能应用~ "的问题,下面由IT产品经理-陆亦晓为您解答: Counta函数是统计函数,应用好的话,有非常多实用的技巧.今天就给大家 ...
最新文章
- sangerbox平台使用(二)差异分析
- 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理
- 福建师范大学计算机组成原理期末试卷,福建师范大学2020年8月课程考试《计算机组成原理》作业考核试题...
- codeforce 1311 C. Perform the Combo 前缀和
- 第9步 spring 配置 springmvc配置
- ODP.NET数据访问
- java购买同一件商品时加锁_java中CAS的ABA问题思考和整理(不看后悔系列)
- 瞥一瞥AI,撩一撩算法
- 近期团队博客的摘要 5
- ReSharper卸载后Visual Studio的快捷键和智能提示消失
- 关于信息化的全球进程的思考
- vue移动端实现word在线预览
- 使用网络协议分析仪Wireshark
- unity3D 没有影子
- 实变函数与泛函分析课本pdf_免费推荐几本实变函数和泛函分析的书
- Unity 特效 之 武器拖尾效果
- WebSocket长连接因为网络波动而导致客户端的“假离线”---问题发现、分析到解决
- 2022-2028年全球与中国压电薄膜传感器行业发展趋势及投资战略分析
- 浏览器怎么录制网页视频?3种网页视频录制方法
- truffle init/unbox 中遇到的许多错误以及解决
热门文章
- mysql如何新建数据库
- Http会话保持机制:Cookie、Session和Token
- TIPTOP-IPAD实现车间数据联通交互
- 汽车厂商的摘星指南:我们能从如祺出行身上学到什么?
- 来CSDN两年了,发现一些CSDN网页的BUG
- linux串口返回条件,c – Linux – 串口读取返回EAGAIN
- SpringMVC:@RequestMapping放在类上面和设置请求方式和请求参数(动力)
- java 汉明距离_算法:hamming 海明距离(汉明距离):Java实现
- java 颜色 16进制转换_Java中Color和16进制字符串互相转换的方法
- linux怎么看一个端口是否可用,LINUX中查看某个端口是否被占用的方法