搜索
写经验 领红包
 > 设计

将字典的值取出来构造成列表(将字典中所有的key值存到列表a中)

导语:将字典中键值item定义为类,利用类的属性处理实际问题

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第63讲内容:将字典中键值item定义为类,利用类的属性处理实际问题。

在之前的讲解中,我讲过,对于字典来说,最重要是对键和键值的理解,对于键来说,最主要的是没有有重复值,我们利用这点解决了排重的很多问题;对于键值来讲,要理解它可以装载任何的数据类型的数据、数组、甚至是字典。今日我讲解的是ietm装载类。

我们在利用字典的时候,往往将键作为单独数据,以外的数据装入数组然后赋值给键值,这种处理方法比较复杂,为了寻求一种更好的办法,我们可以用类的方法,将数据放到类的属性中。

类是用户自己定义的对象和过程,并组织在一起,该对象有自己的属性。我们今日的内容只是简单的利用类的属性,来解决我们的实际问题。

实例:如下A列到D列数据,我们要提取数据的同时完成计算:序列4=序列1+序列2

序列5=序列3+序列2。如何解决呢?

思路分析:上述过程如果用数组实现也是可以的,将序列1,序列2,序列3数据放到数组中,作为键值装入字典,然后再提取即可,今日我们用类的方法解决,我们先定义一个类,将数据序列1,序列2,序列3的数据作为类的属性,然后将类直接作为键值装入字典。

下面看我的代码实现:

Sub mynzsz_63() '第63讲 将字典中键值item定义为类,利用类的属性处理实际问题

Sheets("63").Select

Dim uu As myitem

'将数据装入数组

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

Set mydic = CreateObject("Scripting.Dictionary") '后期绑定引用字典对象

'将数据装入字典,键值是类,利用类的属性完成字典数据的赋值

For i = 1 To UBound(myarr)

Set uu = New myitem

uu.ido = myarr(i, 2)

uu.idt = myarr(i, 3)

uu.ids = myarr(i, 4)

mydic.Add myarr(i, 1), uu

'mydic(myarr(i, 1)) = uu '注意这种写法不可以

Set uu = Nothing

Next

'清空数据回填

[f:h].Clear

[f1:h1] = Array("名称", "序列4", "序列5")

'回填过程中利用类的属性取得数据

i = 2

For Each K In mydic.keys

Cells(i, 6) = K

Cells(i, 7) = mydic(K).ido + mydic(K).idt

Cells(i, 8) = mydic(K).idt + mydic(K).ids

i = i + 1

Next

Set mydic = Nothing

End Sub

代码截图:

代码解析:

1 上述代码实现了:先定义一个new类uu,将数据序列1,序列2,序列3的数据作为类的属性ido、 idt、 ids,然后将类直接作为键值装入字典。在提取数据时直接可以提取属性值参与运算。

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

上述代码将数据存入数组

3 for i = 1 To UBound(myarr)

Set uu = New myitem

uu.ido = myarr(i, 2)

uu.idt = myarr(i, 3)

uu.ids = myarr(i, 4)

mydic.Add myarr(i, 1), uu

'mydic(myarr(i, 1)) = uu '注意这种写法不可以

Set uu = Nothing

Next

上述代码实现了字典的赋值,键myarr(i, 1),对应的键值是uu ,而ido、idt、ids是三个属性值。

这里要注意的是'mydic(myarr(i, 1)) = uu,这种写法不可以,要留意。

4 For Each K In mydic.keys

Cells(i, 6) = K

Cells(i, 7) = mydic(K).ido + mydic(K).idt

Cells(i, 8) = mydic(K).idt + mydic(K).ids

i = i + 1

Next

数据的回填过程,利用了类的属性直接提出数据相加减。

下面看代码的运行:

今日内容回向:

1 如何将数据赋值给类的属性?

2 如何将类赋值给字典?

本文内容由快快网络小馨创作整理编辑!