2015-10-26 37 views
1

我一直在這一塊上撞了我的頭。VBA許多過濾單元格上的Vlookups

我有一個很大的宏,我在一個文件上做了大量的操作,但被困在做一系列的過濾和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列作爲查找參考。

我找不到一種方法來使配方的工作。我想: -insert vlookup到該過濾範圍, -刪除過濾器(自動過濾器) - 選擇計算列的偏移量爲1的標題並粘貼爲特殊值 - 繼續執行此過程5,6次對於其他列中的空白或無效條目。

有沒有辦法做到這一點? 任何幫助表示讚賞

+0

問:爲什麼你的Vlookup表只有1列寬?那麼在那裏會拋出一個錯誤,並保持公式不起作用。 –

+0

@ Jess-eye-ca - 這是'xlR1C1'單元格範圍參考。它實際上是指'Sheet1'!H:P',它是9列寬。 – Jeeped

回答

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中的空白單元格。在運行該操作之前,您可能需要檢查空白單元格。

+0

謝謝Jepped,這太棒了。您可以添加一行,最後將整個第47列/或AU從標題下移到數據的末尾,並將其粘貼爲特殊值,因爲它現在包含了vlookup公式。我會在我的大宏觀中嵌入其中的一些。謝謝!你使它更加優雅和實用。我很欣賞解釋每一行的評論。它是一個很好的學習工具。 – drLecter

+0

再一次你在一條線上解決了我在一對夫婦中所做的事情。感謝隊友在這個教學時刻。對此,我真的非常感激。 – drLecter

相關問題