9

我想做类似的事情:

E18-(1,1) &":" &E18+(1,1)

我的意图是保留范围E18(值 = B)的选择并将选择范围扩展到D16:F20.

Cell_Image_Excel_Highlighted_B

如果我有一个单元格的范围,E18并且我想将范围扩展到D16:F20,我该怎么做?

4

6 回答 6

15

你的意思是这样吗?

句法

ExpandRange [ Range ], [ Number of Col on left ], [ Number of Rows on top ], [ Number of Col on right ], [ Number of Rows down ]

Sub Sample()
    Debug.Print ExpandRange(Range("B5"), 1, 1, 1, 1)            '<~~ $A$4:$C$6
    Debug.Print ExpandRange(Range("A1"), 1, 1, 1, 1)            '<~~ Error
    Debug.Print ExpandRange(Range("XFD4"), 1, 1, 1, 1)          '<~~ Error
    Debug.Print ExpandRange(Range("XFD1048576"), 1, 1, 1, 1)    '<~~ Error
    Debug.Print ExpandRange(Range("E5"), 1, 1, 1, 1)            '<~~ $D$4:$F$6
End Sub

Function ExpandRange(rng As Range, lft As Long, tp As Long, _
rt As Long, dwn As Long) As String
    If rng.Column - lft < 1 Or _
       rng.Row - tp < 1 Or _
       rng.Column + rt > ActiveSheet.Columns.Count Or _
       rng.Row + dwn > ActiveSheet.Rows.Count Then
        ExpandRange = "Error"
        Exit Function
    End If

    ExpandRange = Range(rng.Offset(-1 * tp, -1 * lft).Address & ":" & _
                        rng.Offset(dwn, rt).Address).Address
End Function
于 2012-05-21T21:00:18.440 回答
12

这是我用来调整现有选择大小的简单代码。

Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count + 50).Select

这将使行数增加 5,列数增加 50。适应您的需求。

于 2012-11-06T10:35:52.200 回答
4

您可以使用Application.WorksheetFunction.Offset()比 VBA 的 Offset 更丰富的内容,并完成问题所需的一切。
我认为它可以完成 Siddharth Rout ExpandRange 所做的工作,而不需要 UDF。

于 2012-05-21T21:38:37.907 回答
2
Range(Cells(WorksheetFunction.Max(1, Selection.Row - 1), _
      WorksheetFunction.Max(1, Selection.Column - 1)), _
      Cells(WorksheetFunction.Min(Selection.Worksheet.Rows.Count, _
      Selection.Row + 1), _
      WorksheetFunction.Min(Selection.Worksheet.Columns.Count, _
      Selection.Column + 1))).Select

upd:感谢 Siddharth Rout 格式化我的消息

于 2012-05-21T21:26:26.913 回答
1

如何从工作表的任何位置选择和扩展范围到工作表的任何位置。

这是我的第一篇文章。我知道我参加聚会有点晚了,对我来说很明显,这里的大多数人都比我更有经验和技能。所以我怀疑我的解决方案是否包括他们的“大局”细微差别考虑,但我已经证实它们对我有用,我希望它们也对你们所有人有用。

好的,那么回到问题上来。这是我的做法。

  • 示例一
    要针对您的问题提出的确切情况执行此操作,如果您从 E18 开始并且想要将范围扩展到 D16:F20,请使用下面的代码。只要您有完整范围的空间,您的活动单元格实际上可以在任何地方,并且该范围将跟随它。

    Range(ActiveCell.Offset(-2, -1), ActiveCell.Offset(2, 1)).Select

  • 示例二
    如果您已经选择了一个范围,然后您想进一步扩展它(假设向下增加 2 行,向右增加 1 列),请执行以下操作:

    Range(Selection, Selection.Offset(2, 1)).Select

  • 示例三
    如果要选择包含数据的所有连续单元格的范围,从活动单元格开始并继续向下直到到达空白单元格,然后还将单元格从 1 列添加到左侧,然后执行以下操作:

    Range(ActiveCell, Selection.End(xlDown).Offset(0, -1)).Select

于 2020-08-02T03:21:29.803 回答
0

我没有返回绝对地址,而是修改了上面的语法以返回一个范围。归功于 Siddharth Rout = )

Function ExpandRG(rng As Variant, lft As Long, tp As Long, rt As Long, dwn As Long) _
 As Range
 Set ws = rng.Parent
If rng.Column - lft < 1 Or _
   rng.Row - tp < 1 Or _
   rng.Column + rt > ActiveSheet.Columns.Count Or _
   rng.Row + dwn > ActiveSheet.Rows.Count Then
        MsgBox "Out of range"
        Exit Function
End If

 Set rng = ws.Range(rng.Offset(-1 * tp, -1 * lft).Address & ":" & _
                    rng.Offset(dwn, rt).Address)                        
End Function

Sub aa()
Dim ori_add, O_add, New_add As Range
Set ori_add = Range("B2")
Set O_add = ori_add

Call ExpandRG(ori_add, 1, 1, 1, 1)
Set New_add = ori_add

MsgBox "Original address " & O_add.Address & ", new address is" & New_add.Address
End Sub
于 2014-03-20T09:26:44.303 回答