
VBA
taller_2000
不积跬步,无以至千里;不积小流,无以成江海
展开
-
拷贝多个Excel单元格区域为图片并粘贴到Word
Excel工作表Sheet1中有两个报表,相应单元格区域分别定义名称为`Report1`和`Report2`,如下图所示。原创 2025-05-05 08:24:13 · 514 阅读 · 0 评论 -
VBA实现后入先出(LIFO)库存统计
先入先出(FIFO)比较容易理解,买入早的优先卖出。与之对应的是后人先出(LIFO),就是优先卖出最近买入的,例如:第8行卖出2K,当天还没有买入记录,只能找前一天的买入记录(即第7行),此示例中恰巧二者出入平衡,如果第7行买入数据不足,那么继续向前找(假设还有可用库存)。这只是一个最简单的粗略介绍,如果读者需要更深入了解LIFO的相关知识,请自行网络搜索。原创 2025-05-05 08:19:03 · 716 阅读 · 0 评论 -
VBA快速合并多列单元格
实例需求:工作表中第3行到第5行有如下图所示的数据表,为了方便展示,隐藏了部分列,实际数据为从C列到DO列。现需要合并第3行和第4行相同内容的单元格,如第10行到第12行所示。原创 2025-05-02 17:43:23 · 547 阅读 · 0 评论 -
使用多个VBA字典对象快速整理BOM层级
实例需求:系统中导出的BOM清单如下图中左侧(A列和B列)所示,现在需要整理为右侧所示的BOM节点层级表(D列和E列)。原创 2025-05-02 17:34:24 · 521 阅读 · 0 评论 -
使用VBA快速创建留白的图片填充矩形框
实例需求:在活动工作表中插入矩形框,然后填充德国国旗(国旗图片来源:https://upload.wikimedia.org/wikipedia/en/b/ba/Flag_of_Germany.svg),国旗周边留白。第20行代码在【立即窗口】中输出活动工作表中的Shape对象的个数。第3~5行代码删除活动工作表中的Shape对象。第16行代码调整填充图片剪裁宽度。第17行代码调整填充图片剪裁高度。第11行代码在矩形框中填充图片。第13行代码获取图片的宽度。第14行代码获取图片的高度。原创 2025-04-29 11:40:08 · 262 阅读 · 0 评论 -
判断用户选择的Excel单元格区域是否跨页?
VBA应用程序开发过程中,经常需要处理用户选中的单元格区域,有的应用场景中,需要限制用户选中区域位于同一页中(以打印预览显示的分页划分),但是VBA对象模型中并没有提供相应的接口,用于快速查询单元格位于哪个打印页面中,那么只能自己动手丰衣足食了。第8行代码获取行分页符之下的单元格,例如我的电脑打开示例文件,其第一个分页符位于54行和55行之间(各位读者系统默认打印机的设置将影响分页符的位置,可能与我的并不相同),那么HPB.Location返回值为A55。第9行代码获取行分页符之上的单元格。原创 2025-04-29 11:36:40 · 400 阅读 · 0 评论 -
VBA快速创建分列对齐的文本框
通常实现思路是,在同一行两列内容之间填充空格,达到如图效果,但是使用这种对齐方法,其弊端和在Word中使用空格调整首行缩进一样,由于多数字体都不是等宽字体,也就是数字1宽度通常小于数字2(英文字母字符存在同样的问题),那么通过统计已有数据字符个数,进而确定填充空格的数量也就是不可靠,最终的效果有时可以对齐,有时无法对齐。下面示例代码将使用更精准的方法来实现上图的效果。原创 2025-04-28 09:23:57 · 254 阅读 · 0 评论 -
VBA快速创建Excel中数据模型的数据连接
如果PowerPivot是基于Excel数据模型的,那么将需要使用VBA创建数据连接,并添加到数据模型中,但是这个过程并不像创建普通数据透视表的数据连接那么简单,需要一些小技巧。原创 2025-04-28 09:22:02 · 463 阅读 · 0 评论 -
VBA快速合并不规范的数据表
实例需求:数据表如下图所示,表中数据逐渐增加,导致同一个姓名的相关数据不连续,每行数据中的内容数量不同,可能出现在任意数据列。现在需要将数据整理为如下格式,对于某个姓名,同一列如果存在多个数据,那么使用逗号作为分隔符,如下图所示。原创 2025-03-11 12:03:22 · 374 阅读 · 0 评论 -
VBA Dir查找文件按指定规则排序
实例需求:C:\Temp目录中的文件如下所示,各位同学肯定知道在VBA中使用`Dir`可以查找文件,其顺序就按照文件名称升序排列,但是此处需要按照指定顺序处理文件,对于每个`Tagx`,需要先处理`Tagx_Before`,然后再处理`Tagx_After`,那么就需要使用自定义排序来处理文件列表。原创 2025-03-11 12:01:04 · 308 阅读 · 0 评论 -
快速定位Word文档中特殊符号之间的文本(2/2)
实例需求:Word文档如下图中左侧所示,现需要修改手工换行符和段落符之间文字的字体为蓝色,如右图所示,注意示例文档中有两个文本框,并且第二个文本框中包含表格。- 在Word中使用【Shift+Enter】输入手工换行符,也称为软回车,其ASCII值为11,在文档中显示为向下的灰色箭头,如文档截图中第一行行尾所示- 在Word中使用【Enter】输入段落符,也称为硬回车,其ASCII值为13,在文档中显示为转角向左的灰色箭头,如文档截图中第二行行尾所示- 修改字体颜色时,应避免影响项目编号、项目符号的原创 2025-03-09 08:11:36 · 415 阅读 · 0 评论 -
快速定位Word文档中特殊符号之间的文本(1/2)
实例需求:Word文档如下图中左侧所示,现需要修改手工换行符和段落符之间文字的字体为蓝色,如右图所示。- 在Word中使用【Shift+Enter】输入手工换行符,也称为软回车,其ASCII值为11,在文档中显示为向下的灰色箭头,如文档截图中第一行行尾所示- 在Word中使用【Enter】输入段落符,也称为硬回车,其ASCII值为13,在文档中显示为转角向左的灰色箭头,如文档截图中第二行行尾所示- 修改字体颜色时,应避免影响项目编号、项目符号的字体样式原创 2025-03-09 08:08:02 · 612 阅读 · 0 评论 -
快速列出MS Word中所有可用字体
Word中有很多字体,虽然在字体下拉列表中提供了字体的样例,但是并不全面,例如使用Batang字体的话,数字会显示成什么效果,就无法直观的看到。原创 2025-02-28 15:34:22 · 523 阅读 · 0 评论 -
VBA实现智能自适应文本框
实例需求:用户窗体中有两个文本框,由于第二个文本框输入的内容可长可短,因此希望实现下图中的效果。- 如果输入内容不超过文本框可显示长度,那么文本框采用初始宽度,固定不变- 如果输入内容过长,超过文本框可显示长度,那么调整文本框宽度,确保文字可以全部显示原创 2025-02-28 15:16:31 · 348 阅读 · 0 评论 -
VBA快速提取数据
现在需要在提取每个`类目`中,查找编号最大的`分组`,然后提取该分组中`评分`最高的数据行(假设每个类目中符合要求 数据行是唯一的)。粗略看这个需要,似乎需要需要使用字典对象,排重提取类目,然后再查找最大分组。其实变通一下思路,可以有更简单的实现方法。如果将数据按照前3列依次升序排序,那么表格如下所示,需要提取的数据行进行了高亮标记,不难发现其中的规律,其实就是每个`类目`的最后一行数据。原创 2025-02-26 14:47:53 · 393 阅读 · 0 评论 -
VBA递归累加求和
对于玩VBA的各位小伙伴来说,很多人对于递归总是有些犯怵,觉得有些无从下手。本博客就和大家用递归做个小任务,希望大家能够更好的掌握递归的相关知识。编程任务:实现1到10的累加。这个实例任务对VBA小白来说也是很友好,不用问DeepSeek,大家应该都可以用常规VBA编程思路实现。原创 2025-02-26 14:45:26 · 376 阅读 · 0 评论 -
巧妙获取ListBox控件的选中条目(按点击顺序)
实例需求:用户窗体中有两个控件- 列表框:ListBox1,支持多选- 按钮:CommandButton1现在需要记录用户在列表框中选择顺序(不考虑选中后再次点击取消选中的操作),如下图所示。原创 2025-01-26 12:11:55 · 483 阅读 · 0 评论 -
快速定位数字单元格所在行号
实例需求:工作表中数据位于A1:A17(可能存在空单元格),现在需要定位其最后一个数字单元格的位置,注意需要忽略文本数字单元格(单元格左上角有绿色三角标识),即A9和A14不符合要求。B列备注为了说明A列内容属性,C列为了展示哪些单元格包含公式。原创 2025-01-26 12:10:14 · 202 阅读 · 0 评论 -
快速插入汇总行
现在需要针对每个类别(Category)添加汇总行,如第4行所示,注意每个类别包含的数据行数不确定。原创 2025-01-23 12:13:19 · 215 阅读 · 0 评论 -
使用VBA实现工作表自定义顺序快速排序
Excel中一直缺少工作表排序功能,如果工作簿中工作表较多时,使用起来有些不方便。有时排序规则也不是简单的拼音排序,那么处理起来就更复杂了。实例需求:工作表名称包含两部分:第1部分为多个字符(英文字母、中文字符、数字)第2部分为数字,位数不确定现在需要按照排序列表对工作表进行排序:规则1:名称包含John的工作表,在名称包含Aman的工作表左侧规则2:对于名称包含Aman的多个工作表,按照序号数字大小排序原创 2025-01-23 12:09:39 · 647 阅读 · 0 评论 -
Word窗体联动Excel实现级联组合框
在Word中的使用用户窗体(UserForm)定制界面如下图所示,其中控件如下(忽略Label控件):- CompanyName 组合框- Attention 组合框- CommandButton1 按钮现在需要实现级联组合框效果,即用户在 CompanyName 组合框中选中如何一个Company,第二个组合框(Attention)加载相应对应的内容,其数据来自于Excel文件(FileLink.xlsx)中的数据表,如下图所示。原创 2024-12-25 03:45:46 · 906 阅读 · 0 评论 -
快速汇总Word表格
示例需求:Word文档中的有多个表格,其中最后一个表格为`汇总表格`,其他的为`数据表格`,如下图中左侧所示。现在需要根据`Category1`和`Category2`,在数据表格中查找,如果找到匹配行,那么1. 为数据表中改行创建书签Bookmark2. 在`汇总表格`中记录匹配行位置,例如`表格Table_1中第3行`3. 为上述文字添加超链接指向书签完成后的效果如下图中右侧所示。原创 2024-12-25 03:43:23 · 764 阅读 · 0 评论 -
快速查找替换整理Word文档
实例需求:Word文档如下图中上半部分所示,现在需要将括号内的文字作为单独段落,并且删除括号,如下图所示。对于这个需求,通常的编程实现思路是使用查找功能先定位括号,然后再逐个处理,插入段落标志,进而删除括号,这个思路肯定可以实现同样的结果,但是代码略多,合理使用Word内置查找替换可以更简洁地解决问题。其实无需使用代码,直接使用Word查找替换功能,也可以解决此问题,如下图所示。原创 2024-12-21 13:38:33 · 331 阅读 · 0 评论 -
VBA之正则表达式(48)-- 快速拆分中文语句
实例需求:对于任意一段文字,按照中文标点符号拆分为数组,并在立即窗口输出。例如对于如下内容:```本文为博主原创文章,未经博主允许不得转载。访问本人博客123,测试完成```原创 2024-12-21 13:34:08 · 426 阅读 · 0 评论 -
借助Excel实现Word表格快速排序
实例需求:Word中的表格如下图所示,为了强化记忆,希望能够将表格内容随机排序,表格第一列仍然按照顺序编号,即编号不跟随表格行内容调整。原创 2024-11-15 12:27:33 · 778 阅读 · 0 评论 -
Word VBA如何间隔选中多个(非连续)段落
实例需求:Word文档中的有多个段落,段落总数量不确定,现在需要先选中所有基数段落,即:段落1,段落3 ... ,然后一次性设置粗体格式。也许有的读者会认为这个无厘头的需求,循环遍历遍历文档中的段落,设置奇数段落的格式就可以了,确实如此,这是常规实现思路。但是存在的即是合理的,借助`Editor`对象,可以完美实现这个需求。原创 2024-11-14 12:39:18 · 1055 阅读 · 0 评论 -
VBA快速分配多对多编码
实例需求:第二个工作表中的城市编码表(下文中简称为编码表)如左图所示,其中城市数量不确定。第一个工作表中的待填写表格如中图所示,其中首列为非排序状态,并且填写编码时,不应该改变首列的数据顺序。编码填写要求:- 根据地点从编码表中依次编号- 如果城市名称在编码表中不存在,则第二列留空- 如果编码表中对应城市的码已经用完,则第二列留空- 注意:编码表中B列编号并非规律顺序编号原创 2024-11-14 12:37:17 · 511 阅读 · 0 评论 -
快速遍历包含合并单元格的Word表格
Word中的合并表格如下,现在需要根据子类(例如:果汁)查找对应的品类,如果这是Excel表格,那么即使包含合并单元格,也很容易处理,但是使用Word VBA进行查找,就需要一些技巧。原创 2024-10-29 12:27:51 · 854 阅读 · 0 评论 -
在Excel中如何快速筛选非特定颜色
Excel中的自动筛选是个非常强大的工具,不仅可以筛选内容,而且可以筛选颜色,例如筛选A列红色单元格。但是有时希望筛选除了红色之外的单元格(下图右侧所示),其他单元格的填充色不固定,有几种颜色也不固定,那么内置的自动筛选就无能为力,使用VBA还是可以实现的。原创 2024-10-29 12:26:13 · 858 阅读 · 0 评论 -
如何使用VBA识别Excel中的“单元格中的图片”(2/2)
如果希望使用VBA操作`单元格中的图片`,非常遗憾的是对象模型中并未提供相应的对象,并且该对象不隶属与`Shapes`或者`Pictures`对象集合。这就带来的一个棘手的问题,如何使用VBA代码判断一个单元格中是否包含`单元格中的图片`。原创 2024-10-28 10:24:43 · 949 阅读 · 0 评论 -
如何使用VBA识别Excel中的“单元格中的图片”(1/2)
如果希望使用VBA操作`单元格中的图片`,非常遗憾的是对象模型中并未提供相应的对象,并且该对象不隶属与`Shapes`或者`Pictures`对象集合。这就带来的一个棘手的问题,如何使用VBA代码判断一个单元格中是否包含`单元格中的图片`。原创 2024-10-28 10:21:34 · 996 阅读 · 0 评论 -
使用VBA快速将文本转换为Word表格
Word提供了一个强调的文本转表格的功能,结合VBA可以实现文本快速转换表格。示例文档如下所示。现在需要将上述文档内容转换为如下格式的表格,表格内容的起始标志为`@@@`。.CopyPicture原创 2024-09-28 12:43:55 · 763 阅读 · 0 评论 -
Excel数据检视——对角线连续数据连线
数据表如下图所示,现需要根据规则,在符合要求的单元格上,添加连线。连续单元格位于对角线方向单元格内容相同连续单元格数量不少于7个原创 2024-09-24 12:55:17 · 862 阅读 · 0 评论 -
快速循环切换Excel表格数据筛选器
第9行代码判断表格是否启用筛选功能,如果未启用,则第10行代码启用筛选功能。第8行代码获取循环筛选列的Index属性,即该列在表格中的位置序号。第22行代码识别指定关键字,第23行代码清除筛选条件关键字。如果表格是不存在筛选过滤,第17行代码设置首次筛选关键字。如果存在第14行代码获取当前筛选条件的关键字。第13行代码判断指定列是否存在筛选过滤。第12行代码判断表格是否存在筛选过滤。第20行代码与第17行代码功能相同。第5行代码定义循环筛选列的标题。第25行代码应用新的筛选条件。工作表中数据如下图所示。原创 2024-09-24 12:53:29 · 405 阅读 · 0 评论 -
如何快速判断Excel中选区跨页?
实例需求:应用开发过程中,需要校验选中区域,要求选中区域不能跨页,即选中区域分布在两个不同的页面中。原创 2024-08-27 13:52:38 · 614 阅读 · 0 评论 -
VBA之正则表达式(47)-- 快速将公式转换为静态值计算
实例需求:工作表I列包含多种计算公式,为了便于演示,将I列公式显示在J列单元格中,现在需要将公式的单元格引用转换为静态值,如K列所示。原创 2024-08-27 12:59:20 · 599 阅读 · 0 评论 -
VBA之正则表达式(46)-- 解析业务逻辑公式
实例需求:某业务系统的逻辑公式如下所示(单行文本),保存在活动工作表的A1单元格中。现在需要按如下规则提取数据,结果如下所示。- 提取引号之间的的关键字,可能包含空格- 提取相应的操作符合: + - * / = - 提取最后的数字原创 2024-08-25 21:35:29 · 405 阅读 · 0 评论 -
使用VBA快速创建非规则数据图表
实例需求:工作表中共有4组数据,第一组数据涵盖所有日期,其他3组均为断续数据。现在需要创建如下图所示的线图,由于数据区域是非连续的,因此无法直接创建图表。需要先将数据表按照日期对齐,如下图所示,才能创建图表。原创 2024-08-25 21:32:58 · 388 阅读 · 0 评论 -
快速创建柱状热力图(色阶梯度色谱)
示例数据如下图所示,第二列设置了色阶条件格式。现在需要创建使用色阶梯度颜色的柱形图,如下图所示。原创 2024-07-29 20:36:19 · 379 阅读 · 0 评论