网站首页 > 技术文章 正文
投稿作者:凡心之旅 郑广学VBA175例教程首期学员
需求提出
今天我们来看一个运动会比赛表的整理问题,每个运动项目都有独立的小表格,现在要整理成标准的二维表格,方便老师观看每个同学的比赛项目。
原表一共有500多行数据,几十个小表格,是1个中学老师来找我定制,他说他每次做这个做一次要好几个小时,我最后给他用Excel VBA代码一键完成,也没报高价,200块,他拿到后惊为天人,一口一个谢谢,后面又给我单独发了18块钱的红包请我喝奶茶!
前置知识
本案例属于实战案例,零基础有点难,学习本案例需要至少有以下VBA基础
- VBA数组基础
- 根据表格有效区域获取数组
- VBA字典基本知识
- VBA字典行列号法基础
以上知识点,本人均在郑广学VBA175例教程中学习
结果标题列号装入项目列字典
- VBA将学生号码的行列号 装入字典并用固定的分隔符连接
- 循环字典中的学生号码关键字 取出对应的行列号
如数据下图:
解题思路
由于数据比较大, 这次我们使用郑老师教的万能字典行列号法,使用VBA的行列号定位+数组循环来完成,下面就开始我们愉快的学习旅程!
- 对源数据循环,VBA将相同学生号码的行列号装入字典,行号用##分隔记录,列号用$分隔记录
- 循环字典中的学生号码关键字 取出对应的行号列号
- 按逗号拆分行号列号得到行号列号数组
- 循关键字数组,从源数据依次取出号码,年级,班级,姓名及比赛项目
- 结果放入结果数组,写入结果区
看图中黄色底色廖凯同学 不管参加什么项目的比赛,他自己的学生号码是唯一不变,这时候我就用 字典 记录所有003号码廖凯参加比赛项目的行列号,再通过是否包含男女字样来锁定标题行,然后就可以提取我们所要的信息。
下面我们讲一讲重难点
1 、首先需要定义一些变量和字典对象,和大家一样,最开始这个字典对象很长,总是记不住,不过还好有工具可以帮助我们快速输入,安装VBA代码助手插件(vbayyds.com)后,在第25行 只需要输入 dicd四个字母,然后空格就会得到提示 按下Tab键即直接输入字典的定义, 即使是第一天学vba的同学,也不怕记不住代码了!
2、第09行到17行,将结果区域crr数组中的第1行的标题作为字典的关键字key,列号作为他对应值存入字典dic项目位置,后面在存放比赛项目的结果时候可以取出来对应项目的列号位置。
3、同理:首先根据是否包含男女,把每个小表格的标题行存入关键字为“标题行”的对应字典项目key值item中;然后再讲每个参加比赛的同学学号的行列号用不同的分隔符连接起来 存入字典对应key的值中(上次案例我们只了行号)
4 、定义一个结果数组brr ,循环对应的号码数组keys,取出字典中的所有号码的行列号,
结果数组brr的第一列 放学生号码;
结果数组brr的第二列 放对应比赛项目的标题中的年级信息;
结果数组brr的第三列 放原数组arr中的班级信息;
结果数组brr的第四列 放原数组arr中行号定位的姓名信息;
结果数组brr的第N列 将标题行里的比赛项目,放结果区域中dic项目位置列号所对应的列上打钩。
注意 在输出结果数组后,还要对结果区域的学号列从小到大进行排序!!
以上知识点在VBA175例 194多列求和通用解法 记录行号二次循环法深入讲解 详细讲解
我的天哪 才小一百行了代码量 就解决了今天的复杂问题,VBA永远的神 !
好了,今天有关在Excel中多子表行列转换 VBA数组字典高阶解法的问题便介绍到这,大家赶紧实际操作练习一下吧,有不懂的问题可以留言问小编呦!感谢支持Excel880工作室,还请多多转发,持续关注我们呀!
特别推荐使用VBA代码助手,再也不怕记不住代码
最后,像大家推荐郑老师的VBA代码助手(下载地址vbayyds.com)
只需输入关键字,就能将收藏过的代码整个带出来,太赞了
比如上面代码中的字典 数组输出之类都只需要打几个字就出来
我们可以用代码助手看一下今天这个案例 我下午写了多少代码量
案例文件下载地址
请私信回复75630
- 上一篇: 22.C# 多维数组(多维数组对象)
- 下一篇: 机器学习实战:Numpy多维数组的创建、索引与切片
猜你喜欢
- 2024-09-15 Scala学习六之数组和元组了解(scala 字符串数组)
- 2024-09-15 数据分析和机器学习框架底层工具NumPy的数组操作-索引和切片
- 2024-09-15 【Python数据分析系列】全面梳理数组维度转化和堆叠操作(案例)
- 2024-09-15 ST 语言数组处理(st语言数组array)
- 2024-09-15 机器学习实战:Numpy多维数组的创建、索引与切片
- 2024-09-15 22.C# 多维数组(多维数组对象)
- 2024-09-15 VBA永远的神 3天工作1秒完成 20万行料号BOM表处理 数组字典案例
- 2024-09-15 C语言二维数组(c语言二维数组排序)
- 2024-09-15 Excel数据透视表、vlookup、数组公式、VBA自定义函数一对多查找
- 2024-09-15 程序大佬的秘密——C语言之数组二三事
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)