过滤单元格上的 VBA 许多 Vlookups
Posted
技术标签:
【中文标题】过滤单元格上的 VBA 许多 Vlookups【英文标题】:VBA many Vlookups on filtered cells 【发布时间】:2015-10-26 21:19:50 【问题描述】:我一直在努力解决这个问题。
我有一个很大的宏,我对一个文件执行了许多操作,但在执行一系列过滤和查找时卡住了。
这是我得到的一部分。我添加了 cmets 以使其更清晰。
'FILTER ALL 3P VALUES IN ONE COLUMN AND ADD A VALUE IN ALL RESPECTIVE CELLS IN OTHER COLUMN
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
.AutoFilter Field:=22, Criteria1:="*3P*"
.Offset(1).Range("AU1:AU" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select
'HERE I SELECT ALL VISIBLE FILTERED CELLS BY COUNTING IN ROW A BECAUSE THESE CELLS ARENT BLANK
.Selection.Value = "3P PROGRAM"
.AutoFilter
End With
'NOW I WANT TO FILTER ROW FOR BLANKS AND THEN FILL THIS RANGE WITH A FORMULA
'HERE IS THE PROBLEM
With ActiveSheet.UsedRange
.AutoFilter Field:=47, Criteria1:="="
.Offset(1).Range("AU1:AU" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select
.Selection.FormulaR1C1 = "=VLOOKUP(RC[-38],'[WeeklyData.xlsx]Sheet1'!C8:C16,9,FALSE)"
.AutoFilter
End With
问题在于 vlookup 步骤。我希望该范围的可见过滤空白单元格获得 vlookup 获得的值。每个单元格都应将左侧 38 列的单元格作为 vlookup 参考。
我找不到让公式起作用的方法。我想: - 将 vlookup 插入该过滤范围, -删除过滤器(自动过滤器) - 为标题选择偏移量为 1 的计算列并粘贴为特殊值 - 对于其他列中的空白或无效条目,继续执行此过程 5、6 次。
有没有办法做到这一点? 任何帮助表示赞赏
【问题讨论】:
问题:为什么您的 Vlookup 表只有 1 列宽?那里会引发错误并使公式无法正常工作。 @Jess-eye-ca - 这是xlR1C1
单元格范围参考。它实际上是指Sheet1'!H:P
,它有 9 列宽。
【参考方案1】:
比起Worksheet.UsedRange property,我更喜欢Range.CurrentRegion property。它指的是在原点(在本例中为 A1)创建的“数据岛”。
With ActiveSheet
If .AutoFilterMode Then AutoFilterMode = False
With .Cells(1, 1).CurrentRegion
'Set the filter
.AutoFilter Field:=22, Criteria1:="*3P*"
'Shift off the header row
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
'check if there are any visible cells
If CBool(Application.Subtotal(103, .Cells)) Then
'Put 3P PROGRAM into the visible cells in column AU
Intersect(.Columns(47), .SpecialCells(xlCellTypeVisible)) = "3P PROGRAM"
End If
End With
'remove the filter
.AutoFilter Field:=22
'set the formula on column AU blank cells
Intersect(.Columns(47), .SpecialCells(xlCellTypeBlanks)).FormulaR1C1 = _
"=VLOOKUP(RC[-38], '[WeeklyData.xlsx]Sheet1'!C8:C16, 9, FALSE)"
'revert column AU within the .CurrentRegion to the values returned by the formulas
.columns(47).cells = .columns(47).cells.value
End With
End With
第二个过滤器被Range.SpecialCells method 替换为xlCellTypeBlanks property。 Intersect method 将单元格范围引用隔离到 AU 列中的空白单元格。您可能需要在运行该操作之前检查空白单元格。
【讨论】:
感谢 Jepped,这太棒了。您能否在最后添加一行,将整个列 47/ 或 AU 从标题下方带到数据的末尾,并将其粘贴为特殊值,因为现在它包含 vlookup 公式。我将在我的大宏中嵌套其中的一些。谢谢!你让它变得更加优雅和实用。我非常感谢解释每一行的评论。它是一个很棒的学习工具。 你又一次解决了我在一对夫妇中所做的事情。感谢这位朋友的教学时刻。我真的很感激。以上是关于过滤单元格上的 VBA 许多 Vlookups的主要内容,如果未能解决你的问题,请参考以下文章
处理 UICollectionView 单元格上的滑动:在 UICollectionView 或每个单元格上实现处理程序?