写一个VBA代码,实现以下需求,根据表2的A列不同的字符串,在表1的F列进行筛选,将筛选后的该行的E列值返回给表2的C列
时间: 2024-03-03 10:48:15 浏览: 86
以下是实现该需求的VBA代码:
```
Sub filter_and_return()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long, i As Long, j As Long
Dim str As String
Set ws1 = ThisWorkbook.Sheets("表1") '修改为实际的表名
Set ws2 = ThisWorkbook.Sheets("表2") '修改为实际的表名
lastRow1 = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row '表1的最后一行
lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row '表2的最后一行
For i = 2 To lastRow2 '从第2行开始,第1行是标题行
str = ws2.Cells(i, "A").Value '获取表2的A列的值
ws1.Range("F1:F" & lastRow1).AutoFilter Field:=1, Criteria1:=str '在表1的F列进行筛选
For j = 2 To lastRow1 '从第2行开始,第1行是标题行
If ws1.Cells(j, "F").EntireRow.Hidden = False Then '如果该行没有被隐藏
ws2.Cells(i, "C").Value = ws1.Cells(j, "E").Value '将筛选后的该行的E列值返回给表2的C列
Exit For '找到一行即可退出循环
End If
Next j
ws1.Range("F1:F" & lastRow1).AutoFilter '清除筛选
Next i
End Sub
```
使用方法:
1. 将上述代码复制到一个新的模块中。
2. 修改代码中的表名和列号为实际的表名和列号。
3. 在表2中的任意单元格中运行该宏即可。
注意事项:
1. 在运行该宏之前,需要先保存所有的工作表。
2. 在表2的A列中,不同的字符串必须是完全一致的,否则无法正确筛选。
3. 该宏只能用于单个工作簿中的表之间进行筛选和返回数据,不能用于多个工作簿之间。
阅读全文