有没有办法删除在VBA中选择的当前范围?

时间:2020-01-14 18:33:56

标签: excel vba

我正在尝试选择特定范围的数据,并仅删除我标识的单元格,而不是整个行。

我已经包含了当前的编码。我正在尝试选择指示单元格左侧的所有内容,删除范围,然后将所有单元格向上移动。我无法输入特定范围(例如Range(“ B3:B7”)。delete等),因为该范围将在整个代码中不断变化。我需要它是一个动态范围,它将随着代码的运行而变化。

  Worksheets("Sheet1").Select
    Cells(2, 6).Select

    ActiveCell.Offset(0, 1).Select
    col = ActiveCell.Column
    row = ActiveCell.Row

    Cells(row, col).Select
    Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
    Range.Delete Shift:=xlToUp

让我知道是否需要更多信息。代码将运行直到我碰到最后一行(Range.Delete)。

谢谢。

2 个答案:

答案 0 :(得分:0)

我不能为你写它。但是请考虑使用此技术,因为您似乎是手动执行此操作。 Application.Inputbox是一个内置的用户窗体,它会暂停代码执行,直到您查看范围/自行选择为止。

Dim xrng As Range
Dim rngholder As Range
Dim xArray(0 To 20) As Variant
Dim x As Integer 

Set xrng = Application.Selection
Set xrng = Application.InputBox("Title", "Make a selection", xrng.Address, Type:=8)
    x = 0
'If xrng = "" Then Exit Sub

For Each rngholder In ActiveSheet.Range(xrng.Address)

    If rngholder.Value > "" Then
        xArray(x) = VBA.Trim(rngholder.Value)
    Else
    End If
x = x + 1
Next rngholder

在这种情况下,Inputbox会加载活动单元格或调用宏并将范围填充到数组中时所做的选择。您可以 自定义 的位置在行设置的“ xrng =”行上。我将使用'set xrng =逻辑来获取您已经描述的选择,因此将所有内容都放在左侧,然后向上并删除。

编辑:

Set xrng = Range(ActiveCell, Range(ActiveCell.End(xlToLeft), ActiveCell.End(xlUp))).Select

您可以通过对范围进行更多研究来弄清楚这一点。如果您选择此答案,则将有一个手动处理异常的界面,由于在我看来您似乎有点眼花eye乱,因此在实际使用中可能会从中受益。

答案 1 :(得分:0)

我认为这就是您要寻找的。选择任何单个单元格时,此行代码将选择从A列和活动行到活动行+ 1的范围。

 ThisWorkbook.Sheets("Sheet1").Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column + 1)).Delete