分享

VBA字典,精准控制字典键值回填的方法

 excel05 2019-10-03

大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第41讲,在利用字典时,精准控制字典键值回填的方法。通过我前几讲的讲解,大家发现了字典利用的妙处,这种妙处往往是不可说的,给我们的工作带来了极大的便利,让我们的工作可以瞬间完成。做到秒杀。但问题来了,如果我想精确的控制键值的回填,该如何做到呢?之前的讲解中,我总是在利用数组的转置,一次完成,现在我需要的是精准的控制,是否可以做到呢?答案是肯定的。

我们看下面的数据,我们要实现按A列汇总后,将数据回填到E、 F列时要一个一个的填入,以利于我们在某些程序中能对数据有针对性的处理。

VBA字典,精准控制字典键值回填的方法

这里我们要利用到count属性了,下面我们看我给出的代码:

Sub mynzsz_41() '第41讲 在利用字典时,精准控制字典键值回填的方案

Dim mydic, myarr

Sheets('41').Select

Set mydic = CreateObject('scripting.dictionary')

myarr = Sheets('41').UsedRange

For i = 2 To UBound(myarr)

'当mydic(arr(i,1))没有值时,默认是0,通过下面进行累加。

mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)

Next

'为字典键值的回填做区域准备

Range('e:f').ClearContents

'将表头A1,B1复制到e1,f1单元格

Sheets('41').Range('a1:b1').Copy Sheets('41').Range('e1')

'将键去重,纵向写入到单元格

Sheets('41').Cells(2, 'e').Resize(mydic.Count, 1) = Application.Transpose(mydic.Keys)

For i = 2 To mydic.Count + 1

'循环输入字典键对应的值到f列,逐一找到键的对应键值

Sheets('41').Cells(i, 'f').Value2 = mydic(Sheets('41').Cells(i, 'e').Value)

Next

'释放内存

Set mydic = Nothing

End Sub

代码截图:

VBA字典,精准控制字典键值回填的方法

代码讲解:

1 上述代码实现了将字典数据回填时精准控制每个键值的目的,这个过程中主要利用了mydic.Count 的属性。

2 myarr = Sheets('41').UsedRange

此语句将数据填入数组。注意此语句的写法,不能用Sheets('41').[a1].UsedRange,大家要注意,如果用[A1],那么写法是 Sheets('41').[a1]. CurrentRegion。

3 For i = 2 To UBound(myarr)

'当mydic(arr(i,1))没有值时,默认是0,通过下面进行累加。

mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)

Next

上述语句中实现了,按字典键的汇总,此处有多种写法,大家要灵活运用。

4 Sheets('41').Cells(2, 'e').Resize(mydic.Count, 1) = Application.Transpose(mydic.Keys)

上述代码先将键回填到工作表中。以便利用键来找键值

5 For i = 2 To mydic.Count + 1

'循环输入字典键对应的值到f列,逐一找到键的对应键值

Sheets('41').Cells(i, 'f').Value2 = mydic(Sheets('41').Cells(i, 'e').Value)

Next

上述循环语句利用了键来找键值,然后回填工作表。由于键的数量是mydic.Count ,所以可以直接用一个FOR NEXT循环。

6 如果我们在在实际工作中需要针对每一个键值有精确处理的话,就可以在上述语句中实现了。

下面看代码的运行:

VBA字典,精准控制字典键值回填的方法

今日内容回向:

1 如何实现数据回填的精准控制?

2 这种方法和利用数组转置回填有何不同?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多