该代码是一个 VBA 宏,用于筛选符合条件的数据并将结果输出到另一个工作表中。以下是该代码的详细解释:

  1. 定义变量
Dim aData, aRes, aRef, s
Dim i As Long, j As Long, k As Long

定义了四个变量,分别为 aData、aRes、aRef 和 s,以及三个整型变量 i、j 和 k。其中:

  • aData:用于存储数据源工作表中的数据;
  • aRes:用于存储符合条件的数据;
  • aRef:包含了需要筛选的城市名称;
  • s:用于循环遍历 aRef 中的城市名称;
  • i:用于循环遍历 aData 中的每一行;
  • j:用于循环遍历 aData 中的每一列;
  • k:用于记录符合条件的数据的行数。
  1. 读取数据
aData = Worksheets('数据源').Range('a1').CurrentRegion

将数据源工作表中的数据读取到 aData 数组中。

  1. 重新定义数组
ReDim aRes(1 To UBound(aData), 1 To UBound(aData, 2))

根据 aData 数组的维度,重新定义 aRes 数组的大小,以便存储符合条件的数据。

  1. 循环遍历数据
For i = 1 To UBound(aData)
    If aData(i, 3) = '男' Then '判断性别是否为男
        For Each s In aRef '判断是否包含城市关键字
            If InStr(aData(i, 1), s) Then
                k = k + 1
                For j = 1 To UBound(aData, 2)
                    aRes(k, j) = aData(i, j)
                Next
                Exit For '退出循环
            End If
        Next
    End If
Next

循环遍历 aData 数组中的每一行,判断该行的性别是否为'男',如果是,则进一步判断该行的城市名称是否包含 aRef 数组中的关键字。如果包含,则将该行的数据存储到 aRes 数组中,并将 k 的值加 1。同时,在判断到符合条件的城市名称后,使用 Exit For 语句退出循环,以提高代码的效率。

  1. 输出结果
Worksheets('结果表').Select
Cells.ClearContents
Range('a1').Resize(1, UBound(aData, 2)) = aData '读取标题
Range('a2').Resize(k, UBound(aRes, 2)) = aRes
MsgBox 'ok'

将结果输出到结果表工作表中,首先清空该工作表中的所有单元格,然后将 aData 数组中的标题行复制到结果表工作表中,最后将符合条件的数据复制到结果表中。最后,弹出一个消息框提示操作完成。

VBA 宏代码详解:筛选符合条件的数据并输出到另一个工作表

原文地址: https://www.cveoy.top/t/topic/lBbW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录