Excel VBA查找函数不考虑列的第一行
我一直在网上寻找一种简单的方法来查找某些字符串或值的行号和列号。令我惊讶的是,我还没有找到我所希望的,所以我决定编写自己的函数。由于我是一个初学者,我遇到了一些问题 所以在这个例子中,我的目标是编写一个函数,我可以在任何VBA子函数中使用它来查找行数或列数。现在,我编写了以下函数来查找列:Excel VBA查找函数不考虑列的第一行,vba,excel,find,Vba,Excel,Find,我一直在网上寻找一种简单的方法来查找某些字符串或值的行号和列号。令我惊讶的是,我还没有找到我所希望的,所以我决定编写自己的函数。由于我是一个初学者,我遇到了一些问题 所以在这个例子中,我的目标是编写一个函数,我可以在任何VBA子函数中使用它来查找行数或列数。现在,我编写了以下函数来查找列: Function Find(SearchRange As String, Word As String) As Long Dim found As Range Set found = ActiveSheet
Function Find(SearchRange As String, Word As String) As Long
Dim found As Range
Set found = ActiveSheet.Columns(SearchRange).Find(what:=Word, LookIn:=xlValues, lookat:=xlWhole)
If Not found Is Nothing Then
Find = found.Row
End If
End Function
然后我对以下子模块进行了编码以使用该函数:
Sub FindTest()
Cells(1, 2) = Find("A", "C")
End Sub
因此,如果我有下表(A列):
AB
C
D
E
我应该得到的结果是“3”。这确实有效,我很高兴达到这一点。但是,如果我在表格中输入另一个“C”,例如 C
B
C
D
E
我得到的结果仍然是“3”而不是“1”。如果我把桌子换成 C
B
A
D
E
我得到的结果是“1” 因此,当我要查找的值在我要搜索的范围内出现多次时,第一行似乎不被考虑 我已经在网上搜索了这个问题,不幸的是我没有找到一个明确的答案。但是,有些人建议在第一个单元格开始搜索,从最后一个单元格开始搜索(即“通过”最后一个单元格后,搜索将直接跳转到开始位置)。建议的代码是添加
After:=.Cells(.Cells.Count)
在“查找”定义中,如果我更新为
Set found = ActiveSheet.Columns(SearchRange).Find(what:=Word, After:=.Cells(.Cells.Count), LookIn:=xlValues, lookat:=xlWhole)
我得到“编译错误:无效或不合格引用”
在这个阶段我真的很绝望。在这件事上有人能帮我吗
非常感谢 试试这个:
Sub findstr()
Dim rng As Range
Set rng = ActiveSheet.UsedRange.Find("C", , xlValues, xlWhole)
MsgBox rng.Row '--->this will give you row
MsgBox rng.Column '--->this will give you column
End Sub
EDIT:在Find
函数中进行了更改,您试图在After:=.Cells(.Cells.Count)
谢谢。但是,我想在一个函数中使用它,在这个函数中,我还可以指定查找的范围。如果我正确理解了您的代码,它将始终在整个工作表中搜索(即UsedRange),但我正在查找我定义搜索范围的内容。这非常有效。我也看到了我错在哪里:我需要有结构,以便能够使用“之后…”部分。非常感谢。@Stefan-很高兴我能帮上忙。祝你的项目顺利。
Function Find(SearchRange As String, Word As String) As Long
Dim found As Range
With Sheets("Sheet1").Range(SearchRange & ":" & SearchRange)
Set found = ActiveSheet.Columns(SearchRange).Find(what:=Word, After:=.Cells(.Cells.Count), LookIn:=xlValues, lookat:=xlWhole)
End With
If Not found Is Nothing Then
Find = found.Row
End If
End Function