学习Excel技术,关注微信公众号:
excelperfect
本次练习题
如下图1所示的工作表,在单元格区域A2:F2中放置的是要查找的数值;在列H至列BF、行9至行30是被查找的区域,这个区域分17个小区域,每个区域3列,其单元格中要么为空,要么放置着一些数值。
图1
现在,要在这17个小区域中查找单元格区域A2:F2中的值并将找到的数值的个数输入到其下方第32行的单元格中。如何使用VBA代码实现?
VBA代码
先给出代码,再细细解释。代码如下:
Sub VBAEx04()
Dim rng(17) As Range
Dim i As Integer, j As Integer
Dim iCount As Integer
For i = 0 To 16
Set rng(i) =Range("H10").Offset(, i * 3).Resize(22, 3)
Next i
For i = 0 To 16
iCount = 0
For j = 1 To 6
iCount = iCount WorksheetFunction.CountIf(rng(i), Cells(2, j))
Next j
Cells(32, 9 i * 3).Value = iCount
Next i
End Sub
问题表面上看起来很复杂,但代码却并不多。
其中,代码:
For i = 0 To 16
Set rng(i) =Range("H10").Offset(, i * 3).Resize(22, 3)
Next i
将17个小区域赋值给变量rng(i)。因为每3列一个小区域,所以很容易找到规律。以第1个小区域左上角为基点,每次循环向右偏移3的倍数列,移到每个小区域的左上角,然后将区域扩展到22行3列,即得到每个小区域。
代码:
WorksheetFunction.CountIf(rng(i),Cells(2, j))
使用工作表函数COUNTIF函数来统计单元格区域中指定值的数量。Cells(2,j)分别查找A2至F2中的数值,将找到的数值的个数累加到变量iCount中。最后得到每个小区域中包含的数值的个数,然后将得到的个数值输入到第32行中相应单元格中。
代码中的外层循环遍历每个小区域,内层循环遍历A2:F2中的值。
小结
1.不要被工作表的表面所迷惑,要从中找到规律。
2.有时候,灵活使用工作表函数不失为一个好技巧。
下面是代码的图片版:
你有更好的代码吗?