写在开头的话:本系列从第133篇开始的22篇文章,都是翻译改编自fastexcel.wordpress.com的Making your VBA UDFs Efficient系列,可能有点高深晦涩,但确实都是好的VBA用户自定义函数编程细节技巧和经验。对于大多数人来说,你可以略过这些内容,因为我们只需懂得基础的VBA用户自定义函数知识就足够了。对于想深入研究VBA的人来说,还是值得研究和试验的。我刚开始看到这些文章的时候,一是水平有限,看不大懂,也觉得没有什么必要,所以一直收藏着。然而,随着自已研究VBA的深入,不由得佩服老外对VBA研究的深入,此时刚好Excel VBA解读系列又写到自定义函数这里,正好拿出来,边研究并翻译分享给大家。如果对这些内容没有兴趣的朋友,可以略过,免得浪费时间。
还有一个“秘密”就是,也可以在定义的单元格区域名称中使用EVALUATE,因此有一些方法可以在不使用VBA的情况下访问单元格公式中EVALUATE的功能。
可以给一个常量值定义名称,如下图1所示,定义常量VersionNum表示数字1.0。
选择零件号,显示相应的零件图;选择员工姓名,显示该员工相片,等等,都是选择单元格中的值而显示相应的图片的例子,也就是说基于单元格的值查找并显示对应的图片,单元格的值改变,图片也自动改变。效果如下图1所示。
excel已经成为必不可少的数据处理软件,几乎天天在用。python有很多支持操作excel的第三方库,xlwings是其中一个。
在Excel公式栏中,我们可以看到当前单元格中的内容,或者当前单元格中使用的公式,如下图1所示。
于是,我准备把Excel VBA写成一个系列免费教程,撸完这个系列你也是VBA界的黑山老妖了。
本文介绍的自定义函数来源于wellsr.com,以Excel的CELL函数和INFO函数为样板,可直接返回工作表或工作簿的名称或工作簿路径,以及与Excel及其操作环境有关的各种信息。本文对其内容进行了整理并分享于此,希望能够有助于VBA代码的学习,同时留存这个自定义函数以备所需。
Excel有一个有趣且非常有效的技巧叫做隐式交集(Implicit Intersection),允许有效地使用大的命名区域和整列引用。
1. 引用数组,包含一个以上的单元格引用,例如单元格区域、工作表引用和定义的名称。
本次的练习是:给定一个单元格区域,要求使用公式得到该区域中出现重复次数最多的数据的重复次数。如下图1所示,在单元格区域A1:F1中,重复次数最多的数据是“完美Excel”,重复次数是3。
如下图1所示,我们在单元格区域中使用数组公式生成序号,这样,使用者就不能够随意删除其中一个单元格中的序号,只能选中该区域后全部删除。
Excel用户经常发现在公式中使用整列的引用很方便,这样可避免每次添加新数据时都必须调整公式。因此,当编写用户自定义函数时,可能会使用:
Excel数组公式能够做很多令人惊讶的事情。除了在输入完后要按Ctrl+Shift+Enter组合键外,与普通公式一样。本文主要研究使用用户定义函数的数组公式。
本节为《Chapter 1:Why Python for Excel?》的第一部分,简单地讲解了Excel的历史,Excel编程的最佳实践,以及Excel为适应发展而作出的变化。 当你每天花费很多时间
对于大多数人来说,使用Excel来做的工作就是在单元格中输入数据,进行一些格式化制作成报表输出,在这个过程中,可能会使用一些公式,可能会使用图表展现数据,也可能会使用VBA进行一些自动化数据处理工作。
在处理Excel表格的时候,偶尔会碰上这种需要,定位选中单元格区域内的空白单元格,然后让空白的单元格等于它上面的单元格,一般在Excel是这样操作的:
当需要在单元格区域中找到某个值时,可以使用MATCH函数。在单元格中查找特定字符串时,FIND函数和SEARCH函数非常方便。如何知道单元格中是否包含与给定模式匹配的信息?显然,可以使用正则表达式。
在工作表中查找值是很常见的操作,我们可以使用VLOOKUP函数、MATCH函数、INDEX函数等来查找值。当使用VBA代码在大量的数据中进行查找操作时,灵活运用工作表公式,往往能够提高效率。
我们可以在工作表中安排计划,并让通过特殊显示来提醒已经过期的事项和即将到期的事项,以便让我们更好地安排工作。
今天从WPS官方邓华老师那里获得了WPS内测安装包,支持WPS表格的动态数组公式,测试了一轮,还是比较满意,没有像之前跟进Excel365新函数那样,只是部分支持,这一次,基本上已经和Excel365的体验一致。
这是在exceloffthegrid.com中看到的一个案例,一个非常有用的节省时间的宏:在单元格之间分配值。
数组这种数据结构,应该在绝大多数语言都有实现,使用起来直接使用下标就可以获取想要的数据,在编程过程中几乎是必不可少的。
Excel表格中有一个列,里面的单元格内容混杂着英文和中文,现在要把中文都提取出来:
案例:在「单元格B3」输入不同的行号,然后点击「显示答案」按钮,程序就会自动计算右边相应题目的答案,如何实现?
Q:在列A中是一系列日期,我如何操作,使得含有当天日期的单元格显示为红色,距离当天10天内的日期单元格显示为黄色?
在Excel中,借助于Excel公式、条件格式和一点点VBA代码,也能实现高科技题材电影中的数字雨效果。如下图1所示。
文章背景: 工作中,有时需要批量更新单元格内的信息。可以通过正则表达式匹配对应信息,然后再更新成自己想要的内容。
Worksheet.Paste(Excel VBA没有Range.Paste方法)在某种程度上与Range.PasteSpecial方法非常相似。Paste方法的主要目的是将剪贴板包含的内容粘贴到相关工作表上。
在Excel中,基于AND或OR条件从数据集中提取数据是经常要做的事。可以使用下列方法来实现:
在筛选数据时,通常是筛选满足特定条件或者介于两个条件之间的信息,例如基于多个条件的筛选或者筛选两个日期之间的数据。然而,总是会遇到一些特殊情形,例如,单元格中包含有日期和时间,如果单元格中的时间大于指定的时间,就获取该单元格所在行的数据。这就是本文要解决的问题。
因为VBA这个语言其实在很多地方都有,Office每个套件应该都有,我还知道的是CAD也用这个语言。
之前的文章中介绍过这个技巧,这是在mcgimpsey.com中看到的,也辑录于此,供参考。
在《Excel实战技巧15:在工作表中查找图片》中,我们使用名称和INDEX/MATCH函数组合,在工作表中显示与所选择名称相对应的图片。在《Excel实战技巧21:在工作表中查找图片》中,使用名称和OFFSET/COUNTA/MATCH函数来实现相同的效果。在《Excel实战技巧22:在工作表中查找图片(使用VBA代码)》中,使用VBA代码来达到根据名称显示相应图片的效果。在《Excel实战技巧85:从下拉列表中选择并显示相关的图片》中,以更为简单的方式实现的了显示图片的相同效果。本文将在显示图片的同时显示相关的文字说明。
文章背景:在Excel中,公式引用无效单元格时将显示 #REF! 错误。当公式所引用的单元格被删除或被粘贴覆盖时最常发生这种情况。针对这种情况,之前采取过一些措施,比如禁用自动填充功能等(参见文末的延伸阅读)。但这些措施治标不治本,虽然可以防止数据源发生移动,但也带来了不友好的体验(比如无法使用自动填充功能)。
累加器是一个或多个单元格,用于保存输入的数值的总和。它们可以是单个单元格,如果A1=6,并且用户在A1中输入2,则显示的结果为8。或者可以是两个单元格,比如说,在A1中输入的数字会立即与B1中的值相加。
仔细观察图1,会发现我们只有一个图表,并且根据用户选择的选项来更改图表的源数据。因此,假设有4个系列的数据——销售额、成本、利润和顾客数量,我们将添加第五个系列。这将始终显示用户选择的系列的数据,如下图2所示。
很多人无法理解这个函数,我开始也一样。但是学了VBA之后,我发现这尼玛就是个VBA函数,就像SUMPRODUCT函数是一个伪装成普通函数的数组函数一样。
本文介绍的技巧来自于myspreadsheetlab.com,这个技巧很有趣,当鼠标悬停在超链接公式上时会运行使用VBA自定义的函数,如下图1所示。
下面是2020年11月12日发布的一些简单的ExcelVBA问题的答案,是不是和你想的一样。
在《20211202,爱的对称日,Excel也能判断》中,我们使用公式来判断单元格中的内容是否为“回文”,公式稍有点复杂。然而,如果Excel中有一个反转函数,那就简单了。
使用Excel处理数据,经常会在单元格中使用公式引用多个工作簿之间的数据,工作簿以及被引用数据的工作簿关闭后,再打开工作簿的时候,会出现如下提示:
引言:本文学习整理自powerspreadsheets.com,非常清晰透彻地讲解如何使用VBA进行复制粘贴操作。
使用Range.Rows.Count和Range.Columns.Count属性。
在前面的几篇文章中,我们自定义的函数使用定义为Range的参数来从Excel工作表中获取数据,例如:
Q:如下图1所示的数据排列,每组数据都由“月份、分类、字母、数值”组成,但是月份在单独的行,其他的数据分布在各行中且存在重复。
假设在单元格中有一些文本(句子/短语/关键字,等),你想要提取其中的第n个单词,然而Excel并没有SPLIT函数,那就需要编写复杂的数组公式或者使用辅助列或者使用VBA。
在VBA中,我们经常会遇到需要检查某个单元格区域是否为空的情形。我们可以使用下面程序中的代码来检查单元格区域是否为空。
Excle中A列是乱序,B列是人名排序,什么函数公式可以让A列根据B列排序,且一一对应?也就是说,如下图1所示,A列是一种排序(A列中每个单元格中有个人名,这个人名对应B列中的人名),B列一种排列顺序,C列的排列顺序要对应B列中的人名(使A列和B列形成一一对应关系),除了复制粘贴可以用什么函数公式得到呢?
领取专属 10元无门槛券
手把手带您无忧上云