VBA数组与字典解决方案第46讲:进行数据的模糊分类汇总

大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总。在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这个知识点,来完成一个数据的模糊分类汇总.也就是说我们要根据事先分好的类别,在源数据中找到类似数据,然后将这些数据进行汇总.

实例,我们看下面的数据:

A列和B列最为数据源,在数据源中分别找到型号中类似于W,H,K的数据,分别填到后面相应的数据列中.看起来复杂,但只要逻辑关系理顺好,一样可以顺利的完成,我们看下面我给出的代码:

Sub mynzsz_46() '第46讲 利用字典和数组,进行数据的分类模糊汇总

Dim myDic(3)

Sheets('46').Select

'定义三个字典用来装要分类的三种数据

Set myDic(1) = CreateObject('Scripting.Dictionary')

Set myDic(2) = CreateObject('Scripting.Dictionary')

Set myDic(3) = CreateObject('Scripting.Dictionary')

'一次性装入源数据

myarr = Range('a2:b' & Range('a2').End(4).Row)

Range('d2:k' & Range('a2').End(4).Row).ClearContents

'将条件装入数组

mybrr = Array('W', 'H', 'T')

'分类汇总

For i = 1 To UBound(mybrr) + 1

For x = 1 To UBound(myarr)

If InStr(myarr(x, 1), mybrr(i - 1)) > 0 Then

myDic(i)(myarr(x, 1)) = myDic(i)(myarr(x, 1)) + myarr(x, 2)

End If

Next

Next

'回填数据

mycrr = Array(myDic(1).keys, myDic(1).items)

Range('d2').Resize(myDic(1).Count, 2) = Application.Transpose(mycrr)

mycrr = Array(myDic(2).keys, myDic(2).items)

Range('g2').Resize(myDic(2).Count, 2) = Application.Transpose(mycrr)

mycrr = Array(myDic(3).keys, myDic(3).items)

Range('j2').Resize(myDic(3).Count, 2) = Application.Transpose(mycrr)

'释放字典内存

Set myDic(1) = Nothing

Set myDic(2) = Nothing

Set myDic(3) = Nothing

End Sub

代码截图:

代码讲解:

1 上述过程中实现了将源数据的模糊分类汇总,最后将数据回填到结果区域.

2 '定义三个字典用来装要分类的三种数据

Set myDic(1) = CreateObject('Scripting.Dictionary')

Set myDic(2) = CreateObject('Scripting.Dictionary')

Set myDic(3) = CreateObject('Scripting.Dictionary')

上述代码中我定义了三个字典,这三个字典的名称是一个数组,这样处理的好处可以在我后面的代码中体现,用一次循环就可以完成需求.

3 '一次性装入源数据

myarr = Range('a2:b' & Range('a2').End(4).Row)

Range('d2:k' & Range('a2').End(4).Row).ClearContents

上述代码将源数据装入了数组,并清空了待填的数据区域.

4 '将条件装入数组

mybrr = Array('W', 'H', 'T')

用一个数组来装要分类的条件

5 '分类汇总

For i = 1 To UBound(mybrr) + 1

For x = 1 To UBound(myarr)

If InStr(myarr(x, 1), mybrr(i - 1)) > 0 Then

myDic(i)(myarr(x, 1)) = myDic(i)(myarr(x, 1)) + myarr(x, 2)

End If

Next

Next

这里大家注意一下,代码中应用了一个嵌套循环来完成目的,内层循环实现了数据汇总,外层循环实现了数据分类,分类标准是在源数据中是否有条件的字符存在.INSTR是判断的函数。

6 回填数据

mycrr = Array(myDic(1).keys, myDic(1).items)

Range('d2').Resize(myDic(1).Count, 2) = Application.Transpose(mycrr)

mycrr = Array(myDic(2).keys, myDic(2).items)

Range('g2').Resize(myDic(2).Count, 2) = Application.Transpose(mycrr)

mycrr = Array(myDic(3).keys, myDic(3).items)

Range('j2').Resize(myDic(3).Count, 2) = Application.Transpose(mycrr)

上述代码进行了数据的回填,这里大家要注意我先把keys, items要先装入一个数组,然后再转置回填.大家留意代码的写法,如果你没有确切的把握,类似问题要按照给出代码进行.虽然数组操作比SQL简单些,但也要尽可能的去复制和修正代码,而不是自己另辟蹊径.

7释放字典内存

Set myDic(1) = Nothing

Set myDic(2) = Nothing

Set myDic(3) = Nothing

上述代码将字典占用内存释放.

先看代码运行结果:

今日内容回向:

1 如何实现利用字典和数组进行数据的模糊分类汇总?

2 在回填数据时,如果我直接利用Range('d2').Resize(myDic(1).Count, 2) = Application.Transpose(myDic(1).keys, myDic(1).items) 是否可以?

(0)

相关推荐

  • 三级下拉菜单的制作过程

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日的内容是第56讲,利用字典的嵌套,完成三级下拉菜单的制作. 在第54讲中我讲了利用字典的嵌套,完成二级下拉菜单的制作,很多朋友来信反馈说不过瘾,可 ...

  • 数组字典

    大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法.大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容.大家已经注意到了 ...

  • 下拉框 将数组

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

  • 33、数组与字典解决方案第46讲利用字典和数组,进行数据的模糊分类汇总

    ​大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总.在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这 ...

  • 32、VBA数组与字典解决方案第39讲实现双条件数据汇总

    大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法.大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容.大家已经注意到了 ...

  • 34、VBA数组与字典解决方案51字典嵌套下拉框

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

  • Excel VBA入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...

  • 张旭光42讲行书技法讲座,第4-6讲

    张旭光行书技法讲座第4讲 张旭光行书技法讲座第5讲 张旭光行书技法讲座第6讲 !

  • 张站立《曹全碑》技法公开课|4-6讲

    张站立<曹全碑>技法公开课第4讲 张站立<曹全碑>技法公开课第5讲 张站立<曹全碑>技法公开课第6讲

  • 第46讲:【快速蒙版工具】ps零基础到精通教学视频课程

    第46讲:【快速蒙版工具】ps零基础到精通教学视频课程

  • 第46讲 第十篇:寒疝、宿食病证治 小结

    第46讲  第十篇:寒疝.宿食病证治 小结 同学们好,今天是让我们铭记的日子,党的十六大终于胜利召开.让我们共同祝贺并大会圆满成功.上午的三个学时,我是这么安排的,用一个学时把第十篇寒疝宿食 好,我们 ...

  • 中考文学常识解析!中考语文(第46讲)

    中考文学常识解析!中考语文(第46讲)