我会马上说,我是一个整体编码新手。我在学习各种各样的事情的过程中学到了很多东西,而且我一直都在学习。
我现在遇到的问题是使用application.vlookup(...)进行循环。我做了很多搜索,但我放弃了,因为我无法得到任何工作。我从原始代码中删除了.WorksheetFunction部分,因为显然它没有改变任何东西,但至少它没有在找不到值时产生VBA错误并且行为类似于普通函数(给出#N / A)
所以在下面的代码中,我在A列中有我的数据,我需要在另一个工作表的查询中使用vlookup进行转换(并将其放在与数据相同的工作表中,在C列中)。
Sub vlookup()
Dim wsdata As Worksheet
Dim lr As Long
Dim rng As Range
Set wsdata = ThisWorkbook.Worksheets("Data")
wsdata.Columns("C").Delete
wsdata.Range("D1") = "Correct number"
lr = wsdata.Cells(Rows.Count, "A").End(xlUp).Row
Set rng = wsdata.Range("A1:D" & lr)
Dim lrQuery As Long, iNr As Long
Dim wsQuery As Worksheet
Dim LookUpRange As Range
Set wsQuery = ThisWorkbook.Sheets("IDMquery")
lrQuery = wsQuery.Cells(Rows.Count, "A").End(xlUp).Row
Set LookUpRange = wsQuery.Range("D:F")
For iNr = 2 To lr
wsdata.Cells(iNr, 4).Value = Application.VLookup(wsdata.Cells(iNr, 1).Value, LookUpRange, 3, 0)
Next iNr
End Sub
我必须补充说格式化(或者它们是什么)存在一些问题,因为原始数据是外部的。例如。对于“17935”,VarType将给出8(字符串)而不是数字类型。
在电子表格中,使用双一元法很容易修复它,并且以下公式可以正常工作:
=VLOOKUP(--A2,IDMquery!D:F,3,false)
当然我可以使用辅助列并使用它,如果我不能以任何其他方式执行它可能是一个选项,但我更倾向于严格在VBA内。
你们知道这是否可以解决?
干杯!
编辑:顺便说一句,我也在VBA中将A列的格式更改为“0”,但实际上并不想将这些值更改为数字,不确定原因。