在Excel VBA中使用字典

article/2025/9/27 15:16:27

序言

VBA的基础数据类型里面并没有字典类型,但字典其实在很多应用场景中都很有用,那么如何在VBA中使用字典,本文就用几个例子和大家交流探讨一下。

场景1

某个医院每天都会从不同的制造商那里进三种材料中的一种,每天的进价都有可能不同,现在公司积累了半年的数据,想做个分析。数据的样式如下:

现在的要求是做半年度的分析,分析一下三个材料从半年来看哪个制造商的进价最低。那么有聪明的小伙伴就说了,可以用透视表。确实,第一反应就应该是用透视表,因为需求很简单就要看谁最便宜。但如果是在实际的工作中,领导可能还会要求你做几张图,分析一下各个制造商的报价趋势;亦或者要求算一下制造商报价的差异度,预测下个月各个制造商的报价等等。最终还要求把上面说的这个分析都放到一张表里面,形成一张汇总分析表。那么这个时候就不是生成透视表能解决了的。如果每次都要手工处理会很麻烦,那么我们就可以用VBA来做一张模板。而做模板我们首先会碰到的一个问题就是,制造商到底有几个不确定,保不齐哪天就蹦出一个新的制造商来。所以第一步我们就要建了一个制造商的列表。有几个方法,一个是复制C列到其他对方,使用删除重复项;或者嵌套循环;还有就是今天要说的字典。创建字典的语句很简单:

Dim zzs_dict
Set zzs_dict = CreateObject("Scripting.Dictionary")

 创建完成后我们需要把C列的值添加进字典,因为字典的自带的exists方法,我们就可以筛选出唯一的制造商了。完整的代码如下:

Sub test()'''zzs就是最终的我们需要的唯一的制造商的数组
Dim zzs() As String
'''zzs_dict是制造商的字典,因为字典不是VBA的基本数据类型,我们选择将结果存放在zzs数组中
Dim zzs_dict
Set zzs_dict = CreateObject("Scripting.Dictionary")
Dim max_row As ByteWith ThisWorkbook.Worksheets("Sheet13")
max_row = .Cells(Rows.Count, "a").End(xlUp).RowFor i = 2 To max_rowtem_da = .Cells(i, "c")If Not zzs_dict.exists(tem_da) Thenzzs_dict.Add tem_da, NullReDim Preserve zzs(0 To counter)zzs(counter) = tem_dacounter = counter + 1End If
Next iEnd WithEnd Sub

在这个例子里面,我们重点使用的是字典的exists的方法,主要是避免了多层嵌套循环;字典还有一个key:value的对应,我们没有用到。那么我们再考虑接下来的一个场景

场景2

假设有一个公司员工的绩效和员工本身的职级挂钩,每个职级有不同的系数,那计算各个员工的绩效的时候我们就可以将职级和对应的系数放到字典中,方便计算和后期的维护。数据如下:

细心的小伙伴就会发现说,你这绩效明明已经用公式,用VLOOKUP,算出来了,为啥还要用VBA呢?这不是脱裤子放屁么。不可否认在这个例子里面是用公式最简单,但这只是例子而已,实际工作中情况要复杂的多,我们就不多说了,看看用VBA怎么来计算这几个员工的绩效。代码如下:

Sub test()Dim zc_dict
Set zc_dict = CreateObject("Scripting.Dictionary")With ThisWorkbook.Worksheets("22年1月")
'''多个表的话用for each worksheet in ThisWorkbook.WorksheetsWith .Cells.Find("参数区域").CurrentRegionzc_dict.Add "初", .Cells.Find("初").Offset(0, 1)zc_dict.Add "中", .Cells.Find("中").Offset(0, 1)zc_dict.Add "高", .Cells.Find("高").Offset(0, 1)End WithWith .Cells.Find("计算区域").CurrentRegion'''省略计算过程End WithEnd WithEnd Sub

 

具体的计算工程就省略了,因为楼主很懒,写PYTHON语句习惯了,写VB每一句都是煎熬。。。

结语

总的来说字典在VBA中是一个很有用的数据类型,楼主自己在工作中经常会用到。当然在EXCEL里面要实现某个目标有很多的方法,大家平时多思考吧,能写公式就写公式,能用透视就直接透视。


http://chatgpt.dhexx.cn/article/p6YuGPU3.shtml

相关文章

VBA -[知识点]: 字典

VBA字典 记录一次VBA字典的使用部分代码 1. VBA 中创建一个字典对象2. 字典对象添加key 和 value3. 获取字典对象的key list4. 判断是否存在某个key5. 修改字典值6. 修改字典key 名称6. 删除某个item7. 删除所有item 记录一次VBA字典的使用 部分代码 Public Sub MainRun()1. …

VBA字典(详解,示例)

