2014-09-03 95 views
2

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

举例: 在下面的表(表名 “表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 

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

回答

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的行和列数。

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 

但是如果你只需要什么希德在评论中指出,把他的路线。
顺便说一句,这只是逻辑,如果你要使用那些行号和列号,你可以把它改成函数

相关问题