大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第54讲内容:利用字典和数组,提取C列相同但B列不相同的数据,回填时按行分开。

其实字典本身就是一个数组,一个看视很简单的数组,有两个元素KEYS和ITEMS,在讲字典时经常会用到它自身的一个特性:用exists非常方便的判断出一个值是否在字典中存在,也给我们的实际工作处理带来了很多遐想的空间。各种组合可以灵活运用,今日要讲的实例是将一个工作表中C列相同但B列不同的值提取出来并按行回填。

数据如下:

我们看列的数据:对于C列相同的值我们将提取出B列不同的值,如北京,对应的东城区和西城区,天津对应的是和平区、河东区、河西区、南开区等等,那么如何让VBA代码自动完成这种计算呢?我们今日将利用字典来完成,同时为了读者朋友在实际工作中不同的需求,我在程序设计时留出些余地给大家发挥。下面看我给出的代码设计:

Sub mynzsz_54() '第54讲 利用字典和数组,提取C列相同但B列不相同的数据,回填时按行分开

Sheets("54").Select

myarr = Range("a1:c" & Range("a1").End(xlDown).Row)

Set mydic = CreateObject("scripting.dictionary")

'将数据放到字典中,以##分割每个县及出现的行

For i = 2 To UBound(myarr)

If mydic.exists(myarr(i, 3)) Then

mydic(myarr(i, 3)) = mydic(myarr(i, 3)) & "##" & myarr(i, 2) & "#" & i

Else

mydic(myarr(i, 3)) = myarr(i, 2) & "#" & i

End If

Next

n = 2

[e:r].Clear

[e1] = "地市级": [f1] = "县、县级市"

'回填数据

For Each K In mydic.keys

If InStr(mydic(K), "##") > 0 Then

Cells(n, 5) = K

For i = 0 To UBound(Split(mydic(K), "##"))

Cells(n, 6 + i) = Split(Split(mydic(K), "##")(i), "#")(0)

Next

n = n + 1

End If

Next

End Sub

代码截图:

代码解析:

1 上述代码实现了C列数据相同,B列数据的按行输出。

2 myarr = Range("a1:c" & Range("a1").End(xlDown).Row)

上述代码将数据装入数组

3 Set mydic = CreateObject("scripting.dictionary")

'将数据放到字典中,以##分割每个县及出现的行

For i = 2 To UBound(myarr)

If mydic.exists(myarr(i, 3)) Then

mydic(myarr(i, 3)) = mydic(myarr(i, 3)) & "##" & myarr(i, 2) & "#" & i

Else

mydic(myarr(i, 3)) = myarr(i, 2) & "#" & i

End If

Next

上述代码将数据组合成类似于:东城区#2##西城区#3、和平区#4##河东区#5##河西区#6##南开区#7

4 For Each K In mydic.keys

If InStr(mydic(K), "##") > 0 Then

Cells(n, 5) = K

For i = 0 To UBound(Split(mydic(K), "##"))

Cells(n, 6 + i) = Split(Split(mydic(K), "##")(i), "#")(0)

Next

n = n + 1

End If

Next

上述代码利用split函数,首先在键的集合中建立一个For Each循环;对于对应于键的每一个键值进行判断。

