VBA编程练习04. 在多个单元格区域查找多个数

论坛 期权论坛 期权     
完美Excel   2019-7-21 15:37   5138   0
学习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.有时候,灵活使用工作表函数不失为一个好技巧。

下面是代码的图片版:



你有更好的代码吗?

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:195
帖子:39
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP