VBA 实现覆盖导入和查找匹配值并返回对应内容
VBA 实现覆盖导入
VBA 中可以使用 FileSystemObject 对象来实现文件的覆盖导入。具体实现步骤如下:
-
引入 Microsoft Scripting Runtime 库 在 VBA 编辑器中,依次点击“工具”->“引用”,勾选“Microsoft Scripting Runtime”库,然后点击“确定”按钮。
-
创建 FileSystemObject 对象 在 VBA 代码中,使用以下语句创建 FileSystemObject 对象:
Dim fso As New FileSystemObject
- 判断目标文件是否存在 使用 FileSystemObject 对象的 FileExists 方法判断目标文件是否存在,如果存在则删除目标文件。
If fso.FileExists('目标文件路径') Then
fso.DeleteFile '目标文件路径'
End If
- 复制源文件到目标文件路径 使用 FileSystemObject 对象的 CopyFile 方法将源文件复制到目标文件路径。
fso.CopyFile '源文件路径', '目标文件路径'
完整代码示例:
Sub ImportFile()
Dim fso As New FileSystemObject
'判断目标文件是否存在,如果存在则删除目标文件
If fso.FileExists('目标文件路径') Then
fso.DeleteFile '目标文件路径'
End If
'复制源文件到目标文件路径
fso.CopyFile '源文件路径', '目标文件路径'
End Sub
VBA 实现在 B 列查找 A 列内容,找到一致的返回 C 列对应行的内容在 D 列输出
VBA 中可以使用 Range 对象和 Loop 循环来实现在 B 列查找 A 列内容,找到一致的返回 C 列对应行的内容在 D 列输出。具体实现步骤如下:
- 定义变量和范围 在 VBA 代码中,定义变量和范围,例如:
Dim i As Integer
Dim j As Integer
Dim lastRow As Long
Dim searchValue As String
Dim foundValue As String
lastRow = Cells(Rows.Count, 'A').End(xlUp).Row '获取 A 列最后一行行号
- 循环查找 使用 Loop 循环在 B 列中查找 A 列对应单元格的值,如果找到则获取 C 列对应单元格的值,将其赋值给变量 foundValue。例如:
For i = 1 To lastRow '逐行查找
searchValue = Cells(i, 'A').Value '获取 A 列单元格的值
j = 1 '从 B 列第一行开始查找
Do While Cells(j, 'B').Value <> '' '循环查找 B 列非空单元格
If Cells(j, 'B').Value = searchValue Then '如果找到匹配值
foundValue = Cells(j, 'C').Value '获取 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给 D 列对应单元格
Cells(i, 'D').Value = foundValue
Next i
- 完整代码示例 将以上步骤整合,得到完整代码示例:
Sub FindMatch()
Dim i As Integer
Dim j As Integer
Dim lastRow As Long
Dim searchValue As String
Dim foundValue As String
lastRow = Cells(Rows.Count, 'A').End(xlUp).Row '获取 A 列最后一行行号
For i = 1 To lastRow '逐行查找
searchValue = Cells(i, 'A').Value '获取 A 列单元格的值
j = 1 '从 B 列第一行开始查找
Do While Cells(j, 'B').Value <> '' '循环查找 B 列非空单元格
If Cells(j, 'B').Value = searchValue Then '如果找到匹配值
foundValue = Cells(j, 'C').Value '获取 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给 D 列对应单元格
Cells(i, 'D').Value = foundValue
Next i
End Sub
将 B 列改为第二个工作表的 B 列
VBA 中可以使用 Worksheets 对象来访问工作表,通过指定工作表的名称或索引号来访问不同的工作表。具体实现步骤如下:
- 定义变量和范围 在 VBA 代码中,定义变量和范围,例如:
Dim i As Integer
Dim j As Integer
Dim lastRow As Long
Dim searchValue As String
Dim foundValue As String
lastRow = Worksheets('Sheet1').Cells(Rows.Count, 'A').End(xlUp).Row '获取 Sheet1 工作表 A 列最后一行行号
- 循环查找 使用 Loop 循环在 Sheet1 工作表的 B 列中查找 A 列对应单元格的值,如果找到则获取 Sheet1 工作表 C 列对应单元格的值,将其赋值给变量 foundValue。例如:
For i = 1 To lastRow '逐行查找
searchValue = Worksheets('Sheet1').Cells(i, 'A').Value '获取 Sheet1 工作表 A 列单元格的值
j = 1 '从 Sheet2 工作表 B 列第一行开始查找
Do While Worksheets('Sheet2').Cells(j, 'B').Value <> '' '循环查找 Sheet2 工作表 B 列非空单元格
If Worksheets('Sheet2').Cells(j, 'B').Value = searchValue Then '如果找到匹配值
foundValue = Worksheets('Sheet1').Cells(i, 'C').Value '获取 Sheet1 工作表 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给 Sheet1 工作表 D 列对应单元格
Worksheets('Sheet1').Cells(i, 'D').Value = foundValue
Next i
- 完整代码示例 将以上步骤整合,得到完整代码示例:
Sub FindMatch()
Dim i As Integer
Dim j As Integer
Dim lastRow As Long
Dim searchValue As String
Dim foundValue As String
lastRow = Worksheets('Sheet1').Cells(Rows.Count, 'A').End(xlUp).Row '获取 Sheet1 工作表 A 列最后一行行号
For i = 1 To lastRow '逐行查找
searchValue = Worksheets('Sheet1').Cells(i, 'A').Value '获取 Sheet1 工作表 A 列单元格的值
j = 1 '从 Sheet2 工作表 B 列第一行开始查找
Do While Worksheets('Sheet2').Cells(j, 'B').Value <> '' '循环查找 Sheet2 工作表 B 列非空单元格
If Worksheets('Sheet2').Cells(j, 'B').Value = searchValue Then '如果找到匹配值
foundValue = Worksheets('Sheet1').Cells(i, 'C').Value '获取 Sheet1 工作表 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给 Sheet1 工作表 D 列对应单元格
Worksheets('Sheet1').Cells(i, 'D').Value = foundValue
Next i
End Sub
注意:在以上示例中,我们假设要将 Sheet1 工作表的 B 列改为 Sheet2 工作表的 B 列。如果需要将其他工作表的列复制到当前工作表的列中,只需要将 Worksheets 对象的引用修改为当前工作表即可。例如,如果要将 Sheet2 工作表的 C 列复制到当前工作表的 D 列中,可以使用以下代码:
searchValue = Cells(i, 'A').Value '获取当前工作表 A 列单元格的值
j = 1 '从 Sheet2 工作表 C 列第一行开始查找
Do While Worksheets('Sheet2').Cells(j, 'C').Value <> '' '循环查找 Sheet2 工作表 C 列非空单元格
If Worksheets('Sheet2').Cells(j, 'C').Value = searchValue Then '如果找到匹配值
foundValue = Worksheets('Sheet2').Cells(j, 'C').Value '获取 Sheet2 工作表 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给当前工作表 D 列对应单元格
Cells(i, 'D').Value = foundValue
所有单元格位置改为从第二行开始
以下是将所有单元格位置改为从第二行开始的示例代码:
Sub FindMatch()
Dim i As Integer
Dim j As Integer
Dim lastRow As Long
Dim searchValue As String
Dim foundValue As String
lastRow = Worksheets('Sheet1').Cells(Rows.Count, 'A').End(xlUp).Row '获取 Sheet1 工作表 A 列最后一行行号
For i = 2 To lastRow '逐行查找(从第二行开始)
searchValue = Worksheets('Sheet1').Cells(i, 'A').Value '获取 Sheet1 工作表 A 列单元格的值
j = 2 '从 Sheet2 工作表 B 列第二行开始查找(从第二行开始)
Do While Worksheets('Sheet2').Cells(j, 'B').Value <> '' '循环查找 Sheet2 工作表 B 列非空单元格
If Worksheets('Sheet2').Cells(j, 'B').Value = searchValue Then '如果找到匹配值
foundValue = Worksheets('Sheet1').Cells(i, 'C').Value '获取 Sheet1 工作表 C 列对应单元格的值
Exit Do '退出循环
End If
j = j + 1 '继续查找下一行
Loop
'将 foundValue 赋值给 Sheet1 工作表 D 列对应单元格
Worksheets('Sheet1').Cells(i, 'D').Value = foundValue
Next i
End Sub
希望这能帮到您。
原文地址: https://www.cveoy.top/t/topic/jBo9 著作权归作者所有。请勿转载和采集!