如果存在"##",那么此键值(这个键值此时是一个字符串),将被按"##"分割成一个数组,这个数组是一个一维数组,如"和平区#4##河东区#5##河西区#6##南开区#7"被分割成("和平区#4

利用access创建数据字典_VBA数组与字典解决方案54讲:利用字典和数组提取数据并按行回填...相关推荐

  1. 利用Python让工作更轻松 -项目学习实例之一,从文本文件中提取数据

    王洪波 荣成市石岛实验中学 Python教学开展有几年的时间了,可是大多学生并不感兴趣,只是记了些语法,敲了教材上的代码,至于Python能干什么,学了Python有什么用,知之甚少.我们学习语言并不 ...

  2. vba 数组赋值_VBA数组与字典解决方案第18讲:VBA中静态数组的定义及创建

    大家好,我们今日继续讲解VBA数组与字典解决方案,今日讲解第18讲:VBA数组如何定义,又该如何创建呢? 从这一讲开始,我们开始进入VBA数组阶段,VBA数组和工作表数组有着不同的意义,在很大程度上, ...

  3. 建立数组并写入数据_VBA数组与字典解决方案第37讲:在VBA中字典的应用

    大家好,我们今日继续讲解VBA数组与字典解决方案第37讲内容:在VBA中字典的应用.对于字典,也许许多的朋友对此比较陌生,在有的语言里字典也称之为MAP,应用也是比较广泛的. 字典,其实就是一些&qu ...

  4. asp利用dictionary创建二维数组

    这是asp利用dictionary创建二维数组的例子,这样做的优点是: 1.数组下标可以是字符串 2.长度不是固定的 <% '================================== ...

  5. 绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作. 在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代 ...

  6. vba 数组赋值_VBA数组与字典解决方案第31讲:VBA数组声明及赋值后的回填方法

    大家好,我们今日继续VBA数组与字典解决方案,今日讲解VBA数组的声明,一些朋友会问了:数组都讲了这么长时间了,怎么才讲声明啊?是的,有些知识不到一定的程度即使讲了,大家也不能深入的理解,只有到了一定 ...

  7. vba数组如何精确筛选_VBA数组与字典解决方案第8讲:为什么要采用数组公式(二)...

    大家好,今日继续讲解VBA数组与字典解决方案,今日的内容是第8讲.在上一讲的数组专题中,我详细地讲了利用数组公式的好处,或许有的朋友还没有充分理解,今日继续给大家讲解.我在讲解中,力争每篇文章可以作为 ...

  8. tp5数组为什么要中括号_VBA数组与字典解决方案第7讲:为什么要采用数组公式(一)...

    VBA数组与字典解决方案第7讲:为什么要采用数组公式(一) 今日继续讲解VBA数组与字典解决方案第7讲,在前几讲的数组应用中我们深入地讲解了工作表数组和数组公式,以及数组维数扩展的意义.那么,有的朋友 ...

  9. 数组字典_VBA数组与字典解决方案第1讲:函数,公式,数组,数组公式的概念...

    各位好,从今日开始,在平台上我将推出VBA解决方案系列丛书的第三部:VBA数组与字典解决方案,这套书从工作表数组开始讲解,逐渐过渡到VBA数组和VBA字典,在这部教程中,大家会看到VBA数组.字典在各 ...

  10. 数组字典_VBA数组与字典解决方案第34讲:数组的传递

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解的是第34讲:数组的传递.在应用数组的时候,我们往往需要要把数组的值由一个数组传递给另外一个数组,就如同变量的传递一样: A=B '把B值赋给 ...

最新文章

  1. python列表题目_day5.python列表练习题
  2. 一招教会你处理Flutter中的数据
  3. Snackbar源码分析
  4. struct 类型指针技巧
  5. linux文件需求管理,CaliberRM 需求管理系统
  6. springcloud config 分布式配置中心
  7. vspythonqt混合_PYQT5 vscode联合操作qtdesigner的方法
  8. i2c-toos 交互数据_什么是CD-i(交互式光盘)?
  9. ctd数据 matlab,基于auv的ctd数据处理方法
  10. 设计灵感|移动应用的可视化数据图表都是怎么设计的?
  11. NHibernate 3.x新功能实践(二) QueryOver(下)
  12. c#加粗代码_C# 8中的可空引用类型
  13. python适合女生吗-女孩纸适合做数据分析吗?
  14. MS SQL Server对表的设计修改时不允许保存
  15. 《PMP学习笔记》1.3 五大过程组十大知识领域
  16. 化学实用计算机技能,实用化学化工计算机软件基础
  17. 最新:GoDadddy注册的域名,如何将域名解析设置到腾讯邮箱(MX记录)
  18. 让云助力企业数字化转型
  19. HTML综合之实现耀炎食品有限公司网页
  20. 一千瓶酒有一瓶酒有毒药,问你最少用多少只老鼠可以找出那瓶毒酒? 老鼠毒发的时间在两小时内,要求在两个小时内找出毒酒。

热门文章

  1. TiDB 在平安核心系统的引入及应用
  2. 软件工程网络15个人作业3--案例分析
  3. 大众点评Cat源码分析(四)——Report读写逻辑
  4. lr_save_var() 截取任意字符串长度,以参数形式输出(参数转变量)
  5. 最新Spring下载网址
  6. tomcat 启动报错 解决办法 A child container failed duringnbsp
  7. 有没有这样一种程序员写代码的利器
  8. F5获取vs、pool、member当前、峰值、总计连接数的oid
  9. SENDMAIL引发的血案
  10. 智能平台管理接口 (IPMI)