Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VBA中最强大的命令:Evaluate

VBA中最强大的命令:Evaluate

作者头像
fanjy
发布于 2023-09-21 11:42:45
发布于 2023-09-21 11:42:45
99900
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:VBA,Evaluate

可能很少有人注意到Evaluate命令,也很少被使用,然而,它非常强大且有用。

例如,直接在VBA中使用工作表公式,Evaluate就可以做到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub Neato()
 MsgBox Evaluate("SUM(A1:A6)")
End Sub

当然,你可以不使用Evaluate实现同样的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Set Fn = Application.WorksheetFunction
x = Fn.Sum(Range("A1:A10"))

或者,简化为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = Application.Sum(Range("A1:A10"))

但,为什么要这么麻烦呢?

还有,就是引用单元格区域:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Range("A1:A6").Select

可以使用简写括号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[A1:A6].Select

实际上,这个括号就是Evaluate的简写。也就是说:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[A1:A6].Select

等同于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Evaluate("A1:A6").Select

这样,上文中的第一段代码可简化为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MsgBox [SUM(A1:A6)]

这些括号,就像是VBA中的单元格,形不形象?

还有一个“秘密”就是,也可以在定义的单元格区域名称中使用EVALUATE,因此有一些方法可以在不使用VBA的情况下访问单元格公式中EVALUATE的功能。

Evaluate的基本功能如下:

1.将数学表达式字符串转换为值。

2.将一维和二维字符串数组转换为它们的等效数组。

3.能够处理工作表单元格可以处理的任何公式。

真的,它可以做单元格能做的任何事情!它包含工作表单元格的所有功能,而“该单元格”包含在VBA命令中。事实上,它甚至可以做单元格不能做的事:可以返回整个数组。

下面分别是Evaluate的简写和显式用法,展示了如何使用Evaluate返回和赋值数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub test()
 Dim xArray() As Variant
 Dim y As String
 
 '一维数组字符串转换
 xArray = [{1,2,3}]
 Range("A1").Resize(1, UBound(xArray)).Value = xArray
 
 '二维数组字符串转换
 xArray = [{1,2;3,4;5,6}]
 Range("A5").Resize(UBound(xArray, 1), UBound(xArray, 2)).Value = xArray
 
 '使用字符串变量的二维数组转换
 y = "{1,2;3,4;5,6}"
 '必须显式,简写不起作用
 xArray = Evaluate(y)
 Range("A5").Resize(UBound(xArray, 1), UBound(xArray, 2)).Value = xArray
End Sub

在用户窗体中使用Evaluate允许处理公式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'行为类似单元格的用户窗体文本框
'允许一个文本框里包含另一个文本框要用的公式
Private Sub TextBox1_Change()
 On Error Resume Next
 TextBox2.Value = Evaluate(TextBox1.Text)
End Sub
'只需双击即可将公式转换为条目?
'这似乎是用户窗体输入的一个很有用的功能,而且很容易应用。
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 TextBox1.Value = Evaluate(TextBox1.Text)
End Sub

使用Evalute处理自定义函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub EvalUDF()
 MsgBox Evaluate("MyUDF()")
End Sub
Function MyUDF() As String
 MyUDF = "Hi!完美Excel"
End Function

