首页 > 解决方案 > 如何使用 VBA 根据关键字匹配相应的单元格值?

问题描述

我有一个宏,可以网络抓取数据并将结果返回到单独的工作表。但是,必须处理这些结果,以便将所有标题提取到“搜索结果”部分的一列中。我不知道如何编写一个函数来返回与术语“TI”相关的所有值。我写了一些代码,但它不起作用。任何有关此的帮助或建议将不胜感激。

搜索结果工作表

原始数据工作表

子返回结果()

 Dim r As Range

 Application.ScreenUpdating = False

 With Worksheets("Search Results")
.AutoFilterMode = False
.Range("A:A").AutoFilter Field:=1, Criteria1:="=TI"
With .AutoFilter.Range
    On Error Resume Next
    Set r = .Resize(.Rows.Count - 1, 1).Offset(1, 
    2).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If Not r Is Nothing Then
        r.Copy Worksheets("Search Results").Range("A7")
    End If
End With
.AutoFilterMode = False
 End With

 Application.ScreenUpdating = True

 End Sub

标签: excelvba

解决方案


这应该是一个与您的偏差最小的工作代码(注释中的解释)

Option Explicit

Sub ReturnResults()

    Dim r As Range

    Application.ScreenUpdating = True

    With Worksheets("Sheet1") ' reference results sheet
        If IsEmpty(.Range("A1")) Then .Range("A1").Value = "dummy header" ' if A1 is empty, put a "dummy" header to make AutoFilter work properly

        .AutoFilterMode = False
        With .Range("B1", .Cells(.Rows.Count, 2).End(xlUp)).Offset(, -1) ' reference referenced sheet column A range from row 1 down to column B last not empty cell
            .SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C" ' fill referenced range blank cells with the same value as the not empty cell above
            .AutoFilter Field:=1, Criteria1:="=TI"
            On Error Resume Next
            Set r = .Resize(.Rows.Count - 1, 1).Offset(1, 1).SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
            If Not r Is Nothing Then r.Copy Worksheets("Search Results").Range("B7")
            .Parent.AutoFilterMode = False

            .SpecialCells(xlCellTypeFormulas).ClearContents ' clear cell with formulas
            If .Range("A1").Value = "dummy header" Then .Range("A1").ClearContents ' remove any "dummy" header
        End With
    End With

    Application.ScreenUpdating = True

End Sub

推荐阅读