Vba 匹配值范围内的参数值,如果找到匹配项,则返回第一列中的值
我正在尝试编写一个函数,可以在单独的工作表中搜索一个单元格区域,如果存在匹配项,我希望将单元格设置为同一行中的值,但设置为范围的第一列。第一列是initials,范围中的其他列将仅为整数。我正在用VBA编写函数。到目前为止,我甚至不能让我的函数匹配那里的a值 我的剧本: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
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,所以这非常有用!