Excel VBA vlookup 或获取动态值的替代方法
Excel VBA how vlookup or an alternative way of getting the dyanmic value
我上个月花了一个程序来查找指定的字符串,复制它下面的数据,并从中构建一个 Rawdata table。问题是,它所做的只是复制和粘贴,所以如果值发生变化,Rawdata table 中的值不会。我熟悉 =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,我想从一个 Sheet 复制一个动态范围并将其放入另一个 Sheet,这样当原来的变化时,它也会在另一个 sheet 中变化。
我不确定您希望目标行从哪里开始。您设置目标行,然后使用 iCounter。我和你一样用过 iCounter。如果您想将其粘贴到 sheet 的底部,请告诉我。
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
我上个月花了一个程序来查找指定的字符串,复制它下面的数据,并从中构建一个 Rawdata table。问题是,它所做的只是复制和粘贴,所以如果值发生变化,Rawdata table 中的值不会。我熟悉 =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,我想从一个 Sheet 复制一个动态范围并将其放入另一个 Sheet,这样当原来的变化时,它也会在另一个 sheet 中变化。
我不确定您希望目标行从哪里开始。您设置目标行,然后使用 iCounter。我和你一样用过 iCounter。如果您想将其粘贴到 sheet 的底部,请告诉我。
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