我的VBA for Excel存在问题。
我想在工作表的列中搜索特定值(对于特定ID),并将该值传递给另一个表行(该ID)。会发生什么如果列中所有ID的Find()方法的What:=“value”参数中的值不存在?
如果ID(第一张表)没有该值,我不想将任何值传递给另一张(该ID)。我想改为设置“#N / A”值。实际上它传递了前任ID的值。
我该怎么办?
答案 0 :(得分:0)
我将这种技术用于我的VLOOKUP
公式,这只是基本的Excel,而不是VBA。
假设我们有一个简单的两列表,其中ID在列A中,列B中的值在表1中,我们正在查找表2中的ID。
= IF(ISERROR(VLOOKUP(A1, Sheet1!A1:B100,2,FALSE)),"NA", VLOOKUP(A1, Sheet1!A1:B100,2,FALSE))
如果你找不到ID那么查找,那么ISERROR为真并设置NA,否则得到查找值。
这样的结构可能适用于你的情况。
<强> EXTENSION 强>
数据强>
表格如下所示,ID为A1。所以缺少ID 3。
ID KEY
1 100
2 200
4 400
<强> CODE 强>
我写了两个程序。 findme
两次搜索ID = 2和3,findcode
函数查找ID,然后查找下一列偏移量1以查找值。我在搜索3时没有列表中的错误代码。
Sub findme()
Dim rng As Range
Dim i As Long
Dim y As Variant
Set rng = ThisWorkbook.Sheets(1).Range("A1:A100")
' Example look for 2 - get 200
i = 2
y = findcode(CStr(i), rng)
MsgBox ("id=" & CStr(i) & ". y = " & CStr(y))
' Look for 3 it should fail
i = 3
y = findcode(CStr(i), rng)
MsgBox ("id=" & CStr(i) & ". y = " & CStr(y))
End Sub
Public Function findcode(i As String, rng As Range) As Variant
Dim x As Variant
Set x = rng.Find(What:=CStr(i), After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If x Is Nothing Then
i = CInt(CVErr(xlErrNA))
findcode = CVErr(xlErrNA)
Else
findcode = x.Offset(0, 1).Value
End If
End Function
因此,msgbox显示id = 2,y = 200,然后在第二次运行时显示错误代码。