员工管理 多条件查询
1 功能描述
在查询条件区输入相应条件,如果相应值为空,表示不包含此属性条件。
点击[查询]按钮,下方表格会显示查询结果。
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,则查询结果根据这三个条件进行查询。