Excel-VBA查找函数不考虑列的第一行
我一直在网上寻找一个简单的方法来查找某些string或值的行号和列号。 令我惊讶的是,我还没有find我所希望的,所以我决定编写自己的函数。 由于我是一个初学者,所以遇到了一些问题。
所以在这个例子中,我的目标是编写一个函数,我可以在任何VBA子程序中使用,以查找行号或列号。 现在,我编写了以下函数来查找列:
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栏):
一个
乙
C
d
Ë
我应该得到的结果是“3”。 这是行得通的,我很高兴这一点。 但是,如果我在表中input另一个“C”,例如
C
乙
C
d
Ë
我得到的结果仍然是“3”而不是“1”。 如果我改变表格
C
乙
一个
d
Ë
我得到的结果是“1”。
所以它看起来像第一行不被考虑,一旦我正在寻找的价值不止一次在我search的范围内。
我已经在网上search了这个问题,不幸的是我无法find一个明确的答案。 然而,有些人build议通过从最后一个单元格开始search(即search将在“传递”最后一个单元格之后再次直接跳到起始点)来在第一个单元格中开始search。 build议的代码是添加
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
编辑:在您尝试使用After:=.Cells(.Cells.Count)
您的Find
function进行更改After:=.Cells(.Cells.Count)
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