过滤单元格上的 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的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 过滤表中选择第一 10 行可见单元格

当点击单元格上的按钮时,将信息写入单元格中

表视图单元格上的 iOS 砌体

处理 UICollectionView 单元格上的滑动:在 UICollectionView 或每个单元格上实现处理程序?

JLabel 或 JTable 单元格上的 ActionListener

如何在选择单元格上的 UIcollectionViewCell 特定单元格中删除长手势?