excel - AutoFiltered 数据的 VLOOKUP 宏

标签 excel vba vlookup autofilter

我仍在学习 VBA,想知道是否有办法在筛选范围内运行 VLOOKUP。

比如下面的代码,我过滤数据后,第一行数据是A4。

但是,我必须手动指定第一行数据在A4中。

我的问题是是否有可能让宏检测第一行数据本身而不是我必须指定。

我读过有关可能使用 SpecialCells 的文章。

我正在尝试这样做,因为我收到的数据集每天都在变化,所以第一个过滤的行今天是 A4,明天可能是 A15 或其他任何内容。

谢谢

Range("A4").Select '/必须在此处指定范围

暗淡的公式作为字符串

formul = "=VLOOKUP(C2,Sheet2!A:B,2,0)"

Range("A4:A"& Cells(Rows.Count, 1).End(xlUp).Row) = [formul] '/也在这里指定范围

'''

编辑:使用 SpecialCells 的代码: ''' vba

Range("A1").Select '/have to specify range here

Dim formul As String

formul = "=VLOOKUP(C1,Sheet2!A:B,2,0)"

Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible) = [formul] '/also specify range here

'''

最佳答案

过滤单元格的公式

  • 这将过滤 C 列并将公式写入 A 列中的过滤单元格。
Option Explicit

Sub FormulaToFilteredCells()
    
    Const sName As String = "Sheet2"
    Const dName As String = "Sheet1"
    Const dLookupColumn As Long = 1
    Const dCriteriaColumn As Long = 3
    Const dCriteria As String = "Yes"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim dws As Worksheet: Set dws = wb.Worksheets(dName)
    If dws.FilterMode Then dws.ShowAllData ' remove previous filter
    
    Dim drg As Range ' Destination Table Range (has headers)
    Set drg = dws.Range("A1").CurrentRegion.Columns(dCriteriaColumn)
    Dim ddrg As Range ' Destination Data Range (no headers)
    Set ddrg = drg.Resize(drg.Rows.Count - 1).Offset(1)
    Dim dcOffset As Long: dcOffset = dLookupColumn - dCriteriaColumn
    
    drg.AutoFilter 1, dCriteria
    
    Dim dvdrg As Range ' Destination Visible Data Range
    On Error Resume Next
        Set dvdrg = ddrg.SpecialCells(xlCellTypeVisible).Offset(, dcOffset)
    On Error GoTo 0
    
    dws.AutoFilterMode = False
    
    If dvdrg Is Nothing Then Exit Sub ' no filtered cells
    
    dvdrg.Formula = "=VLOOKUP(" & dvdrg.Cells(1).Offset(, -dcOffset) _
        .Address(0, 0) & ",'" & dName & "'!A:B,2,0)"
    
End Sub

关于excel - AutoFiltered 数据的 VLOOKUP 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71239232/

相关文章:

Python:使用 df1 的 2 列中的信息模拟 Excel 的索引匹配,用于查找 df2 中的位置

excel - INDEX/MATCH 返回错误的值。我做错了什么?

mysql - 将纯文本 HTML 转换为真正的 HTML MySQL > Excel

excel - 从 Excel 2016 中的 API 获取数据

java - 如何使用java从e​​xcel表中读取数据?

vba - 仅在选定单元格上运行现有宏,而不是在整个工作表上运行

vba - 在任何行上重用静态 vba 代码的最有效方法

excel - 匹配/索引/Vlookup 公式

Python 保存到不同的工作簿

excel - 如何自动检测Excel中的表格