使用查找function时出错

我有两张表。 Sheet1:上周,sheet2:本周。

我在sheet2的A列中查找带有sheet1的ID,如果它们匹配,则将sheet1的列M的值复制到sheet2的列M.

由于某种原因,我不在sheet1中find的值被填充为“0”。 我不希望这发生,我的代码。 我只想要代码来查找ID,如果他们匹配我想要的价值,否则我不想要打印任何东西。

有人可以build议我哪里错了?

Sub lookup() Dim tr As Long Dim trsh As Long tr = Sheets("ThisWeek").Cells(Rows.Count, "A").End(xlUp).Row trsh = Sheets("ThisWeek").Cells(Rows.Count, "A").End(xlUp).Row Sheets("ThisWeek").Range("M2:M" & tr).Formula = Application.WorksheetFunction.IfError(Application.VLookup(Sheets("ThisWeek").Range("A2:A" & trsh), Sheets("LastWeek").Range("$A:$P"), 13, 0), "") End Sub 

这是我的sheet1,如何。我有A列的ID和M列的Repsonsible以及N和O的更新。 所以,这是我的工作表2。假设列A中的ID和列M中的结果。我已经突出显示了我的结果红色,(即使我没有找到ID,我把它们打印为0),我不需要这个。我已经在下一列,我期待的结果

代替

 Sheets("ThisWeek").Range("M2:M" & tr).Formula = Application.WorksheetFunction.IfError(Application.VLookup(Sheets("ThisWeek").Range("A2:A" & trsh), Sheets("LastWeek").Range("$A:$P"), 13, 0), "") 

尝试

 Dim cel as Range For Each cel In Sheets("ThisWeek").Range("M2:M" & tr) cel.Offset(0, 1).Formula = Application.WorksheetFunction.IfError(Application.VLookup(cel, Sheets("LastWeek").Range("$A:$P"), 13, 0), "") Next cel 

尽pipe您的代码可以使用工作表和范围variables进行修改。 并确保你使用正确的trtrsh

编辑:


 Sub lookupPSQM() Dim thisWeekLR As Long, lastWeekLR As Long Dim thisWeekSht As Worksheet, lastWeekSht As Worksheet Dim rng As Range, cel As Range Set thisWeekSht = ThisWorkbook.Sheets("ThisWeek") Set lastWeekSht = ThisWorkbook.Sheets("LastWeek") thisWeekLR = thisWeekSht.Cells(Rows.Count, "A").End(xlUp).Row 'lastWeekLR = lastWeekSht.Cells(Rows.Count, "A").End(xlUp).Row Set rng = thisWeekSht.Range("A2:A" & thisWeekLR) For Each cel In rng cel.Offset(0, 12).Formula = Application.WorksheetFunction.IfError(Application.VLookup(cel, Sheets("LastWeek").Range("$A:$P"), 13, 0), "") Next cel End Sub 

请参阅图片以供参考。

工作表LastWeek

在这里输入图像描述

本周

在这里输入图像描述

你可以尝试这样的事情…

如有需要,请更正表单参考。 目前它假定这张表被称为本周和最后一周。

 Sub lookupPSQM() Dim wsSource As Worksheet, wsDest As Worksheet Dim tr As Long With Application .Calculation = xlCalculationManual .EnableEvents = False .ScreenUpdating = False End With Set wsSource = Sheets("LastWeek") Set wsDest = Sheets("ThisWeek") tr = wsDest.Cells(Rows.Count, "A").End(xlUp).Row wsDest.Range("M2:M" & tr).Formula = "=IfError(VLookup(A2,'" & wsSource.Name & "'!A:M, 13, 0), """")" With Application .Calculation = xlCalculationAutomatic .EnableEvents = True .ScreenUpdating = True End With End Sub 

代码将是这样的。

 Sub test() Dim Ws As Worksheet, toWs As Worksheet Dim vDB, vR(), vDB2 Dim i As Long, j As Long Set toWs = Sheets("ThisWeek") Set Ws = Sheets("LastWeek") vDB = Ws.Range("a1").CurrentRegion vDB2 = toWs.Range("a1").CurrentRegion n = UBound(vDB2, 1) ReDim vR(1 To n - 1, 1 To 1) For i = 2 To n For j = 2 To UBound(vDB, 1) If vDB2(i, 1) = vDB(j, 1) Then vR(i - 1, 1) = vDB(j, 13) Exit For End If Next j Next i toWs.Range("m2").Resize(n - 1) = vR End Sub