2014-10-26 130 views
2

我是vba的新手,真的很看重繞過這個當前路障的方向。我想爲選定範圍運行VlookupVlookup將引用每天更新的數據。更改所需的範圍

  1. 1天,我想爲Vlookup到所選Range ("B2:B4")的每個單元返回一個值。
  2. 第2天,引用的數據將發生變化,我希望所選範圍將一列向右移動Range("C2:C4")

我想確保每次運行宏時,範圍都向右移動一列,以比較一天到下一天數據的變化。

我已經提供了下面的代碼,它允許我在Range("B2:B4")中運行Vlookup,但我還沒有弄清楚如何根據下一個空列更改範圍。

這就是說,非常感謝您的幫助,非常感謝。

Sub FillinBlanks() 
    Dim rng As Range 

    Set rng = Worksheets("Sheet2").Range("b2:b4") 

    For Each cell In rng 
     If IsEmpty(cell) Then 
      cell.FormulaR1C1 = "=vlookup(Sheet2!rc1,Sheet1!r5c6:r1000c8,3,false)" 
     End If 
    Next cell 
End Sub 

回答

2

你可以做的是找到第2行的最後一列,並簡單地將1添加到它。我假設第1行有標題,因此我試圖找到第2行的最後一列。

請參閱此示例。

Sub FillinBlanks() 
    Dim rng As Range, cell As Range 
    Dim lCol As Long 

    With Worksheets("Sheet2") 
     '~~> Find the last column in row 2 
     lCol = .Cells(2, .Columns.Count).End(xlToLeft).Column + 1 

     '~~> Construct your range 
     Set rng = .Range(ReturnName(lCol) & "2:" & ReturnName(lCol) & "4") 
    End With 

    For Each cell In rng 
     If IsEmpty(cell) Then 
      cell.FormulaR1C1 = "=vlookup(Sheet2!rc1,Sheet1!r5c6:r1000c8,3,false)" 
     End If 
    Next cell 
End Sub 

'~~> Function to return column name from column number 
Function ReturnName(ByVal num As Integer) As String 
    ReturnName = Split(Cells(, num).Address, "$")(1) 
End Function 
+0

你會碰巧知道如何在vlookup填充所選範圍後硬編碼每個範圍?到目前爲止,在基於更改的引用數據運行新的查找時,先前的範圍正在根據新數據發生變化,因爲它們尚未進行硬編碼,並且仍然參考基於查找公式的數據。一旦vlookup已經填滿範圍,我想對範圍進行硬編碼,以便這個範圍內的數據不會根據新的參考數據而改變。非常感謝您的幫助和指導。 – natbuild34 2014-10-26 22:21:12

+0

您的意思是說當第二天範圍內的數據發生變化時,col B數據不應該改變嗎? – 2014-10-26 22:32:33

+1

如果是的話,那麼在行'End Sub'之前加上'Columns(lCol).Value = Columns(lCol).Value'這一行。 – 2014-10-26 22:38:12