VBA - Excel:如果值在所有ID的工作表中不存在Find(What:=“value”)中的什么参数

时间:2016-02-02 09:55:15

标签: excel vba excel-vba

我的VBA for Excel存在问题。

我想在工作表的列中搜索特定值(对于特定ID),并将该值传递给另一个表行(该ID)。会发生什么如果列中所有ID的Find()方法的What:=“value”参数中的值不存在?

如果ID(第一张表)没有该值,我不想将任何值传递给另一张(该ID)。我想改为设置“#N / A”值。实际上它传递了前任ID的值。

我该怎么办?

1 个答案:

答案 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,然后在第二次运行时显示错误代码。