VBA 实现覆盖导入、类似 VLOOKUP 的功能,以及跨工作表查找
VBA 实现覆盖导入、类似 VLOOKUP 的功能,以及跨工作表查找
1. VBA 实现覆盖导入
Sub CoverImport()
Dim wb As Workbook
Dim ws As Worksheet
' 打开要导入和覆盖数据的工作簿
Set wb = Workbooks.Open('path\to\source\file.xlsx')
' 选择要覆盖的工作表
Set ws = wb.Worksheets('Sheet1')
' 清除原有数据
ws.Cells.Clear
' 导入新数据
With ws.QueryTables.Add(Connection:='TEXT;path\to\data\file.csv', _
Destination:=ws.Range('A1'))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFileOtherDelimiter = ';'
.Refresh BackgroundQuery:=False
End With
' 保存工作簿
wb.Save
' 关闭工作簿
wb.Close
Set wb = Nothing
Set ws = Nothing
End Sub
在这个示例中,我们首先打开要导入和覆盖数据的工作簿,然后选择要覆盖的工作表。接着,我们清除原有数据,并通过查询表格导入新的数据。最后我们保存工作簿并关闭它。如果需要,你可以把以上代码进行修改来适应自己的数据导入需求。
2. VBA 实现类似 VLOOKUP 的功能
Sub VLookupFunction()
Dim lookupValue As Variant
Dim lookupRange As Range
Dim resultRange As Range
Dim result As Variant
Dim i As Long
Dim ws As Worksheet
' 设置要查找的值
lookupValue = 'apple'
' 循环遍历所有工作表
For Each ws In ThisWorkbook.Worksheets
' 设置要查找的范围
Set lookupRange = ws.Range('A2:A' & ws.Cells(Rows.Count, 'A').End(xlUp).Row)
' 设置要返回结果的范围
Set resultRange = ws.Range('B2:B' & ws.Cells(Rows.Count, 'B').End(xlUp).Row)
' 遍历每一行数据,并在每一行中执行 VLOOKUP 函数
For i = 1 To lookupRange.Rows.Count
' 使用 VBA 的 Match 函数查找匹配的行数
Dim matchRow As Long
matchRow = Application.Match(lookupValue, lookupRange.Cells(i), 0)
' 使用 VBA 的 Index 函数返回对应的结果
If Not IsError(matchRow) Then
result = Application.Index(resultRange.Cells(i), matchRow, 1)
Else
result = 'N/A'
End If
' 将结果输出到单元格中
ws.Range('C' & i + 1).Value = result
Next i
Next ws
End Sub
在这个示例中,我们修改了查找范围和返回结果的范围,使其可以跨工作表查找。我们使用了一个循环来遍历所有工作表,并在每个工作表中执行 VLOOKUP 函数。最后将结果输出到相应的单元格中。如果查找不到匹配的值,我们将返回 'N/A'。如果需要,你可以把以上代码进行修改来适应自己的数据查找需求。
3. VBA 跨工作表查找
Sub VLookupFunction()
Dim lookupValue As Variant
Dim lookupRange As Range
Dim resultRange As Range
Dim result As Variant
Dim i As Long
Dim ws As Worksheet
' 设置要查找的值
lookupValue = 'apple'
' 循环遍历所有工作表
For Each ws In ThisWorkbook.Worksheets
' 设置要查找的范围
Set lookupRange = ws.Range('A2:A' & ws.Cells(Rows.Count, 'A').End(xlUp).Row)
' 设置要返回结果的范围
Set resultRange = ws.Range('B2:B' & ws.Cells(Rows.Count, 'B').End(xlUp).Row)
' 遍历每一行数据,并在每一行中执行 VLOOKUP 函数
For i = 1 To lookupRange.Rows.Count
' 使用 VBA 的 Match 函数查找匹配的行数
Dim matchRow As Long
matchRow = Application.Match(lookupValue, lookupRange.Cells(i), 0)
' 使用 VBA 的 Index 函数返回对应的结果
If Not IsError(matchRow) Then
result = Application.Index(resultRange.Cells(i), matchRow, 1)
Else
result = 'N/A'
End If
' 将结果输出到单元格中
ws.Range('C' & i + 1).Value = result
Next i
Next ws
End Sub
在这个示例中,我们修改了查找范围和返回结果的范围,使其可以跨工作表查找。我们使用了一个循环来遍历所有工作表,并在每个工作表中执行 VLOOKUP 函数。最后将结果输出到相应的单元格中。如果查找不到匹配的值,我们将返回 'N/A'。如果需要,你可以把以上代码进行修改来适应自己的数据查找需求。
原文地址: https://www.cveoy.top/t/topic/jBdx 著作权归作者所有。请勿转载和采集!