Excel VBA如何使用vlookup或另一种获取dyanmic值的方法

时间:2015-07-30 13:56:23

标签: excel vba excel-vba copy vlookup

我上个月花了一个程序来查找指定的字符串,复制它下面的数据,并从中构建一个Rawdata表。问题是,它所做的只是复制和粘贴,因此如果要更改值,则Rawdata表中的值不会。我熟悉= vlookup函数,但我不知道如何在VBA中使用它,我甚至不确定这是否是在这个实例中使用的正确函数。

以下是查找字符串并复制其下方数据的代码。

    SearchString = "#Regimen"
    Application.FindFormat.Clear
' loop through all sheets
    For Each sh In ActiveWorkbook.Worksheets
' Find first instance on sheet
        Set cl = sh.Cells.Find(What:=SearchString, _
            After:=sh.Cells(1, 1), _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False)
        If Not cl Is Nothing Then
' If found, remember location
            FirstFound = cl.Address
' Dim RangeToCopy As Range, DestRow As Long
                    Set RangeToCopy = Range(cl.Offset(1, 0), cl.Offset(numRowsForProducts, 0))
                    RangeToCopy.Copy
                    DestRow = Sheets("Template").Range("B" & Rows.Count).End(xlUp).Row + 1
                    Sheets("Template").Range("B" & 3 + iCounter).PasteSpecial xlPasteValues
        End If
    Next

Tl:DR,我想从一张纸上复制动态范围并将其放入另一张纸中,这样当原稿发生变化时,它也会在另一张纸上发生变化。

1 个答案:

答案 0 :(得分:1)

我不确定您希望目的地行开始的位置。您设置目​​标行,但然后使用iCounter。我像你一样使用了iCounter。如果您想将其粘贴在表格的底部,请告诉我。

    SearchString = "#Regimen"
    Application.FindFormat.Clear
' loop through all sheets
    For Each sh In ActiveWorkbook.Worksheets
' Find first instance on sheet
        Set cl = sh.Cells.Find(What:=SearchString, _
            After:=sh.Cells(1, 1), _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False)
        If Not cl Is Nothing Then
' If found, remember location
            for i = 0 to numRowsForProducts - 1
                Sheets("Template").Range("B" &  3 + iCounter + i).formula = "=" & sh.name & "!" & cl.offset(i,0).address
            next
        End If
    Next