文章目录 创建字典对象字典的属性|方法案例去重求和计数匹配key的组合和分割字典value多字段累加字典求和和计数同时进行类似sql的join操作 创建字典对象 后期绑定:方便代码在其他电脑上运行,推荐。 dim dic as object Set dic CreateObject("scr…

JavaScript 动态生成表格

要求&#xff1a; HTML标签只写一行表头通过JS来写动态的表格&#xff08;有多少组数据&#xff0c;就自动创建多少行表格&#xff09;为学习和演示&#xff0c;采用固定的数据&#xff0c;不涉及调用后台数据 实现效果&#xff1a; 代码实现&#xff1a; <!DOCTYPE html…

利用JS代码完成动态生成表格案例及解析

思路&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

js自动生成html报表,JavaScript实现动态生成表格

本文实例为大家分享了JavaScript实现动态生成表格的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 功能描述 在输入框中输入行和列&#xff0c;点击按钮&#xff0c;生成拥有对应行和列的表格。如下图所示&#xff1a; 分析 HTML界面设计 行&#xff1a; 列&#xf…

JavaScript 动态生成表格 及删除表格

创建 表格表头 <body> <table> <thead> <tr> <td>序号</td> <td>姓名</td> <td>性别</td> <td>年龄</td> <td>地址</td> <td>删除</td> </tr> </thead> <t…

js动态生成表格实例

效果图 代码 <!DOCTYPE html> <html> <body> <div><h1>动态生成表格</h1><div id"table1">行&#xff1a;<input type"text" id"h"/>列&#xff1a;<input type"text" id"…

在html中生成动态表格数据,JavaScript实现网页动态生成表格

JavaScript(JS)网页–动态生成表格,供大家参考,具体内容如下 在网页中,动态生成列表的内容,将数组中的object加入到列表中(没学到数据库)。在HTML中创建thead,然后通过JavaScipt动态生成tbody。并且在每行最后申城一个单元格,加入删除操作,点击删除可以删除此行。动态生…

使用JS动态生成表格

代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title></title><script>var bgColor;var list [{ id: 1, country: 中国, capital: 北京,},{ id: 2, country: 美国, capital: 纽约,},{ id…

html动态生成表格源码,JavaScript动态生成表格的示例

要求&#xff1a; HTML标签只写一行表头 通过JS来写动态的表格(有多少组数据&#xff0c;就自动创建多少行表格) 为学习和演示&#xff0c;采用固定的数据&#xff0c;不涉及调用后台数据 代码实现&#xff1a; HTML内容&#xff1a; 姓名科目成绩操作 CSS内容&#xff1a; tab…

利用javascript动态生成表格及注释

记录学习第一天 &#xff1a;关于javascript如何动态的生成表格 css样式想节省时间就没写,所以只有基本样式。 html部分&#xff1a; 创建一个表格&#xff08;table&#xff09;的头部&#xff08;thead&#xff09;和数据&#xff08;tbody&#xff09;标签。 <table b…

JavaScript网页——动态生成表格

1.创建学生数据 分析&#xff1a;因为里面的学生数据都是动态的&#xff0c;我们需要js动态生成。这里我们模拟数据&#xff0c;自己定义好数据。数据我们采取对象形式存储。 var students [{name:吕小布,subject:JavaScript,score:100,},{name:张益达,subject:JavaScript,…

JavaScript 动态生成表格 案例

功能描述 在输入框中输入行和列&#xff0c;点击按钮&#xff0c;生成拥有对应行和列的表格。如下图所示&#xff1a; 分析 HTML界面设计 <body>行&#xff1a;<input type"text" id"row" /> 列&#xff1a; <input type"text"…

javascript动态生成表格 -- 案例

js动态生成表格 Draven 效果预览html部分css部分js部分 表格内容使用js生成 效果预览 html部分 <table border"1px" cellspacing"0" cellpadding"10"><thead><tr style"background-color: #999999; height: 60px">…

JavaScript中动态生成表格

1. 以下这个案例比较典型&#xff1a; 涉及到dom节点的操作&#xff0c;以及数组和对象的遍历方法 题目要求&#xff1a; 使用数组把学生数据模拟出来。动态创建行、单元格。为单元格填充数据。提供“删除”链接&#xff0c;可删除所在的行。 效果如下&#xff1a; html代码…

js 动态生成表格案例

<1>布局:一个table表格,表格分为两个部分,上面是thead表头,表头里面仅一行,有4列(th), 下面是tbody表格内容,要求tbody中的每一行都是用js动态创建的 <body> <table><thead><tr><th>姓名</th><th>科目</th><…

原生JS实现动态表格的生成

今天完成动态表格的生成&#xff0c;巩固知识&#xff0c;梳理一下思路。 首先我们创建表格和他的头部&#xff0c;后面根据数据动态生成插入进来。结构如下 <table cellspacing"1px" bgcolor"black"> <thead><tr><td>姓名</…

js动态表格创建

js动态表格创建 1、一个table表格&#xff0c;表格分为两个部分&#xff0c;上面是thead表头&#xff0c;表头里面仅一行&#xff0c;有3列&#xff08;th), 下面是tbody表格内容&#xff0c;要求tbody中的每一行都是用js动态创建的2、通过点击“生成”按钮&#xff0c;在div标…

JavaScript动态生成表格

源代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" content…

关闭nginx的日志记录

error.log&#xff1a;存放错误日志 access.log&#xff1a;存放用户访问记录日志