Excel-使用VBA搜索范围
我基本上是想做一个Excel-使用VBA搜索范围,vba,excel,Vba,Excel,我基本上是想做一个VLOOKUP,但是我的单元格内容太长了VLOOKUP无法处理。因此,我使用此VBA脚本在定义的范围内搜索: Function betterSearch(searchCell, Range As String) For Each cell In Range If cell.Value = searchCell.Value Then betterSearch = "Match"
VLOOKUP
,但是我的单元格内容太长了VLOOKUP
无法处理。因此,我使用此VBA脚本在定义的范围内搜索:
Function betterSearch(searchCell, Range As String)
For Each cell In Range
If cell.Value = searchCell.Value Then
betterSearch = "Match"
Exit For
End If
betterSearch = "No match"
Next
End Function
该函数被称为(例如):=betterSearch(B33;'Master'!C:C)
但是,我无法获得一个输出。我开始生气了,我犯了什么错误
我开始生气了,我犯了什么错误
好几个
- 参数
被声明为范围
,但使用起来很清楚,就好像它是字符串
对象一样。它应该声明为范围范围
- 名称
正在隐藏Range
,这可能是问题,也可能不是问题(在本例中不是问题)。在更大范围内隐藏/隐藏现有声明通常是个坏主意Global.Range
- 该函数隐式地
。如果明确的话,那就更好了公共
- 参数是通过ref
隐式传递的,但没有理由这样做;它们应该通过val传递
ByVal
- 参数
是一个隐式的searchCell
,但它的使用就像是一个变量
对象一样;将其范围
声明为范围
- 函数返回一个隐式
,但实际上返回一个变量
。签名应将返回类型的字符串
指定为字符串
- 未声明局部变量
,这意味着它是一个动态隐式单元格
。将其显式声明为范围变量
- 使用未声明变量编译的代码没有指定
选项Explicit
,这意味着VBA将愉快地编译并运行任何输入错误。避免愚蠢的尴尬问题,在每个模块的顶部指定
,并声明每个变量Option Explicit
- “不匹配”返回值在每次迭代时都被不必要地重新分配
- 函数名为
,但每个VBA类型库中的公共成员都是一致的camelCase
PascalCase
- 缩进不一致
Option Explicit
Public Function BetterSearch(ByVal searchCell As Range, ByVal source As Range) As String
Dim cell As Range
For Each cell In source
If cell.Value = searchCell.Value Then
BetterSearch = "Match"
Exit Function
End If
Next
BetterSearch = "No match"
End Function
在我看来,如果函数返回的是
布尔值,而不是“神奇字符串”,那么它会更有用True
找到时,False
未找到时。不应Range as String
是Range as Range
?变量不应与先前存在的方法同名betterSearch(searchCell,源代码范围)
会更好。非常感谢。我理解你的大部分评论,但是,我遇到了以下奇怪的事情。如果源区域与searchCell位于同一工作表上,则该区域有效,但如果该区域位于不同的工作表上,则返回一个#值!错误?嘎,打字/复制+粘贴错误。。。应该是源代码中每个单元格的-已修复。我捕获的那个;)但它只是在工作表上不起作用?嗯,它应该起作用@Tampert将退出功能替换为退出功能(在我的机器上正常工作)!它正在搜索的范围有几个#值!它自己的错误。。。再次感谢!