【问题标题】:Select a range of cells starting from the Active Cell从活动单元格开始选择一系列单元格
【发布时间】:2016-05-10 17:08:18
【问题描述】:

我需要以下代码方面的帮助。我想做的是,从活动单元格(可以是任何单元格)开始,选择右侧的所有单元格(=第一列)+左侧的所有单元格(=最后一列)+上面的所有单元格,直到突出显示的行 + 下面的所有单元格,直到突出显示的行。请看附资料Sample Data

例如,在示例数据中,如果活动单元格是 G6,则代码将选择从 A2 到 J7 的整个范围。同样,如果活动单元格是 F12,代码将选择从 A11 到 J13 的整个范围。

Sub sel()
Dim LastCol As Long
With ActiveSheet
    LastCol = .Range("A1").SpecialCells(xlCellTypeLastCell).Column
Dim FirstCol As Long
With ActiveSheet
LastVrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(WorksheetFunction.Max(1, Selection.Row, LastVrow), _
  WorksheetFunction.Max(1, Selection.Column, LastCol)), _
  Cells(WorksheetFunction.Min(Selection.Worksheet.Rows.Count, _
  Selection.Row), _
  WorksheetFunction.Min(Selection.Worksheet.Columns.Count, _
  Selection.Column, FirstCol))).Select
 End With
End With
 End With
End Sub

【问题讨论】:

  • 灰色的行真的是空的吗,甚至没有公式?
  • Scott - 是的,它们确实是空的。
  • @SamM ,如果 G6 是活动单元格,它应该选择 A5 到 J7 的范围,对吧?
  • @Kellsens - 不,它应该从 A2 到 J7 中选择,因为 G6 在“Header 1”组中,如果你愿意的话。

标签: vba excel


【解决方案1】:

这会做你想做的事:

Sub foo2()
Dim rng As Range
Dim st As Long
Dim fin As Long
With Selection
    If Cells(.Row - 1, 1) <> "" Then
        st = Cells(.Row, 1).End(xlUp).Row
        If st = 1 Then st = 2
    Else
        st = .Row
    End If
    If Cells(.Row + 1, 1) <> "" Then
        fin = Cells(.Row, 1).End(xlDown).Row
    Else
        fin = .Row
    End If
    Set rng = Range("A" & st & ":J" & fin)

End With
rng.Select
End Sub

【讨论】:

  • 呵呵呵呵我现在应该删除我的答案,因为我编写的代码几乎与 Scott Craner 相同。开发就是魔法。
【解决方案2】:

考虑到您的模板,也许这会有所帮助:

sub sel()
    dim selectRowS as integer
    dim selectRowE as integer    

    with Selection    

        selectRowS = .row
        selectRowE = .row

        If Cells(.row + 1, 1) <> ""
            selectRowE = .end(xlEnd).row
        End If 
        If Cells(.row - 1, 1) <> ""
            if .row - 1 = 1 then
                selectRowS = 2
            Else
                selectRowS = .end(xlUp).row
            End if
        End If 

        Range(Cells(selectRowS,1),Cells(selectRowE,10)).select

    End With
End Sub

附:对不起我的英语

【讨论】:

  • 留下吧,它展示了其他的基本方法,将来可能对其他人有帮助。
【解决方案3】:

也许你可以试试这个。无论activecell单元格在哪里,首先将其移动到第一个位置,然后选择整个数据块。

Sub Sel()

    Selection.End(xlToLeft).Select 
    Selection.End(xlUp).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select

End Sub

【讨论】:

  • @swirdings - 感谢您的代码。我刚刚运行它,代码只选择数据,直到所有方向的第一个空白单元格。如果第一个单元格和活动单元格之间有一个空白单元格,那么它只会选择直到该列的数据,并且不会将其扩展到第一列或最后一列之外。
  • 非常感谢,斯科特和凯尔森。我感谢您的所有帮助。两个代码都有效,看来我只能将一个标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多