Vba 匹配值范围内的参数值,如果找到匹配项,则返回第一列中的值

Vba 匹配值范围内的参数值,如果找到匹配项,则返回第一列中的值,vba,excel,excel-formula,Vba,Excel,Excel Formula,我正在尝试编写一个函数,可以在单独的工作表中搜索一个单元格区域,如果存在匹配项,我希望将单元格设置为同一行中的值,但设置为范围的第一列。第一列是initials,范围中的其他列将仅为整数。我正在用VBA编写函数。到目前为止,我甚至不能让我的函数匹配那里的a值 我的剧本: Public Function searchRange(val As Range, sRng As Range) Dim cel As Range For Each cel In sRng.Cells

我正在尝试编写一个函数,可以在单独的工作表中搜索一个单元格区域,如果存在匹配项,我希望将单元格设置为同一行中的值,但设置为范围的第一列。第一列是initials,范围中的其他列将仅为整数。我正在用VBA编写函数。到目前为止,我甚至不能让我的函数匹配那里的a值

我的剧本:

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 

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

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=已找到

searchRange=cel.Parent.cellscell.row,1.0

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

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!")

谢谢那太完美了。这是我第一天看vba,所以这非常有用!