改变期望的范围

时间:2014-10-26 21:38:45

标签: excel excel-vba vba

我是vba的新手,并且非常重视绕过当前路障的方向。我想为选定范围运行VlookupVlookup将引用每天更新的数据。

  1. 第1天,我希望Vlookup在所选Range ("B2:B4")的每个单元格中返回一个值。
  2. 第2天,引用的数据将发生变化,我希望所选范围将一列移动到右侧Range("C2:C4")
  3. 我想确保每次运行宏时,范围会向右移动一列,以便比较一天到下一天的数据变化。

    我提供了以下代码,允许我在Vlookup中运行Range("B2:B4"),但我还没有弄清楚如何根据下一个空列更改范围。

    那就是说,非常感谢你的帮助,非常感谢。

    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
    

1 个答案:

答案 0 :(得分: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