我一直在网上搜索一种简单的方法来查找某些字符串或值的行号和列号。令我惊讶的是,我还没有找到我想要的东西,所以我决定编写自己的函数。由于我是一个初学者,我遇到了一些问题。
因此,在这个示例中,我的目标是编写一个函数,我可以在任何 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 列):
一个
B
C
D
E
我应该得到的结果是“3”。这确实有效,我对此感到很高兴。但是,如果我在表中输入另一个“C”,例如
C
B
C
D
E
我得到的结果仍然是“3”而不是“1”。如果我将表格更改为
C
B
一个
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
编辑:在您尝试使用 After:=.Cells(.Cells.Count)
的 Find
函数中进行了更改
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
关于vba - Excel-VBA 查找函数不考虑列的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36790723/