如何查找单元格、行和列相对于其父范围的位置?

问题描述 投票:0回答:2

考虑以下简化函数:

Private Function FindJimmy(rngMyRange As Range) As Long
Dim oneCell As Range
rngMyRange.cells(2,2) =  "Jimmy"
    For Each oneCell In rngMyRange
        If oneCell.Value = "Jimmy" Then
            Debug.Print oneCell.Row, oneCell.Column
            FindJimmy = oneCell.Row
            Exit Function
        End If
    Next oneCell
FindJimmy = 0
End Function 

Debug.Print oneCell.Row, oneCell.Column 将打印相对于包含 rngMyRange 的整个工作表的绝对行号和列号。
由于 rngMyRange 从绝对单元格 (5,5) 开始,如果在 (6,6) 处找到绝对单元格地址,则找到的单元格的相对值将为 2,2。
如果将范围传递给函数,则应该有一种简单的方法来查找找到的单元格的相对地址而不是绝对地址。

问题:如何确定 oneCell relative 到 rngMyRange 的行和列位置?

excel vba
2个回答
0
投票

由于 VBA 显然没有提供现成的函数来提供信息,因此建议的解决方案如下:

Private Function RelativeRow(rngMyRange As Range, strQuery As String) As Long
Dim oneCell As Range
Dim FirstRow As Long, FirstCol As Long
FirstRow = rngMyRange.Row: FirstCol = rngMyRange.Column
    For Each oneCell In rngMyRange
        If oneCell.Value = strQuery Then
            Debug.Print oneCell.Row, oneCell.Column
            RelativeRow = oneCell.Row - FirstRow + 1
            Exit Function
        End If
    Next oneCell
RelativeRow = 0
End Function

0
投票

我假设 oneCell 将始终位于 rngMyRange 的下方和右侧,是吗?

数学拯救世界:

JimmyRow = (oneCell.Row - rngMyRange.Row) + 1
JimmyColumn = (oneCell.Column - rngMyRange.Column) + 1

将行和列作为单独的变量,您可以根据需要使用和操作它们来实现您的目的。

© www.soinside.com 2019 - 2024. All rights reserved.