我一直在敲打这个问题。
我有一个很大的宏,我在一个文件上做了很多操作但却停留在做一系列过滤和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次以获取其他列中的空白或无效条目。
有办法做到这一点吗? 任何帮助表示赞赏
答案 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 method和xlCellTypeBlanks property替换第二个过滤器。 Intersect method将单元格范围引用隔离到列AU中的空白单元格。您可能希望在运行该操作之前检查空白单元格。