VBA实现Excel数据覆盖导入:带关键字筛选与删除
VBA实现Excel数据覆盖导入:带关键字筛选与删除
在Excel数据处理中,经常需要将一个工作簿中的数据导入到另一个工作簿中,并进行覆盖或筛选操作。本文将介绍如何使用VBA代码实现Excel数据覆盖导入,并根据指定列和关键字进行筛选,同时删除目标工作表中符合条件的行。
代码功能:
- 判断目标工作表指定列是否包含指定的关键字。
- 如果包含关键字,则删除目标工作表中所有包含关键字的行,并将源工作簿中包含关键字的行导入到目标工作表中。
- 如果不包含关键字,则将源工作簿从第二行开始到最后一行的数据追加到目标工作表的最后一行之后。
VBA代码:
Sub ImportData()
Dim wbSource As Workbook
Dim wsTarget As Worksheet
Dim keyword As String
Dim lastRow As Long
Dim i As Long
' 获取用户输入的关键字
keyword = InputBox('请输入要筛选的关键字:')
' 设置源工作簿和目标工作簿
Set wbSource = Workbooks.Open('C:\SourceWorkbook.xlsx')
Set wsTarget = ThisWorkbook.Sheets('TargetSheet')
' 判断目标工作表指定列是否包含关键字
If wsTarget.Range('A1').Value = '指定列标题' Then
' 删除目标工作表中包含关键字的行
lastRow = wsTarget.Cells(wsTarget.Rows.Count, 'A').End(xlUp).Row
For i = lastRow To 1 Step -1
If InStr(1, wsTarget.Cells(i, 1).Value, keyword) > 0 Then
wsTarget.Rows(i).Delete
End If
Next i
' 导入源工作簿中包含关键字的行
lastRow = wbSource.Sheets('SourceSheet').Cells(wbSource.Sheets('SourceSheet').Rows.Count, 'A').End(xlUp).Row
For i = 2 To lastRow
If InStr(1, wbSource.Sheets('SourceSheet').Cells(i, 1).Value, keyword) > 0 Then
wsTarget.Rows(wsTarget.Cells(wsTarget.Rows.Count, 'A').End(xlUp).Row + 1).Value = wbSource.Sheets('SourceSheet').Rows(i).Value
End If
Next i
Else
' 将源工作簿从第二行开始到最后一行的数据追加到目标工作表的最后一行之后
lastRow = wbSource.Sheets('SourceSheet').Cells(wbSource.Sheets('SourceSheet').Rows.Count, 'A').End(xlUp).Row
wsTarget.Rows(wsTarget.Cells(wsTarget.Rows.Count, 'A').End(xlUp).Row + 1).Resize(lastRow - 1, wbSource.Sheets('SourceSheet').Columns.Count).Value = wbSource.Sheets('SourceSheet').Range('A2').Resize(lastRow - 1, wbSource.Sheets('SourceSheet').Columns.Count).Value
End If
' 关闭源工作簿
wbSource.Close False
End Sub
使用方法:
- 将上述代码复制到VBA编辑器中(Alt + F11)。
- 修改代码中的源工作簿路径、工作表名称、指定列标题以及关键字等信息,使其符合实际情况。
- 运行代码即可完成数据覆盖导入、筛选和删除操作。
注意事项:
- 在运行代码之前,请确保已备份目标工作簿,以防止数据丢失。
- 代码中的 '指定列标题' 需要替换为实际的列标题,例如 '产品名称' 或 '订单号' 等。
- 可以根据需要修改代码中的关键字筛选条件,例如使用通配符进行模糊匹配等。
希望本文能够帮助您更好地利用VBA代码实现Excel数据处理自动化,提高工作效率!
原文地址: https://www.cveoy.top/t/topic/jxhn 著作权归作者所有。请勿转载和采集!