是否可以在范围内找到范围或单元格的相对行数和列数。
实施例: 在下表中(表名“表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
这可以实现吗?特别是通过使用标准对象属性/方法而不需要很长的代码集?
答案 0 :(得分:1)
当您在标题行中找到文本时,您的行号始终为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
作为行号和列号。
答案 1 :(得分:0)
试试这个:
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
但是,如果你只需要Sid在评论中指出的内容,请采取他的路线 顺便说一句,这只是逻辑,如果要使用那些行号和列号,可以将其更改为函数。