我正在尝试编写一个可以在单独的工作表中搜索单元格范围的函数,如果有匹配,我想将单元格设置为同一行中的值,但是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
答案 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!")