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)您的Findfunction进行更改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