Vba 使用查找函数时出错
我有两张床单。第1张:上周,第2张:本周 我在sheet2和sheet1的A列中查找我的ID,如果它们匹配,我将从sheet1的M列复制值到sheet2的M列 由于某些原因,我在表1中找不到的值被填充为“0”。我不希望我的代码出现这种情况。我只想让代码查找ID,如果它们匹配,我想要值,否则我不想打印任何内容 有人能告诉我哪里出了问题吗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
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,则公式将在公式单元格中返回空字符串“”。我用一些虚拟数据测试了它,它在公式单元格中返回空白。