Vba 使用查找函数时出错

Vba 使用查找函数时出错,vba,excel,Vba,Excel,我有两张床单。第1张:上周,第2张:本周 我在sheet2和sheet1的A列中查找我的ID,如果它们匹配,我将从sheet1的M列复制值到sheet2的M列 由于某些原因,我在表1中找不到的值被填充为“0”。我不希望我的代码出现这种情况。我只想让代码查找ID,如果它们匹配,我想要值,否则我不想打印任何内容 有人能告诉我哪里出了问题吗 Sub lookup() Dim tr As Long Dim trsh As Long tr = Sheets("ThisWeek").Cells(Rows.C

我有两张床单。第1张:上周,第2张:本周

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

由于某些原因,我在表1中找不到的值被填充为“0”。我不希望我的代码出现这种情况。我只想让代码查找ID,如果它们匹配,我想要值,否则我不想打印任何内容

有人能告诉我哪里出了问题吗

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

你可以试试这样的

如果需要,请更正图纸参考。目前,它假定图纸被称为ThisWeek和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

你可以试试这样的

如果需要,请更正图纸参考。目前,它假定图纸被称为ThisWeek和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
而不是

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), "")
试一试


尽管可以使用工作表和范围变量修改代码。并确保使用正确的
tr
trsh

编辑:


请参阅图片以获取参考

上周的工作表

本周工作表

而不是

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), "")
试一试


尽管可以使用工作表和范围变量修改代码。并确保使用正确的
tr
trsh

编辑:


请参阅图片以获取参考

上周的工作表

本周工作表


代码如下所示

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

代码是这样的

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


tr
trsh
都是指
工作表(“本周”)。单元格(Rows.Count,“A”).End(xlUp)。Row
Ya,这是错误的吗?@Mrig我怎么才能摆脱它呢?你能发布样本数据,让这里的人重现这个问题吗。@Mrig我试着只使用tr,在这种情况下我也得到了0,,我还试着用Tr as Sheets(“ThisWeek”)。单元格(Rows.Count,“A”).End(xlUp)。行和trsh as Sheets(“LastWeek”)。单元格(Rows.Count,“A”).End(xlUp)。行仍然出现错误
Tr
trsh
都是指
Sheets(“ThisWeek”)。单元格(Rows.Count,“A”).End(xlUp)。行
Ya,这是错误的?@Mrig我怎样才能摆脱它?你能发布样本数据让这里的人重现这个问题吗。@Mrig我试着只使用tr,在这种情况下我也得到了0,我还试着用tr作为Sheets(“ThisWeek”).Cells(Rows.Count,“A”).End(xlUp)。Row和trsh作为Sheets(“LastWeek”).Cells(Rows.Count,“A”).End(xlUp).Row仍然我得到了错误我期望的结果是正确的,但是现在我在N列中的所有数据都消失了,这是为什么?@Jenny-根据您所附的屏幕截图,我想到了M列中的值
您希望结果显示在N列中
@Jenny-您希望结果显示在哪一列中?很抱歉Mrig造成混淆。我希望我的结果在MFine列,我的数据在M列的sheet1中,我希望Vlookup数据在M列的sheet2中。我期望的结果是正确的,但现在我在N列中的所有数据都消失了,为什么会这样?@Jenny-根据您所附的屏幕截图,我想到了
列M
中的值,您希望在
列N
@Jenny中显示结果-您希望结果显示在哪一列?很抱歉,Mrig混淆了。我希望我的结果在MFine列中,我的数据在M列的sheet1中,我希望Vlookup数据在M列的sheet2中,请您对这些行进行注释。我很难理解这段代码通过数组获取图纸数据,在两个数组比较后,如果两个数组相同,则将数据设置为new array vR()。最后,将结果数组记录到您的工作表范围中。请您对这些行进行注释。我很难理解这段代码通过数组获取图纸数据,在两个数组比较后,如果两个数组相同,则将数据设置为new array vR()。最后将结果数组记录到您的工作表范围。不可能。如果在上周工作表的A列中找不到本周工作表A列中的ID,则公式将在公式单元格中返回空字符串“”。我用一些虚拟数据测试了它,它在公式单元格中返回空白。不可能。如果在上周工作表的A列中找不到本周工作表A列中的ID,则公式将在公式单元格中返回空字符串“”。我用一些虚拟数据测试了它,它在公式单元格中返回空白。