我想从一列选择列表(CTRL +单击)中排除最上面的选择。例如,如果我选择单元格V12 + V10 + V14 + V9。最上面的选择是V9。我有这段代码遍历所有选定单元格,但我需要排除最上面的选择(即V9)。
这是工作代码:
Dim rngPart as Range
For Each rngPart in Application.Selection.Areas
MsgBox rngPart.Address
Next
我需要帮助来排除最上面的选择
答案 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来使函数保持较小和可重用性是一个很好的选择。更容易阅读,调试,测试和重用!