查找范围OR单元格的相对行数和列数

时间:2014-09-03 05:57:47

标签: vba excel-vba excel

是否可以在范围内找到范围或单元格的相对行数和列数。

实施例: 在下表中(表名“表2”) Example Table Data

如果我使用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

这可以实现吗?特别是通过使用标准对象属性/方法而不需要很长的代码集?

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

这会为您提供12作为行号和列号。

答案 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在评论中指出的内容,请采取他的路线 顺便说一句,这只是逻辑,如果要使用那些行号和列号,可以将其更改为函数