一系列值中的matcha参数值,如果匹配,则返回第一列中的值

时间:2017-10-03 18:32:26

标签: vba excel-vba excel-formula excel

我正在尝试编写一个可以在单独的工作表中搜索单元格范围的函数,如果有匹配,我想将单元格设置为同一行中的值,但是Range的第一列。第一列是首字母,范围中的其他列只是整数。我在VBA中编写函数。到目前为止,我无法使我的函数甚至匹配那里的值。

我的剧本:

Public Function searchRange(val As Range, sRng As Range)

    Dim cel As Range
    For Each cel In sRng.Cells

        If cel.value = val.value Then
            searchRange = "found!"
        Else
            searchRange = "not found!"
        End If
    Next cel
End Function 

Where my function is in the excel sheet

My Search Range

1 个答案:

答案 0 :(得分:1)

因为您循环遍历所有单元格,所以最终只返回最后一个单元格。你需要调整一下逻辑。

Public Function searchRange(val As Range, sRng As Range)

    Dim cel As Range
    For Each cel In sRng.Cells

        If cel.value = val.value Then
            searchRange = "found!"
            Exit Function
        End If

    Next cel

    searchRange = "not found!"
End Function 

现在一旦找到该值,它就会返回正确的结果并退出该函数。如果它经过整个循环,则找不到该值。

作为奖励:

要返回A列中的值,请替换;

  

searchRange = "found!"

  

searchRange = cel.Parent.Cells(cel.row,1).Value

或者,如果您不知道实际的列号,我们可以返回所提供的搜索范围的第一列中的值。

  

searchRange = cel.offset(,-1*(cel.column-sRng.Column)).Value

只是为了完成:

这可以使用Excel中的原生公式来完成:

=IFERROR(INDEX('All Therapists'!$A:$A,AGGREGATE(15,6,ROW('All Therapists'!$E$27:$Q$50)/('All Therapists'!$E$27:$Q$50=B3),1),"not found!")