VBA在过滤的单元格上有很多Vlookup

时间:2015-10-26 21:19:50

标签: excel vba excel-vba

我一直在敲打这个问题。

我有一个很大的宏,我在一个文件上做了很多操作但却停留在做一系列过滤和vlookups。

这是我得到的一部分。我添加了评论以使其更清晰。

 '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引用。

我无法找到让配方工作的方法。我想要: -insert vlookup到过滤范围, - 删除过滤器(自动过滤器) - 为标题选择偏移量为1的计算列,并粘贴为特殊值 - 继续执行此过程5,6次以获取其他列中的空白或无效条目。

有办法做到这一点吗? 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

我更喜欢Range.CurrentRegion property而不是Worksheet.UsedRange 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 methodxlCellTypeBlanks property替换第二个过滤器。 Intersect method将单元格范围引用隔离到列AU中的空白单元格。您可能希望在运行该操作之前检查空白单元格。