当前位置:首页 > 技术分析 > 正文内容

4小时的工作,1秒完成,中学体育比赛赛道汇总VBA数组字典进阶

ruisui881个月前 (05-18)技术分析23

投稿作者:凡心之旅 郑广学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

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4153.html

标签: 截取数组
分享给朋友:

“4小时的工作,1秒完成,中学体育比赛赛道汇总VBA数组字典进阶” 的相关文章

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...

22《Vue 入门教程》VueRouter 路由嵌套

1. 前言本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2. 配置嵌套路由实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...

什么是vue脚手架

Vue脚手架是一个用于快速构建Vue.js项目的工具。它提供了一个基本的项目结构和一些常用的开发工具和配置,使开发者能够更快速地开始一个新的Vue.js项目,并且能够更高效地进行开发和调试。Vue脚手架的主要功能包括:1. 项目结构:Vue脚手架提供了一个基本的项目结构,包括源代码目录、静态资源目录...