我有一个拒绝工作的简单宏。它到达切割部分并用行进的蚂蚁包围信息;然后......没什么。
我想要完成的是在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
非常感谢任何帮助!
答案 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