注:本文整理自ozgrid.com论坛,供有兴趣的朋友研究。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-21 06:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
45.9K0
Excel VBA编程
Vba菜鸟教程[通俗易懂]
官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference 代码完成后:工具-vbaproject属性-保护-查看时锁定-密码
全栈程序员站长
2022/09/05
17.3K0
Vba菜鸟教程[通俗易懂]
VBA专题04:Like运算符详解
1.<字符串>为文本字符串或者对包含文本字符串的单元格的引用,是要与<模式>相比较的字符串,数据类型为String型。
fanjy
2019/09/09
2.5K0
VBA专题04:Like运算符详解
VBA基础知识整理[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136348.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
1.8K0
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2K0
VBA转VB.Net VSTO学习记录-3
yhd-VBA转VB.NetVSTO学习记录-3 【目标】想搞个插件 【学习内容】 本次学习内容有VB.net数组、列表、字典 学习它们相关的属性与方法 以下学习在VSTO外接程序中测试通过 【目录】 数据类型 —维数组输出二维数据输出字典输出 读取单元格 读取区域读取一行中A1:J1读取你选中区域 【代码】 【放上代码,方便复制、粘贴学习之用】 '一维数组写入单位元格测试,Ubound上标界,Length长度 Private Sub Button4_Clic
哆哆Excel
2022/10/31
6770
VBA自定义函数:文本转换为日期时获取正确的日期格式
在VBA中处理日期会有些麻烦,当试图将字符串转换为日期时,可能会遇到意想不到的结果,例如:
fanjy
2024/07/05
5380
VBA自定义函数:文本转换为日期时获取正确的日期格式
VBA字典(详解,示例)「建议收藏」
如果对上面水果种类进行计数:countifs,只需要将分类汇总的值改为数值1即可,每出现一次‘+1’
全栈程序员站长
2022/07/22
6.1K1
VBA字典(详解,示例)「建议收藏」
VBA实用小程序79:统计不同值或唯一值的VBA自定义函数
我们说,这组数据有6个不同值:a,b,c,d,e,f;有3个唯一值:c,d,f,因为它们在列表中只出现了1次。
fanjy
2021/07/12
1.8K0
VBA实用小程序79:统计不同值或唯一值的VBA自定义函数
VBA:正则表达式(3) -特殊公式修改
示例:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...。现在需要统计数量总和,如C列所示。例如,单元格B3中,包装明细为100*3+115*1,对应的包装个数就是3+1。
Exploring
2023/09/20
3810
VBA:正则表达式(3) -特殊公式修改
VBA数组用法案例详解
VBA数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。另外,数组在赋值计算效率上面也是非常高的,大家可以自行尝试下。
大师级码师
2022/11/06
2.1K0
VBA操作VBA——提取数字
会使用Excel的人都知道数字和文本是应该分开列来存储的,可是总是会碰上一些人仅仅是把Excel当作制作表格的一个简单工具,至于使用函数进行数据处理是根本不会的!
xyj
2020/07/28
4.3K0
VBA操作VBA——提取数字
VBA与数据库——写个类操作ADO_读取
读取:主要是要读取数据库中的数据,但平时操作数据库还经常会需要读取表名、字段信息,所以这2个功能也做了,就是简单的输出前面得到的TableInfo结构体信息即可:
xyj
2022/04/26
8320
VBA 在 Excel 中的常用操作
设置单元格 Value 里使用 Chr(10) 和 Chr(13),分别表示回车、换行。
mzlogin
2020/04/16
3.8K0
VBA将一行数据分为多行
有个表格,有许多单元格的数据,制作者为了方便,很多数据是写在一行的,类似下面这种:
xyj
2020/07/28
4.6K2
VBA将一行数据分为多行
VBA一键提取广东省工资系统《个人信息采集表》A3版本
所以我费了九N二H的力量,根据不同的内容做出不同的判断提取不同的内容到不同的单元格。(你看表达都这么麻烦,设计一定也不容易)
哆哆Excel
2022/10/31
3250
VBA实战技巧05: 动态调整数组以存储所需数据
数组是一种常用的数据结构,可用来存储一组相同类型的数据,你可以将一个数组变量视为一个迷你的电子表格,通过引用数组中的位置来存储或者获取数据。
fanjy
2020/04/14
3.8K0
VBA实战技巧05: 动态调整数组以存储所需数据
VBA二维表转一维表
工作中经常会碰到这种情况,外部收集来的资料,表格制作者为了排版好看,做成转换前的格式,这种格式看起来方便,但是做数据处理是非常不方便的,需要进行转换后进行数据处理。
xyj
2020/07/28
1.8K0
VBA二维表转一维表
ExcelVBA-多列单元格中有逗号的数据整理
【问题】某天老板传来一个文件,这里有一个数据表,帮我查找一下那个是我们单位的人,他们的职务是什么?
哆哆Excel
2022/10/25
1.5K0
ExcelVBA-多列单元格中有逗号的数据整理
VBA拆分表格
还是接着上一次的例子,分年龄段统计人数工作完成后,你又接到任务需要将总表根据年龄段拆分为多个分表。
xyj
2020/07/28
1.5K0
VBA拆分表格
相关推荐
Excel VBA编程
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验