我仍在学习 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/