简单的剪切和粘贴将无法正常工作

时间:2018-05-16 15:07:58

标签: excel-vba vba excel

我有一个拒绝工作的简单宏。它到达切割部分并用行进的蚂蚁包围信息;然后......没什么。

我想要完成的是在D列中找到一个值(1050)。每当我找到它时,我想将整行数据移动到工作表的底部。

工作表包含数千行信息,每月的行数也会发生变化。列是常量。

这就是我所拥有的:

Sub MurrayTest()
    'Dim xRg As Range
    'Dim xTxt As String
    'Dim xCell As Range
    'Dim xEndRow As Long
    'Dim I As Long

    On Error Resume Next

    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If

    Set xRg = Range("d:d")
    xEndRow = xRg.Rows.Count + xRg.Row

    Application.ScreenUpdating = False

    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "1050" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next

    Application.ScreenUpdating = True
End Sub

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您的问题是您尝试将行插入到工作表+1的最后一行。这超出范围。

而不是:

Set xRg = Range("d:d")
xEndRow = xRg.Rows.Count + xRg.Row

这样做:

Set xRg = Range("d:d")
xEndRow = Range("d1").End(xlDown).Row + 1

通过这种方式,您只需查看填充的细胞而不是所有可能的细胞。

注意 我更喜欢使用xEndRow = Cells(Rows.Count, 1).End(xlUp).Row之类的东西,因为如果数据集不完整,有时候从顶部找到最后一行有时可能不正确。您可能需要采用不同的方法来确定最适合您情况的方法。

答案 1 :(得分:0)

如果我正确读取了这个,你想在D列上找到值1050,如果找到你想要在列表的末尾剪切和插入这一行。

Sub MurrayTest()
    Dim xRg As Range
    Dim xEndRow As Long
    Dim i As Long

    Set xRg = Range("D:D")
    xEndRow = Cells(Rows.Count, 4).End(Excel.xlUp).Row + xRg.Row

    Application.ScreenUpdating = False
    For i = xEndRow To 1 Step -1
        If xRg.Cells(i) = "1050" Then
           xRg.Cells(i).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
End Sub