大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法。大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容。大家已经注意到了,字典的应用和数组是密不可分的。要想理解字典的应用,必须要掌握数组的用法,对于数组的理解要透彻后才能谈到字典的理解,字典本身其实非常的简单,就是要灵活的利用他的键和键值。

我们今日的内容是实现双条件的数据汇总,如下的数据,我们要根据A列和B列的值对C列数据实现汇总求和:

怎么能做到呢?我刚才讲过,对于字典的本身定义非常的简单,要深入的理解键和键值,巧妙的应用。下面看我给出的代码:

Sub mynzsz_39() '39 利用数组与字典,实现双条件数据汇总的方法

Dim myarr

Sheets("39").Select

'将数据装入数组

myarr = Range("a2:c" & Range("c2").End(xlDown).row)

Set myDic = CreateObject("Scripting.Dictionary")

For i = 1 To UBound(myarr, 1)

'利用"丨"将数组的第一第二列合并,以利用查询

mykey = myarr(i, 1) & "丨" & myarr(i, 2)

'如果存在,合并值,如果不存在建立新的

If Not myDic.exists(mykey) Then

myDic(mykey) = myarr(i, 3)

Else

myDic(mykey) = myDic(mykey) + myarr(i, 3)

End If

Next

Range("g1:I1") = Array("型号", "类别", "数量")

'提取键数组,这个时候的元素是用"丨"隔开的,用replace分别替换掉左右的字符

myarr1 = Array(myDic.Keys)

Range("g2").Resize(myDic.Count, 2) = Application.Transpose(myarr1)

Range("g2").Resize(myDic.Count, 1).Replace "丨*", "", xlPart

Range("h2").Resize(myDic.Count, 1).Replace "*丨", "", xlPart

'提取键值数组

myarr2 = Array(myDic.items)

Range("I2").Resize(myDic.Count, 1) = Application.Transpose(myarr2)

End Sub

代码截图:

代码讲解:

1 上述代码实现了根据数据的A列和B列进行汇总求和的功能,实现类似的办法可以用以前我讲过的方法代码循环,还可以用数据库,大家可以试着比较一下。

2 '将数据装入数组

myarr = Range("a2:c" & Range("c2").End(xlDown).row)

上述代码实现将数据装入数组,以利用后续的操作。

3 mykey = myarr(i, 1) & "丨" & myarr(i, 2)

上述代码将数组的第一个元素和第二个元素合并,作为一个键,然后赋值

4 '如果存在,合并值,如果不存在建立新的

If Not myDic.exists(mykey) Then

myDic(mykey) = myarr(i, 3)

Else

myDic(mykey) = myDic(mykey) + myarr(i, 3)

End If

记住,上面的代码是判断键存在与否的标准语句,大家要利用好,这也是一个标准的写法。

5 myarr1 = Array(myDic.Keys)

Range("g2").Resize(myDic.Count, 2) = Application.Transpose(myarr1)

将键组成的数组回填给单元格,注意这里回填的是两列,下面还有对这两列分别处理

6 Range("g2").Resize(myDic.Count, 1).Replace "丨*", "", xlPart

上述语句去右留左。

Range("h2").Resize(myDic.Count, 1).Replace "*丨", "", xlPart

上述语句去左留右。

上述代码也可以作为标准的语句进行写法的记忆。

下面看代码的运行:

今日内容回向:

1 如何实现双列的数据汇总?

2 在字典中双列的汇总最关键的步骤是什么?

