我有两张纸,即Reason和Lastweek
我想比较两张纸的B列,如果它们具有相同的ID,我想在原因表中获取第33周到第50列的上周纸的所有细节。
我能够获得输出,问题是,例如。如果我在上周工作表的第34栏中有数据,那么它将被输入到原因表的第33列。
有人可以帮忙,我怎么能克服这一点。
Sub lookupUpdate()
Dim BWlRow As Long, CWlRow As Long, i As Long
Dim sformula As String
Dim wsBW As Worksheet, wsCW As Worksheet
Set wsBW = Sheets("Reason"): Set wsCW = Sheets("Lastweek")
BWlRow = wsBW.Cells(wsBW.Rows.count, "A").End(xlUp).Row
CWlRow = wsCW.Cells(wsCW.Rows.count, "A").End(xlUp).Row
For i = 33 To 50 '~~> Col AD to AU
sformula = "=IF(IFERROR(VLOOKUP($B2,Lastweek!$B$2:$AZ" & _
CWlRow & _
"," & _
i & _
",FALSE),""0"")=0,"" "",IFERROR(VLOOKUP($B2,Lastweek!$B$2:$AZ" & _
CWlRow & _
"," & _
i & _
",FALSE),""""))"
With wsBW
With .Range(.Cells(2, i), .Cells(BWlRow, i))
.Formula = sformula
.Value = .Value
End With
End With
Next i
End Sub
答案 0 :(得分:2)
使用第33列的示例,您的Vlookup正在查看从LastWeek工作表中的单元格B2开始的范围。该范围的第33列将是工作表的第AH列。当您输出公式时,您将输出到原因表的 i 列。我在哪里33这是列AG。如果要输出到AH列(列号34或i + 1)。您只需更改以下行即可完成此操作:
With .Range(.Cells(2, i + 1), .Cells(BWlRow, i + 1))
答案 1 :(得分:1)
由于您使用VLOOKUP输入的区域基于B2而不是A2,因此您需要从给予VLOOKUP的列偏移中减去1。
请参阅“如何开始”部分中的第一个示例。这里偏移量为3,即使在列D(零件价格)中查找数据。
https://support.office.com/en-us/article/VLOOKUP-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1