我想做类似的事情:
E18-(1,1) &":" &E18+(1,1)
我的目的是保持范围E18
(值= B)的选择,并将选择范围扩展为D16:F20
。
如果我的单元格范围为E18
,并且我想将范围扩展到D16:F20
,我该怎么做?
答案 0 :(得分:15)
你的意思是这样吗?
<强>语法强>
ExpandRange [范围],[左侧的Col数],[顶部的行数],[数字Col右侧],[行数]
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
答案 1 :(得分:7)
以下是我用来调整现有选择的简单代码。
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count + 50).Select
这将为行计数添加5,为列计数添加50。适应您的需求。
答案 2 :(得分:3)
你可以使用比VBA偏移更丰富的Application.WorksheetFunction.Offset()
并完成问题所需的一切。
我认为Siddharth Rout ExpandRange可以做到这一点,而不需要UDF。
答案 3 :(得分: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制作我的msg
答案 4 :(得分: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
答案 5 :(得分:0)
这是我的第一篇文章。我知道我参加晚会有点晚,对我来说很明显,这里的大多数人比我有经验和技能得多。因此,我怀疑我的解决方案是否包含了许多“大局”的细微差别,但我已经证实它们对我有用,我希望它们也对你们所有人也有用。
好的,回到问题所在。 这是我的方法。
示例一
要针对您的问题提出的确切情况执行此操作,如果您从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