

想先筛选出张三李四,再用工号获取sheet2中的入职日期,自己用字典的方法运营不出结果,不知道是哪里错了

关注引自免费微信小程序:皆我百晓生
在VBA中,如果你想要通过字典筛选出特定值(在这个例子中为张三和李四)并从sheet2获取入职日期,可以遵循以下步骤:
首先,打开你的Excel工作簿并选择包含图表和数据范围的单元格A1:B10。
使用代码筛选出张三和李四:
Dimzd As Object
Setzd = CreateObject("Scripting.Dictionary")
Range("A1:C10").AutoFilter Field:=18, Criteria:=Array("张三", "李四"), Operator:=xlFilterValues
For Each row In Range("A1:C10")
If Not zd.exists(row.Value) Then
zd.Add row.Value, row.Cells(3).Value
End If
Next row
这段代码首先创建一个名为zd的对象,并将其设置为一个新的字典。然后,它遍历Sheet2中的所有行,对每一行都检查是否已存在于字典中。如果不存在,就将当前行的值添加到字典中并将行的第3个引用(即列索引)设为相应的值。
获取sheet2中的入职日期:
Dim SH As Worksheet
Set SH = Workbooks("1").Sheets("2")
' 假设sheet2有三个区域:V1、V2和V3,分别对应入职日期
Dim V1Cell As Range
Dim V2Cell As Range
Dim V3Cell As Range
Dim minDate As Date
Dim maxDate As Date
' 获取V1、V2和V3区域的引用
V1Cell = Range("V1").Offset(1, 0)
V2Cell = Range("V2").Offset(1, 0)
V3Cell = Range("V3").Offset(1, 0)
' 初始化最小和最大日期范围
minDate = DateSerial(2024, 3, 26)
maxDate = DateSerial(2024, 3, 31)
' 遍历V1区域
For Each cell In V1Cell
' 如果该日期小于或等于minDate,则将其存储为最小日期
If cell.Value <= minDate Then
minDate = cell.Value
End If
' 将员工姓名提取出来,并替换最小日期
Replace(minDate, "张三", cell.Value)
Replace(minDate, "李四", cell.Value)
Next cell
' 遍历V2区域
For Each cell In V2Cell
' 如果该日期大于或等于maxDate,则将其存储为最大日期
If cell.Value >= maxDate Then
maxDate = cell.Value
End If
' 将员工姓名提取出来,并替换最大日期
Replace(maxDate, "张三", cell.Value)
Replace(maxDate, "李四", cell.Value)
Next cell
' 遍历V3区域
For Each cell In V3Cell
' 如果该日期等于minDate或maxDate,则跳过不进行处理
If MinDate < cell.Value Or MaxDate > cell.Value Then
Exit For
End If
' 将该日期及其对应的员工名称转换为字符串,替换最小和最大日期
Replace(cell.Value, minDate, cell.Value)
Replace(cell.Value, maxDate, cell.Value)
Next cell
' 打印筛选结果
MsgBox "筛选结果: 张三" & vbNewLine & "李四" & vbNewLine
这段代码首先将Sheet2中的所有行的第18列设为键值对,其中值为相应的员工名。然后,它初始化了两个变量minDate和maxDate来存储最小和最大日期范围。接着,它遍历V1、V2和V3区域的引用,查找每个日期及其对应的员工姓名,并根据这些信息将每个日期及其对应的员工名替换为字符串。最后,它打印出筛选后的结果。
注意:上述代码中的月份和日期格式取决于你的Excel版本和工作簿样式。例如,在Microsoft Excel 2007或更高版本中,月份和日期通常显示为两位数(例如"03"),且每个日期之间都用空格分隔。如果你的工作簿格式不同,可能需要调整这些部分的显示方式。
此外,由于此示例仅考虑字段"工号"作为筛选条件,若需要其他字段(如"姓名"、"入职日期"等)的数据筛选,只需要相应地修改查询和替换字符串即可。例如,如果你需要在"姓名"字段上筛选员工,你可以修改数组为Array("张三", "李四"),并在筛选条件的匹配部分进行相应修改。