2014-03-06 81 views
1

在Excel 2010中,我的MATCH语句不起作用。该函数应返回由datasetId(应该是唯一的)标识的数据集的行号,如果datasetId不存在,则返回0。无论是资料集存在于第一列与否,功能总是转到第二个分支,并返回0Excel 2010 VBA匹配函数未找到匹配项

Function findDataset(dataWorksheet As Worksheet, datasetId As String) As Integer 
    If Not VBA.IsError(Application.Match(datasetId, dataWorksheet.Columns(1), 0)) Then 
     findDataset = Application.Match(datasetId, dataWorksheet.Columns(1), 0) 
    Else 
     findDataset = 0 
    End If 
End Function 
+0

您在** VBA **子工作表或工作表单元格中使用该函数吗? –

+0

* MATCH函数返回的错误值是什么* – RBarryYoung

+0

我在小组中使用它。错误代码是13(类型不匹配) – user3388687

回答

1

没有什么根本性的错误你的函数:

Function findDataset(dataWorksheet As Worksheet, datasetId As String) As Integer 
    If Not VBA.IsError(Application.Match(datasetId, dataWorksheet.Columns(1), 0)) Then 
     findDataset = Application.Match(datasetId, dataWorksheet.Columns(1), 0) 
    Else 
     findDataset = 0 
    End If 
End Function 

Sub MAIN() 
    Dim ws As Worksheet 
    Dim id As String, n As Integer 
    Set ws = Sheets("Sheet1") 
    id = "XX" 
    n = findDataset(ws, id) 
    MsgBox n 
End Sub 

为我工作。 .............也许你的比赛不是确切的。

+0

匹配应该是精确的,因为即使在我得到相同结果之前直接创建数据集 Sub MAIN() Dim ws As Worksheet Dim id As String,n As Integer, LASTROW作为整数 集WS =表( “工作表Sheet”) ID = “XX” LASTROW = dataWorksheet.Range( “A” &dataWorksheet.Rows.Count).END(xlUp).Row dataWorksheet.Cells(LASTROW + 1,1).Value = id n = findDataset(ws,id) MsgBox n End Sub – user3388687