VBA 实现覆盖导入:根据关键字删除和导入数据

本文将介绍如何使用 VBA 代码实现覆盖导入功能,并根据指定关键字删除目标工作表中的相关行,并将数据源工作簿中包含该关键字的行导入到目标工作表。

1. 基本覆盖导入

首先,我们介绍基本的覆盖导入功能,代码如下:

Sub ImportData()
    Dim wbSource As Workbook
    Dim wsTarget As Worksheet
    Set wbSource = Workbooks.Open('C:\SourceWorkbook.xlsx')
    Set wsTarget = ThisWorkbook.Sheets('TargetSheet')
    wbSource.Sheets('SourceSheet').UsedRange.Copy
    wsTarget.Range('A1').PasteSpecial xlPasteValues
    wbSource.Close False
End Sub

该代码将 SourceWorkbook.xlsx 文件中的 SourceSheet 工作表中的数据复制到当前工作簿的 TargetSheet 工作表中,并覆盖原有数据。

2. 只覆盖指定列含有指定内容

要实现只覆盖指定列含有指定内容的功能,可以使用条件语句。例如,假设要覆盖目标工作表中的第一列 (A 列) 中包含 'Apple' 的单元格,可以使用以下代码:

Sub ImportData()
    Dim wbSource As Workbook
    Dim wsTarget As Worksheet
    Set wbSource = Workbooks.Open('C:\SourceWorkbook.xlsx')
    Set wsTarget = ThisWorkbook.Sheets('TargetSheet')
    For Each cell In wsTarget.Range('A1:A' & wsTarget.Cells(wsTarget.Rows.Count, 'A').End(xlUp).Row)
        If cell.Value = 'Apple' Then
            wbSource.Sheets('SourceSheet').Cells(cell.Row, 1).Copy
            wsTarget.Cells(cell.Row, 1).PasteSpecial xlPasteValues
        End If
    Next cell
    wbSource.Close False
End Sub

该代码遍历目标工作表中的第一列单元格,如果单元格的值为 'Apple',则将源工作表中对应单元格的值复制到目标工作表中。

3. 指定内容改为可以手动输入

可以使用 VBA 中的 InputBox 函数实现手动输入关键字的功能。以下代码将目标工作表中第一列 (A 列) 中包含用户输入的关键字的单元格覆盖为源工作表中对应单元格的值:

Sub ImportData()
    Dim wbSource As Workbook
    Dim wsTarget As Worksheet
    Dim keyword As String
    keyword = InputBox('请输入要覆盖的关键字:')
    Set wbSource = Workbooks.Open('C:\SourceWorkbook.xlsx')
    Set wsTarget = ThisWorkbook.Sheets('TargetSheet')
    For Each cell In wsTarget.Range('A1:A' & wsTarget.Cells(wsTarget.Rows.Count, 'A').End(xlUp).Row)
        If cell.Value = keyword Then
            wbSource.Sheets('SourceSheet').Cells(cell.Row, 1).Copy
            wsTarget.Cells(cell.Row, 1).PasteSpecial xlPasteValues
        End If
    Next cell
    wbSource.Close False
End Sub

4. 删除本工作表包含关键字的所有行,导入数据源工作带有关键字的所有行

以下代码将删除目标工作表中包含关键字的所有行,并将数据源工作簿中带有关键字的所有行导入到目标工作表中:

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')
    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 = 1 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
    wbSource.Close False
End Sub

5. 判断指定列是否带有关键字

以下代码判断目标工作表指定列是否带有关键字,如果是,则删除包含关键字的行并导入数据源工作簿中包含关键字的行;否则直接在目标工作表最底一行导入数据源工作簿从第二行开始到最后一行的数据:

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, 'A').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, 'A').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

6. 指定列为 A 列内容

要将代码中的指定列改为 A 列,只需将代码中的 Range('A1')Cells(i, 1) 中的数字 1 改为字母 'A',即 Range('A1')Cells(i, 'A')。例如:

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, 'A').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, 'A').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 代码实现覆盖导入功能的多种方法,您可以根据自己的需求进行修改和调整。

注意: 在使用代码之前,请确保您已经备份了目标工作簿。

VBA实现覆盖导入:根据关键字删除和导入数据

原文地址: https://www.cveoy.top/t/topic/jxhU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录