数组
文章平均质量分 52
taller_2000
不积跬步,无以至千里;不积小流,无以成江海
展开
-
奇怪的Excel单元格字体颜色格式
使用VBA代码修改单元格全部字符字体颜色是个很简单的任务,例如设置A1单元格字体颜色为红色```vbRange("A1").Font.Color = RGB(255, 0, 0)```有时需要修改部分字符的颜色,如下图所示,将红色字符字体颜色修改为蓝色。代码将会稍许复杂,需要使用`Characters`设置逐个字符的字体颜色。原创 2024-07-24 21:13:23 · 624 阅读 · 0 评论 -
VBA递归过程快速组合数据
实例需求:数据表包含的列数不固定,有的列(数量和位置不固定)包含组合数据,例如C2单元格为`D,P`,说明`Unit Config`有两种分别为D和P。现在需要将所有的组合罗列出来。原创 2024-06-25 00:45:39 · 570 阅读 · 0 评论 -
快速创建指定日期带合计的日历表
实例需求:根据用户在B1单元格输入的年份,自动创建日历表,具体要求如下。- 日历表包含指定年份的全部星期四- 每个月份首行,在第一列写入月份的英文简称- 每个月份结束之后,添加月份合计行- 每个季度结束之后,添加季度合计行- 所有合计单元格设置格式如下图所示(粗体、填充色、边框)原创 2024-05-21 09:10:03 · 312 阅读 · 0 评论 -
快速将筛选后的数据加载到数组
实例需求:工作表中有一个格式化表格(ListObject),现需要将筛选后的表格区域(包含标题行)加载到数组中。原创 2024-05-21 06:21:57 · 322 阅读 · 0 评论 -
VBA自适应多种排班计划日期填充
实例需求:某公司有两种不同排班计划- MWF: 周一周三周五-周一周三周五...- TTS: 周二周四周六-周二周四周六...但是数据表中有时会缺少部分日期,为了便于汇总多个部分的数据,现在需要将日期补全,对于补充的日期标记为黄色。原创 2024-03-06 03:01:07 · 616 阅读 · 0 评论 -
VBA实现快速逆透视
将工作表中的数据(多维度交叉),对日期进行逆透视,转换为下表的格式。原创 2024-02-25 04:14:00 · 343 阅读 · 0 评论 -
快速多列查找匹配关键字
实例需求:根据第一列专业名称,在“专业分类指导目录”中,针对三个学历层次(研究生、本科生、专科生)分别查找对应专业类别,填写在对应位置,即截图中的黄色区域。原创 2023-12-15 02:02:28 · 154 阅读 · 0 评论 -
用户权限数据转换为用户组列表(1/3) - VBA
实例需求:如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限,现在需要创建新的AD用户组,并根据用户当前的权限,将这些用户添加到相应的组中。原创 2023-09-10 03:05:48 · 132 阅读 · 0 评论 -
使用VBA快速比对数据
实例需求:第一行是全系列数据集合,现在需要对比第一行数据,查找第2行数据中缺失的数字,保存在第3行中。具备VBA初步使用经验的同学,都可以使用双重循环实现这个需求,这里给大家提供另一种实现思路,如何快速找到这些缺失数字。原创 2023-09-02 03:14:35 · 1099 阅读 · 0 评论 -
快速获取InputBox选中区域的单个单元格引用地址
在VBA中使用`InputBox`方法可以让用户选择单元格区域,交互体验和输入公式参数基本上相同,其返回值为Range对象。语法格式参见微软帮助文档:如果用户选择了多个区域,如下图中黄色区域所示,那么使用Range对象的`Address`属性获取单元格引用地址时,结果为`$B$5:$B$7,$B$13,$B$19`。如果希望得到每个单元格的单独地址(`$B$5,$B$6,$B$7,$B$13,$B$19`),那么可以使用VBA处理一下。原创 2022-11-04 11:47:09 · 1331 阅读 · 0 评论 -
VBA快速整理数据
实例需求:现有数据如下图所示。![在这里插入图片描述](https://img-blog.csdnimg.cn/82ff0d6fe55142ea88b13a124434471e.png)现需要将不同幅面拆分为单独的数据行,如下所示。![在这里插入图片描述](https://img-blog.csdnimg.cn/30589ec715aa48f691ab447b63f8bb89.png)原创 2022-10-07 10:08:56 · 649 阅读 · 0 评论 -
使用VBA创建数字金字塔
代码实现其实很简单,重要的是找到数字排练的规律,简单总结:对于第n行,第一个数字位于(总行数-n+1)列,最后一个数字位于(2*n-1)列。如果需要创建多种不同层数、不同起始数字的金字塔,大家可用将上述代码改造成带参数的Sub过程。第7~12行代码使用双重循环创建数组金字塔。第7行代码循环变量i为行数(金字塔的层数)。第6行代码重新声明态数组,用于保存结果。第9行代码将数字保存在结果数组中。第3行代码设置金字塔共10层。第14行代码将结果写入工作表。第4行代码设置数字的初始值。第8行代码循环变量j为列数。原创 2022-09-15 11:10:37 · 1044 阅读 · 0 评论 -
VBA数组动态下标下界
设置下界值,如果没有这行代码,那么下界值为零。这不失为一个方法,但是局限性很大,用户必须要启用“信任对VBA工程对象模型的访问”,否则无法使用。VBA中数组默认下标下界为从零开始,有些同学喜欢下标下界从一开始,这只是编程习惯不同,无对错之分。现有一个VBA自定义函数,参数为下标上界,函数返回值为一维数组,代码较简单,不再逐句讲解。设置保持一致,那么可以取巧的使用检测数组下标下届的方法得到这个设置。大家是否注意到了,第一行代码指定数组下标下届从1开始,但是函数。决定的,此变量的值是Hard Code。原创 2022-09-15 00:08:41 · 2274 阅读 · 0 评论 -
VBA中如何判断数组为空
在复杂的代码开发过程中,程序逻辑结构可能存在多个分支,有时需要判断变量是否为空,例如对于Range变量,可以使用如下代码。原创 2022-04-04 10:03:57 · 10659 阅读 · 0 评论 -
数字转换为固定长度字符串
在Excel中使用公式可以轻松实现将数字转换为固定长度字符串(例如以最大数字的位数为准),如下图所示。在VBA中如何实现这个功能,是否需要调用上图的Excel函数来实现?答案是:完全不需要,VBA中有多种实现方式,必有一款适合您。方法1Sub Demo1() Set Rng = Range("E1:E5") max_len = Len(Trim(Str(Application.Max(Rng)))) For Each c In Rng Debug.Prin原创 2021-12-03 13:40:12 · 1706 阅读 · 0 评论 -
如何判断动态数组为空?
VBA开发时经常用到数组,但是如何判断数组是否为空,这里说的“空”指的是,动态数组声明后,但是未赋值之前的状态,在【本地窗口】中显示如下。此时Dim语句已经执行完毕,可以认为已经完成了初始化,数组并无法直接使用,因此可以使用错误捕获的方式来实现检测这个状态。示例代码如下:Sub Demo() Dim arrTest() On Error Resume Next idx = LBound(arrTest) If Err.Number > 0 Then原创 2021-03-15 03:37:38 · 3671 阅读 · 0 评论 -
VBA数组暂时锁定是怎么回事
动态数组在VBA中经常用到,使用`ReDim`可以修改动态数组最后一维的上界,但是有时会出现运行时错误10,即:该数组被固定或暂时锁定,为什么会出现这种错误呢?这样的问题其实也不难解决,只要使用结构化编程方式,不使用`GoTo`语句,就完全可以避免这样的错误。原创 2021-02-28 13:58:18 · 1523 阅读 · 0 评论 -
VBA解析JSON数据(6)-- JSON数据长度
JavaScript代码可以读取JSON数据KEY和VALUE,JSON数据可以多层嵌套,如何获取JSON数据长度呢?示例JSON数据如下,数据共用3组。{ "people":[ { "firstName":"Brett", "lastName":"McLaughlin", "email":"brettM@abc.com" }, { "firstName":"Jason",原创 2020-12-22 03:06:57 · 1174 阅读 · 0 评论 -
使用VBA在Office中输入特殊字符(3/3)
在博文《使用VBA在Office中输入特殊字符(1/3)》中我们知道月亮符号的字符代码为0x1F319。本文讲解如何计算特殊字符对应的Byte数组的值。原创 2020-09-08 15:10:30 · 3130 阅读 · 5 评论 -
使用VBA在Office中输入特殊字符(2/3)
在上一篇博文《使用VBA在Office中输入特殊字符(1/3)》中使用Byte数组实现了输入特殊字符,但是如果获得代表特殊字符的Byte数组的值呢?其实也不复杂。原创 2020-09-08 07:05:03 · 1450 阅读 · 0 评论 -
巧用公式实现VBA数组快速赋值
VBA中可以使用数组处理工作表中的数据,是个尽人皆知的秘密了,读取数据加载到数组中也很简单。工作表中数据如下图所示,需要将B1:G1的内容加载到数组中。这个该如何弄到一个数组中呢,先分别读入数组,然后再使用动态数组就和合并成2x3的数组了。有些不甘心,这么简单的一个事情,要这么多行代码。千万不要忘记,我们是在用Excel中玩儿VBA,Excel中强大的公式可以把这个简化为一行代码就能实现。原创 2020-07-03 06:44:53 · 3956 阅读 · 0 评论 -
VBA字典数组转置维度变化
字典是VBA中经常使用的对象,有时需要将字典对象中保存数据转为数组,然后做进一步处理,在使用过程中经常会遇到数组下标越界之类的问题,下面就讲讲字典到数组的转换。原创 2020-06-18 11:52:10 · 2714 阅读 · 0 评论 -
VBA巧妙处理字符串连接
字符串连接是经常需要用到的功能,在VBA代码中可以使用`+ `也可以使用`&`运算符,似乎是简单的不能再简单的功能,但是实际使用过程中也是有一些技巧的。原创 2020-04-05 11:28:35 · 22318 阅读 · 2 评论 -
VBA数组赋值(2/2)-- 二维数组
以前的博客文章中讲过一些数组的使用技巧,经常会被网友问道如何给数组赋值,本文讲解如何为二维数组赋值(或者说如何创建二维数组)。原创 2020-04-04 02:16:19 · 14119 阅读 · 0 评论 -
VBA数组赋值(1/2)-- 一维数组
以前的博客文章中讲过一些数组的使用技巧,经常会被网友问道如何给数组赋值,本文讲解如何为一维数组赋值(或者说如何创建一维数组)。原创 2020-04-04 02:15:16 · 9366 阅读 · 0 评论 -
Excel巧设公式(字典+数字)
有个网友提了这样的一个需求:A中有包含重复值的数据,现在需要将重复值所在单元格的值改为公式引用。例如:A6单元格值为3,第一个出现3的单元格为A5,所以将A6公式设置为=$A$5,其他单元格以此类推。方法1示例代码如下:Sub Demo1() Dim Dic As Object, dKey Dim c As Range Dim sKey As String S...原创 2020-03-19 12:21:01 · 1904 阅读 · 0 评论 -
如何获取数组的维数(API)
在VBA中并没有提供可以直接获取数组维数的函数和方法,前面的文章“如何获取数组的维数”介绍了,如何使用捕获错误的方法来获取数组的维数,本文介绍如何使用Windows API获取数组的维数。原创 2020-02-29 12:57:12 · 941 阅读 · 0 评论 -
VBA解析JSON数据(1)-- Split函数
什么是JSON?JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子集,它使用完全独立于任何编程语言的文本格式来表示数据。由于JSON天然具备了简洁和清晰的层次结构,易于机器解析和生成,从2005年前后开始JSON成为主流的网络数据传输格式。进行网页数据抓取的时候,...原创 2019-02-16 07:20:48 · 14768 阅读 · 0 评论 -
VBA中数组72变(随心所欲复制)
西游记中孙悟空最神奇的本领之一就是拔根毫毛,瞬间变出无数个孙猴子。代码中的数据可谓神通广大,如何实现瞬间变身呢?其实也很简单。Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal ...原创 2018-08-11 14:01:21 · 4281 阅读 · 0 评论 -
VBA之正则表达式(15)-- 提取数字求和
实例需求:提取`@`之间的纯数字(无小数点),并将结果累计求和。测试字符串:abc100@<font color=blue>200</font>@300$def400ghj@<font color=blue>500</font>@600原创 2019-07-01 05:41:30 · 5655 阅读 · 0 评论 -
数组排序系列(5)
JavaScript排序法 - 数字降序JS代码实现数组数字降序排序有两种方法。function sortarr(para) { arr=para.split(','); arr.sort ( function cmp(a,b) {return a-b;} ); arr.reverse(); return arr; }JS代码解析:ar...原创 2018-10-12 03:36:44 · 250 阅读 · 0 评论 -
数组排序系列(3)
这次介绍一个其他类型的方法,Excel的排序功能非常简单实用,即使是小白用户也可以熟练操作,在VBA中借助工作表排序也就成为一个实现数值排序的好方法。原创 2018-10-03 11:39:20 · 299 阅读 · 0 评论 -
数组排序系列(2)
极值法(选择法)与冒泡法类似,这个算法也是采用双重循环的结构来调整数组元素顺序,进而实现数值排序。Sub SelectionSort() Dim aintData(1 To 10) As Variant Dim i As Integer Dim j As Integer Dim intLB As Integer Dim intUB As Integ...原创 2018-09-15 11:12:00 · 316 阅读 · 0 评论 -
数组排序系列(1)
前言数组是编程语言(VBA或者其他高级语言)中的不可多得的神器,其便捷性和高效性得到还多开发者的青睐。在VBA中数组也得到广泛的应用,但是VBA中数组的功能有时也令人觉得缺点儿什么,比如数组排序,在VBA中的数组就没有提供一个内置方法直接实现排序,在接下来的几个博文中就来陆续讲解几种常用的实现方法。 经典算法 – 冒泡法吹泡泡是每个人童年都必不可少的游戏,沾上肥皂水,轻轻一吹,大...原创 2018-09-15 02:03:56 · 1472 阅读 · 0 评论 -
数组排序系列(4)
JavaScript排序法 - 数字升序与冒泡法类似,这个算法也是采用双重循环的结构来调整数组元素顺序,进而实现数值排序。Sub JSSortNum_ASC() Dim aintData(1 To 10) As Variant Dim strNum As String Dim i As Integer Dim intLB As Integer Di...原创 2018-10-03 11:39:41 · 261 阅读 · 0 评论 -
如何快速判断数组中是否包含某个值
多维数组是经常用到的数据结构,判断数组中是否包含某个元素的常规办法就是变量整个数组,逐个对比。自定义函数如下:Function ItemInArrayLoop(aData, vEle) As Boolean ItemInArrayLoop = False For i = 1 To ubund(aData, 1) For j = 1 To UBound(aDa...原创 2018-04-24 00:11:32 · 29437 阅读 · 2 评论 -
【代码模板003】工作表单元格区域加载到数组
VBA中经常遇到的性能问题是由于频繁读写工作表单元格造成,将数据一次性读入数组,然后再内存中进行后续处理,是提升代码运行效率的一个好方法。 加载数组过程其实并不复杂,而且绝大多数应用场景,可以直接使用如下的代码框架。模板中字典对象可以根据需要进行启用,例如:排除重复值,统计重复次数等等。Sub LoadData() Dim aData, aRes, lst, ...原创 2018-02-25 13:49:17 · 665 阅读 · 0 评论 -
Transpose实现数组行列转置的限制
提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将保持在新数组的第一行,并且保持原有顺序,即6在第一个位置,8在最后一个位置。其他列依次类推。 在Excel工作表中有个强大的函数Transpose,可以直接实现数组行列转置,作为VBA开发者来说,肯定不会忘记用这个。Sub Dem...原创 2018-02-24 13:25:46 · 13690 阅读 · 8 评论 -
浅谈VBA中使用数组处理工作表数据
前言在VBA中最经常涉及的就是读写工作表中的单元格,如果读写操作次数较多,或者涉及到的单元格数量较多,往往会导致程序运行效率较低。这时经常用到的解决方法就是使用数组保存数据,在内存中进行数据处理和加工,最后一次行更新工作表,这样的操作方式往往会极大提升程序的运行效率。读取数据声明变量首先如何声明用于保存单元格内容的变量呢?虽然在VBA可以直接使用未声明的变量,但是声明变...原创 2018-02-28 12:55:53 · 10336 阅读 · 0 评论 -
并肩作战的好兄弟实现快速汇总:字典 + 数组
前言VBA开发者经常讨论的一个话题就是:字典和数组哪个效率更高?使得很多VBA初学者懵懂的认为,这两者非此即彼,水火不容。其实很多应用场景中,它们是并肩作战的好兄弟。实例需求已有生产排程数据如下所示。 需要整理为如下格式。 数据合并的要点有三个:料号和机种号为统计的关键字段未交数量求和交期汇总,包含时间和数量示例代码Sub LoadData(...原创 2018-03-07 04:15:31 · 2938 阅读 · 2 评论