sql分别对两列数据求和以不同的条件_利用数组与字典,实现双条件数据汇总的方法...相关推荐

  1. mysql数据库计算两列数据的和_在sql中对两列数据进行运算作为新的列操作

    如下所示: select a1,a2,a1+a2 a,a1*a2 b,a1*1.0/a2 c from bb_sb 把a表的a1,a2列相加作为新列a,把a1,a2相乘作为新列b,注意: 相除的时候得 ...

  2. sql同时操作两列_SQL简单查询

    1. 基本的查询语句 selece<列名1>,<列名2>,.... →select子句 from<表名>: →from子句 -- 在student表中查询出姓名.性 ...

  3. matlab 两列数据相乘,在EXCEL中,两列完全相同的数据,求和结果不一样??单元格两列相乘的公式...

    excel表格中怎样求和以及计算两列的乘积 一.这可以用SUMPRODUCT函数来完成. 二.比如是要 =A1*B1 A2*B2 .....A100*B100,则这个公以简化成 =SUMPRODUCT ...

  4. 如何排两列的序计算机考试,excel中两列数据怎么一起排序?excel两列同时排序的方法...

    excel中两列数据怎么一起排序?excel两列同时排序的方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在使用Excel对数列排序时,有时会碰到需要对两列数据同时排序,下面就跟大家详细介绍操作方 ...

  5. sql 数据库前两列值乘_懂EXCEL就会SQL,从此查数不求人

    小白如何学习SQL语言? 大部分的文章都是先从意义原理开始讲,再讲环境搭建.还没看到怎么操作就放弃了. 大部分人学习SQL的需求是什么? 而且,大多数人的使用场景是数据库是现成的,这就不涉及数据库的安 ...

  6. pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号

    pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号 目录 pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号

  7. c#读取excel两列数据并绘制xy曲线_EXCEL绘制三Y轴图表

    在日常工作中,经常会使用EXCEL进行数据的处理与分析,并绘制一些常用的数据可视化图表,柱状图.散点图.曲线图等啥的,总体来说,Excel的数据可视化做的还是非常优秀的,可以非常方便的绘制常用的图表, ...

  8. Excel 中如何找出两列数据中不重复的记录

    现在有两列数据,要在 A 列中找出 B 列中没有的记录,在 B 列中找出 A 列中没有的记录.现在和大家分享一下这个方法. 我们先用一个简单的例子看一下.现在有两列数据,可以是分别在不同的数据单(sh ...

  9. 找出两列数据的差集_excel快速查找数据差异项

    近来在网上看到一则查找两列数据差异项的方法,试着做发现07版的excel根本就没有那个功能,而且设置过程也很麻烦,有那个功夫,不如去网上找函数公式解决.今天给大家分享一下用函数组合公式和自定义函数公式 ...

  10. exce中让两列数据一一对应_表格数据对比眼花缭乱、痛苦不堪,找对方法,1秒搞定...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力!#学问分享官# 在我们日常工作中,经常碰到两列数据或者两个表格对比,找出差异数据,如果表格的数据太多,靠肉眼一行行对比,即使 ...

最新文章

  1. 【CSS3教程】CSS3基础常用技巧实例集合
  2. 如何对一个软件项目的成本进行评估或估算?
  3. linux压缩命令 实例子,Linux下的tar压缩解压缩命令详解及使用实例分析
  4. Qt 中Treewidget添加右键菜单
  5. ArcGIS编辑操作的常用快捷键一览表
  6. 河南城镇化争植“智慧”基因
  7. 剑指Offer之不用加减乘除做加法
  8. 遇冷的斗鱼直播,还“斗”得动吗?| 畅言
  9. 状态(State)模式
  10. Faster RCNN论文总结
  11. 使用Smart3D进行倾斜摄影实景建模详细教程
  12. 神灵武装908服务器维护,神陵武装127服银河之心开服时间表_神陵武装新区开服预告_第一手游网手游开服表...
  13. 今日恐慌与贪婪指数为10 恐慌程度有所上升
  14. 【搬运】1 简谱和基本知识
  15. 请提前为你的眼泪找一个合适的借口
  16. Matlab函数参考
  17. Google Pay India(UPI) 印度
  18. Linux 服务器上传下载文件到阿里网盘
  19. 问题描述:宏代码导致无法打开文件
  20. 5.22非常虚伪的集训总结

热门文章

  1. RHEL6.3基本网络配置(4) 其它常用网络配置文件
  2. linux虚拟机上挂载U盘
  3. Sublime Text3 安装svn插件遇到的问题
  4. [LeetCode]题解(python):067-Add Binary
  5. 关于Scala和面向对象的函数式编程
  6. 【渗透】浅谈webshell隐藏
  7. Python-print学习
  8. 1.4补充 三态缓存(tristate buffer)与 多路复用器(Multiplexers)
  9. Html页面增加返回顶部图标和隐藏出现
  10. 南阳oj-----Binary String Matching(string)