Как исключить самый верхний выбор из Application.Selection.Areas? - PullRequest
0 голосов
/ 27 июня 2019

Я хочу исключить самый верхний выбор из списка выбора (CTRL + щелчок) в столбце.Например, если я выбрал Cell V12 + V10 + V14 + V9.Самый верхний выбор - V9.У меня есть этот код, который проходит по всем выделенным ячейкам, но мне нужно исключить самый верхний выбор (например, V9).

Вот рабочий код:

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

Мне нужна помощь с исключениемсамый верхний выбор

1 Ответ

0 голосов
/ 28 июня 2019

Я бы разбил это на несколько функций, чтобы составить это вместе.

Сначала я бы хотел, чтобы функция находила верхний диапазон по его строке. Для этого нам просто нужен простой цикл и назначить диапазон, если он меньше, чем в предыдущей ячейке.

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

Это хороший дизайн , чтобы ваши функции были небольшими и многоразовыми. Его легче читать, отлаживать, тестировать и использовать повторно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...