查找范围的相对行数和列数或单元格
问题描述:
是否可以在范围内查找范围或单元格的相对行数和列数。查找范围的相对行数和列数或单元格
举例: 在下面的表(表名 “表2”)
如果我使用Find方法和打印像这样的地址:
Dim loHeaderRow As Range
Set loHeaderRow = ThisWorkbook.Worksheets("Sheet3").ListObjects("Table2").HeaderRowRange
Dim rFindResult As Range
Set rFindResult = loHeaderRow.Find(What:="MajorVersion", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
MsgBox rFindResult.Address
将打印
$C$3
但是,范围rFindResult与父范围loHeaderRow的相对位置是:
Row number: 1
Column Number: 2
这可以实现吗?特别是通过使用标准的对象属性/方法而不需要很长的一组代码?
答
您正在查找标题行中的文本时,您的行号始终为1
。至于列,您可以使用Debug.Print (rFindResult.Column - loHeaderRow.Column) + 1
例如
Sub Sample()
Dim loHeaderRow As Range, rFindResult As Range
Set loHeaderRow = ThisWorkbook.Worksheets("Sheet3").ListObjects("Table2").HeaderRowRange
Set rFindResult = loHeaderRow.Find(What:="MajorVersion", _
LookIn:=xlValues, _
LookAt:=xlWhole, _
MatchCase:=False, _
SearchFormat:=False)
MsgBox "The Row is 1 and the Column is " & _
(rFindResult.Column - loHeaderRow.Column) + 1
End Sub
这会给你1
和2
的行和列数。
答
试试这个:
Sub test2()
Dim mytable As ListObject
Set mytable = Sheet1.ListObjects("Table2") '~~> adjust the sheet code name to suit
Dim myarr: myarr = mytable.Range
Dim i As Long, j As Long
Dim mysrch As String
mysrch = "MajorVersion"
For i = LBound(myarr, 1) To UBound(myarr, 1)
For j = LBound(myarr, 2) To UBound(myarr, 2)
If myarr(i, j) = mysrch Then
Debug.Print "Relative Row: " & i
Debug.Print "Relative Column: " & j
Exit For
End If
Next
Next
End Sub
但是如果你只需要什么希德在评论中指出,把他的路线。
顺便说一句,这只是逻辑,如果你要使用那些行号和列号,你可以把它改成函数。