![f756e4857f1cb5c9a05ada218faab510.png](https://i-blog.csdnimg.cn/blog_migrate/5cd00e12b78f69d9caa65e18175ad2fd.jpeg)
大家好,今日推出常用“积木”过程案例分享第307期,今日内容是利用字典,利用VBA计算除以7余数是5的数。提供给大家的这些内容是我多年经验的记录,来源于我多年的实践。大家在学习VBA的时候,可以把这些代码块作为一块块的积木对待,平时积累,用时拿来修正、组合。这就是我的“积木编程”的思想,这些讲解就是我推出的“积木”方案,希望大家加以利用。最近代码多是出自我的第三套教程”VBA数组与字典解决方案”。
![435af83bdb91a5550541ecd2755392b5.png](https://i-blog.csdnimg.cn/blog_migrate/b1af4956f30d249f0e02e71e113c3f21.jpeg)
Sub mynzsz_74()
Sheets("74").Select
Set mydic = CreateObject("Scripting.Dictionary")
For i = 1 To 100
mydic.Add i & IIf(i Mod 7 = 5, "@", ""), ""
Next
[a:a].ClearContents
[a1] = "除以7余5的数"
myarr = WorksheetFunction.Transpose(Filter(mydic.Keys, "@"))
[a2].Resize(UBound(myarr), 1) = myarr
[a:a].Replace "@", ""
Set mydic = Nothing
MsgBox "ok!"
End Sub
代码讲解:
1)上述代码,首先在1到100的数据内建立一个循环,在循环的过程中,对每个数进行计算,计算的时候用MOD,当符合我们要求的数据,我们在后面加上标识@,放入字典中。循环结束后提取字典键中含有标识@的数据,在回填数据的时候将标识去掉。
2) For i = 1 To 100
mydic.Add i & IIf(i Mod 7 = 5, "@", ""), "" '注意IIF的用法,类似于工作表函数的IF。符合条件的值做个标识
Next
上述代码实现了给字典的赋值,mydic.Add i & IIf(i Mod 7 = 5, "@", ""), ""
在代码中我给出了注释:注意IIF的用法,类似于工作表函数的IF。符合条件的值做个标识
IIf(i Mod 7 = 5, "@", ""),当i Mod 7 = 5成立时这个值为"@",否则为空。
3) '回填数据
myarr = WorksheetFunction.Transpose(Filter(mydic.Keys, "@"))
上述代码实现了数据的回填,回填的时候用Filter(mydic.Keys, "@")提取其中有"@"标识的数据。
4) '替换去掉标识
[a:a].Replace "@", ""
上述语句将数组中的"@"替换为""。
![6b887e5d9489b6b98b29b21ba63c5393.png](https://i-blog.csdnimg.cn/blog_migrate/cbb11edb6aed7862ff4b914cab50f59c.png)