使用宏编辑帮我写一个将两个excel表格筛选出相同数据在新表格中的代码
时间: 2024-10-15 13:12:10 浏览: 36
在Excel中,你可以使用VBA(Visual Basic for Applications)编写宏来完成这个任务,这里是一个简单的例子,假设你要比较两个工作表"A"和"B",并把它们相同的数据放在新的工作表"C"中:
```vba
Sub CompareAndCopy()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet
Dim lastRowA As Long, lastRowB As Long, i As Long
' 创建或激活工作表"C"
Set wsC = ThisWorkbook.Sheets("Sheet3") ' 更改名称为你实际的工作表名
If wsC Is Nothing Then
wsC = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
wsC.Name = "Sheet3" ' 或者自定义其他名字
End If
' 设置工作表A和B为活动工作表
Set wsA = ThisWorkbook.Sheets("Sheet1") ' 替换为A工作表的名称
Set wsB = ThisWorkbook.Sheets("Sheet2") ' 替换为B工作表的名称
' 获取最后一行的索引
lastRowA = wsA.Cells(wsA.Rows.Count, 1).End(xlUp).Row
lastRowB = wsB.Cells(wsB.Rows.Count, 1).End(xlUp).Row
' 遍历两列数据
For i = 1 To lastRowA
' 检查当前行在B工作表是否也存在
If Application.WorksheetFunction.Match(wsA.Cells(i, 1), wsB.Columns(1), 0) <> #NUM! Then
' 如果存在,复制行到新工作表
wsC.Cells(wsC.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, wsA.Columns.Count).Value = wsA.Range(wsA.Cells(i, 1), wsA.Cells(i, wsA.Columns.Count)).Value
End If
Next i
End Sub
```
运行这段宏后,它会在工作表"C"中创建一个新的行,如果对应位置在工作表"A"和"B"中有相同的值,则会将"A"工作表的该行复制过去。
阅读全文