员工管理 多条件查询

1 功能描述

img

在查询条件区输入相应条件,如果相应值为空,表示不包含此属性条件。

点击[查询]按钮,下方表格会显示查询结果。


2 主要步骤

步骤1:清空旧的查询结果

步骤2:获取要查找的条件

步骤3:遍历存储数据

步骤4:判断是否符合条件

步骤5:符合条件,则添加到查询结果


3 完整代码

Sub query1()
    Dim name As String
    Dim rowIndex As Integer
    Dim rowIndexDest As Integer
    Dim flag As Boolean
    
    '步骤1:清空旧的查询结果
    rowIndexLast = Worksheets("B01员工管理").Range("B21").End(xlDown).Row
    '判断是否存在数据行
    If rowIndexLast <> 22 Then
        Worksheets("B01员工管理").Range("B23:G" & rowIndexLast).ClearContents
    End If
    
    
    '步骤2:获取要查找的条件:姓名、性别、出生日期begin、出生日期end
    name = Worksheets("B01员工管理").Range("C16").Value
    gender = Worksheets("B01员工管理").Range("E16").Value
    birthBegin = Worksheets("B01员工管理").Range("C17").Value
    birthEnd = Worksheets("B01员工管理").Range("E17").Value
    
    '步骤3:遍历存储数据
    rowIndexDest = 23
    For rowIndex = 2 To Worksheets("A01员工").Range("A1").End(xlDown).Row
        '步骤4:判断是否符合条件
        flag = True
        flag = flag And ((name = "") Or (InStr(Worksheets("A01员工").Range("B" & rowIndex).Value, name) = 1))
        flag = flag And ((gender = "") Or (gender = Worksheets("A01员工").Range("C" & rowIndex).Value))
        flag = flag And ((birthBegin = "") Or (birthBegin <= Worksheets("A01员工").Range("E" & rowIndex).Value))
        flag = flag And ((birthEnd = "") Or (DateAdd("d", 1, birthEnd) > Worksheets("A01员工").Range("E" & rowIndex).Value))
        
        '步骤5:符合条件,则添加到查询结果
        If flag Then
            Worksheets("B01员工管理").Range("B" & rowIndexDest & ":G" & rowIndexDest).Value = Worksheets("A01员工").Range("A" & rowIndex & ":F" & rowIndex).Value
            rowIndexDest = rowIndexDest + 1
        End If

    Next
    
    MsgBox "查询成功。", Title:="小步教程www.xiaobuteach.com"
        
End Sub


4 代码讲解

If rowIndexLast <> 22 Then 用于判断旧的查询结果为空时,避免使用End会定位到工作表的最后一行(第100多万多条)的情况。

ClearContents用于清单单元格中的内容。

Flag的判断逻辑,默认为True表示符合条件,然后依次判断各个输入,如果为空则符合,如果不为空则判断则;各字段判断用And,表示需满足多个条件。最后判断完如果仍为True,才添加到查询结果。

rowIndexDest初始为结果表数据行的第1行的行号;rowIndexDest = rowIndexDest + 1表示符合条件时,目标行号才会继续加1。


5 测试用例

正常用例1:所有查询条件为空,则查询结果为存储表所有数据。

正常用例2:依次输入各单个查询条件,例如,性别为女,则查询结果根据单个条件查询。

正常用例3:输入多个查询条件,例如,性别为女且出生日期从2000/4/4,出生日期到2001/8/8,则查询结果根据这三个条件进行查询。