【问题标题】:matcha argument value in a range of values, if match is found return the value from the first column匹配一个值范围内的参数值,如果找到匹配项,则返回第一列的值
【发布时间】:2017-10-04 02:52:29
【问题描述】:

我正在尝试编写一个函数,该函数可以在单独的工作表中搜索单元格范围,如果存在匹配项,我想将单元格设置为同一行中的值,但范围的第一列。第一列是首字母,范围内的其他列将只是整数。我正在用 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

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案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!")
    

    【讨论】:

    • 谢谢!那是完美的。这是我看 vba 的第一天,所以这非常有帮助!
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多