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

2019-07-23 17:24:25 浏览数 (1)

学习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 人点赞