簡體   English   中英

Excel VBA:如何擴展給定當前選擇的范圍

[英]Excel VBA: How to Extend a Range Given a Current Selection

我想做類似的事情:

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

我的意圖是保留范圍E18 (值 = B)的選擇並將選擇擴展到D16:F20

Cell_Image_Excel_Highlighted_B

如果我有一個單元格的范圍E18並且我想將范圍擴展到D16:F20 ,我該怎么做?

你的意思是這樣?

句法

ExpandRange [范圍]、[左側列數]、[頂部行數]、[右側列數]、[向下行數]

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

這是我用來調整現有選擇大小的簡單代碼。

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

這將使行數增加 5,列數增加 50。 適應您的需求。

您可以使用比 VBA 的 Offset 更豐富的Application.WorksheetFunction.Offset()並完成問題所需的一切。
我認為它可以完成 Siddharth Rout ExpandRange 所做的工作,而無需 UDF。

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 格式化我的味精

我沒有返回絕對地址,而是修改了上面的語法以返回一個范圍。 歸功於 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

如何選擇范圍並將范圍從工作表上的任何位置擴展到工作表上的任何位置。

這是我的第一篇文章。 我知道我參加聚會有點晚了,很明顯,這里的大多數人都比我更有經驗和技能。 所以我懷疑我的解決方案是否包含他們的許多“大局”細微考慮,但我已經證實它們對我有用,我希望它們也對你們所有人有用。

好的,那么回到問題。 這是我如何做到的。

  • 示例一
    要針對您的問題提出的確切場景執行此操作,如果您從 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM