如何从Application.Selection.Areas中排除最上面的选择?

时间:2019-06-27 20:57:24

标签: excel vba

我想从一列选择列表(CTRL +单击)中排除最上面的选择。例如,如果我选择单元格V12 + V10 + V14 + V9。最上面的选择是V9。我有这段代码遍历所有选定单元格,但我需要排除最上面的选择(即V9)。

这是工作代码:

Dim rngPart as Range
For Each rngPart in Application.Selection.Areas
    MsgBox rngPart.Address
Next

我需要帮助来排除最上面的选择

1 个答案:

答案 0 :(得分:0)

我将其分解为几个函数以将其组合在一起。

首先,我要一个函数根据其行查找最大范围。为此,我们只需要一个简单的循环并指定小于前一个单元格的范围即可。

Private Function getTopRange(ByRef source As Range) As Range
    Dim cell As Range
    For Each cell In source

        If getTopRange Is Nothing Then
            Set getTopRange = cell
        End If

        If cell.Row < getTopRange.Row Then
            Set getTopRange = cell
        End If

    Next cell
End Function

然后,我将创建一个函数,该函数将返回不包括顶部在内的范围。

再次这样做,我们只需要一个简单的循环。如果不是顶部单元格,则将其合并到我们的返回范围值。

Private Function excludeTopRange(ByRef source As Range) As Range
    Dim topRange As Range
    Set topRange = getTopRange(source)

    Dim cell As Range
    For Each cell In source

        ' Only add if not the top cell
        If cell.Address <> topRange.Address Then
            If excludeTopRange Is Nothing Then
                Set excludeTopRange = cell
            Else
                Set excludeTopRange = Union(excludeTopRange, cell)
            End If
        End If
    Next cell

End Function

将它们放在一起,您只需调用我们的新功能!

Private Sub test()

    Dim source As Range
    Set source = Application.Selection

    Dim excluded As Range
    Set excluded = excludeTopRange(source)

    MsgBox excluded.Address

End Sub

尝试design来使函数保持较小和可重用性是一个很好的选择。更容易阅读,调试,测试和重用!