在Excel 2016中使用VBA将选定范围移动到一列上

时间:2018-01-17 14:48:37

标签: excel vba excel-vba

我需要能够

  1. 在A列中找到一个值
  2. 选择该值及其上方的所有内容
  3. 抵消一列上的所有值
  4. 以下代码就是这样 - 但是,我正在尝试加快代码执行速度,并且复制和粘贴操作会降低代码执行速度。有没有办法在没有剪切/粘贴的情况下实现这一目标?我想坚持使用VBA(副配方),因为这是更大程序的一部分。

    谢谢!

    Sub FindValueAndAboveThenMoveOver ()
        Dim sht1 as Worksheet
        Set sht1 = Sheets("Convert")
    
        sht1.Columns("A:A").Find("XXXX"), LookIn:=xlValues).Select
        Range(ActiveCell.Offset(0, 0), "A1").Select
        Selection.Cut
        Range("B1").Select
        ActiveSheet.Paste
    End Sub
    

2 个答案:

答案 0 :(得分:2)

剪切和粘贴没有任何问题,但你可以避免它,避免选择会加快速度。此外,您应首先检查您是否找到了可以避免错误的内容。

Sub FindValueAndAboveThenMoveOver()

Dim sht1 As Worksheet, r As Range

Set sht1 = Sheets("Convert")
Set r = sht1.Columns("A:A").Find("XXXX", LookIn:=xlValues)

If Not r Is Nothing Then
    'should add sheet references here too
    With Range("A1").Resize(r.Row)
        Range("B1").Resize(r.Row).Value = .Value
        .ClearContents
    End With
End If

End Sub

答案 1 :(得分:1)

这可能会稍快一些:

Sub FindValueAndAboveThenMoveOver()

    Dim sht1 As Worksheet, r As Range
    Set sht1 = Sheets("Convert")

    With sht1
        Set r = Range(.Range("A1"), .Columns("A:A").Find("XXXX", LookIn:=xlValues))
    End With

    r.Offset(0, 1).Value = r.Value
    r.Clear
End Sub