在Excel VBA中使用字典

2023-10-28

序言

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 Byte

With ThisWorkbook.Worksheets("Sheet13")
max_row = .Cells(Rows.Count, "a").End(xlUp).Row

For i = 2 To max_row
    tem_da = .Cells(i, "c")
    If Not zzs_dict.exists(tem_da) Then
        zzs_dict.Add tem_da, Null
        ReDim Preserve zzs(0 To counter)
        zzs(counter) = tem_da
        counter = counter + 1
    End If
Next i

End With

End 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.Worksheets

    With .Cells.Find("参数区域").CurrentRegion
        zc_dict.Add "初", .Cells.Find("初").Offset(0, 1)
        zc_dict.Add "中", .Cells.Find("中").Offset(0, 1)
        zc_dict.Add "高", .Cells.Find("高").Offset(0, 1)
    End With

    With .Cells.Find("计算区域").CurrentRegion
        '''省略计算过程
    End With

End With


End Sub

 

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

结语

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Excel VBA中使用字典 的相关文章

  • cJSON笔记——三种结构的cJSON数组

    最近的项目中 涉及对cJSON库的使用 特别是不同结构的cJOSN数组的运用 在此小结以下 1 指定 路径 文件类型 文件名 读取整个文本 brief param file dir 文件所在的路径 param file name 文件名 p
  • 模型参数量(Parameters)和计算量(FLOPs)获取【使用thop】

    Tips 针对部分开源代码没有提供相关计算网络参数量和计算量的代码 这里给出一个通用的获取网络的参数量和计算量的方法 使用thop即可快速获取 1 模型参数量和计算量 参数量 params 即为网络模型中含有多少个参数 与输入的数据无关 主

随机推荐

  • win11热点提示我们无法设置热点

    问题还原 首先是连接win11的热点时 手机总是显示正在获取IP地址 然后连不上 之前都好好的 也没干过啥 或者选择性失忆 然后一通瞎操作 把电脑IP都给整成自动ip去了 初步估计是点了 网络重置 了如图 公司设置了固定ip 接下来就难受了
  • vue+iview 进行table表格数据的更新显示,局部刷新

    hello 在这个新做了一个网站 想提高一下权重 麻烦看见的给我点一下哦 是吉他乐谱分享的哦 www lsjita com 使用vue iview进行vue后台管理系统 对iview不太熟悉 然后就出现了好多问题 上一个有记录 这个来区分一
  • HaaS Python + AI 隆重登场 使用 ESP32 + 摄像头 机器视觉实现水果识别

    水果识别系统 现在很多农场里边使用摘采机器人识别水果进行水果摘采 盒马超市也使用自动识别称来识别水果种类自动计费 本案例则是使用HaaS Python对摄像头图像进行采集 并调用HaaS云端积木能力对水果进行识别 1 背景知识 水果的种类繁
  • 【AI实战】快速搭建中文 Alpaca 33B 大模型 Chinese-Alpaca-33B

    AI实战 快速搭建中文 Alpaca 33B 大模型 Chinese Alpaca 33B 中文 33B 大模型 Chinese Alpaca 33B 环境配置 搭建过程 1 拉取 chinese alpaca lora 33b 2 合并l
  • 【python学习笔记】seaborn模块

    目录 热力图介绍 seaborn模块绘制热力图 热力图介绍 热力图是一种特殊的图表 它是一种通过对色块着色来显示数据的统计图表 在绘图时 需要指定每个颜色映射的规则 一般以颜色的强度或色调为标准 比如颜色越深的表示数值越大 程度越深 颜色越
  • spark运行报错:(null) entry in command string: null chmod 0644

    在WIndows操作系统中本地运行spark程序 报以下错误 null entry in command string null chmod 0644 后面是目的目录 解决方法 下载hadoop dll文件 并拷贝到c windows sy
  • JS中的call()和apply()方法和区别

    一 方法定义 apply 调用一个对象的一个方法 用另一个对象替换当前对象 例如 B apply A arguments 即A对象应用B对象的方法 call 调用一个对象的一个方法 用另一个对象替换当前对象 例如 B call A args
  • 分析996个词根在各大考纲词汇中的作用(五)总结精选篇

    CET4 CET6 GRE IELTS TOEFL 考研英语总的词汇量为14055 分析词根总数为996 有11544个单词分布在这些词根中 剩下的2511个词汇没有任何词根信息 本文精选5206个跟词根结合最紧密的单词 superword
  • KVM的HVM虚拟机使用非串口方式建立virsh console 连接

    在去年写的文章中 http blog csdn net dobell article details 14442457 写到了怎么利用serial 设备进行console连接 不过比较麻烦 因为1 需要修改虚拟机内部的grub启动选项 2
  • unity学习笔记-有关打包安卓apk的一些注意事项

    unity学习笔记 有关打包安卓apk的一些注意事项 打包到build project的时候报错 报错信息里出现了jdksdk等 打包报错显示andriodfestxml文件版本有问题 有关urp线管环境打包的时候的一些注意事项 在编辑器里
  • 一款开源的文件搜索神器,终于不用记 find 命令了

    Python微信订餐小程序课程视频 https blog csdn net m0 56069948 article details 122285951 Python实战量化交易理财系统 https blog csdn net m0 5606
  • pppd程序的参数——man手册翻译

    文章目录 pppd全称 摘要 描述 常用的选项 ttyname 串口名 speed 波特率 asyncmap map auth call name connect script 连接脚本 crtscts defaultroute defau
  • chatgpt赋能python:Python处理Word文档

    Python处理Word文档 介绍 Microsoft Word是业界最流行的办公文档编辑工具之一 对于文档处理工作 Word是必不可少的工具之一 然而 尽管Word是十分强大的 但在处理大量数据时 手动处理每个文件是费时费力的 幸运的是
  • 数值分析——LU分解(LU Factorization)

    本系列整理自博主21年秋季学期本科课程 数值分析I 的编程作业 内容相对基础 参考书 David Kincaid Ward Cheney Numerical Analysis Mathematics of Scientific Comput
  • Python 多线程 start()和run()方法的区别(三)

    在实例调用的函数中加入打印当前线程的名字 分别用start 方法和run 方法启动线程检查有什么区别 start 方法 import threading import time def worker count 1 while True i
  • Linux epoll 与 Windows IOCP比较

    前言 epoll 和 IOCP IO Completion Ports 分别是 Linux 和 Windows 系统上的高效网络模型 相比其他网络模型 同样是 polling 方式 这两种模型有如下特点 在系统资源允许下 监控的文件描述符没
  • pandas中to_datetime()时间处理

    pandas to datetime arg errors raise utc None format None unit None pandas通常用于处理成组日期 不管这些日期是DataFrame的轴索引还是列 to datetime方
  • 入职字节外包一个月,我离职了····

    有一种打工人的羡慕 叫做 大厂 真是年少不知大厂香 错把青春插稻秧 但是 在深圳有一群比大厂员工更庞大的群体 他们顶着大厂的 名 做着大厂的工作 还可以享受大厂的伙食 却没有大厂的 命 他们就是大厂的 外包员工 什么都做了 和什么都没做其实
  • idea注释快捷键

    具体实现步骤 1 打开系统设置Setting Ctrl Alt S快捷键 2 Editor gt Live Templates gt 点击 号 添加一个templates group来放置自己快捷键 效果图如下 3 选中创建的group g
  • 在Excel VBA中使用字典

    序言 VBA的基础数据类型里面并没有字典类型 但字典其实在很多应用场景中都很有用 那么如何在VBA中使用字典 本文就用几个例子和大家交流探讨一下 场景1 某个医院每天都会从不同的制造商那里进三种材料中的一种 每天的进价都有可能不同 现在公司