Excel宏:工作簿之间的条件剪切和粘贴

时间:2011-08-29 15:05:22

标签: excel paste worksheet

所以我想要一个在Excel文件(“input.xls”)中运行的宏,它在另一个Excel文件(“data.xls”)中搜索值为“1”的列(该列中的唯一值是1s和0s)。当它找到“1”时,它应该将该文件中的整行复制并粘贴到“input.xls”中。

这是我的代码

Sub NonErrorDataParse()
    Dim intEnd As Integer

    Workbooks("data.xls").Sheets("Raw").Activate

    intEnd = 65000

    Range("F").Select

    Do Until ActiveCell.Row = intEnd

        If Int(ActiveCell.Value) = 1 Then
            Range(ActiveCell.Row & ":" & ActiveCell.Row).Cut
            intEnd = intEnd - 1
            Workbooks("input.xls").Sheets("Non-errors").Activate
            Range("A1").Select
            ActiveSheet.Paste
        Else
            ActiveCell.Offset(1, 0).Select
        End If

    Loop

End Sub

然而,当我运行它时,它在“data.xls”上给出了“下标超出范围”错误。无论我如何摆弄代码,我似乎无法通过该错误(即使我有其他宏访问该表工作正常)。

关于如何修复它的任何想法?或者更好的代码可以做同样的事情吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

每次执行命令时,您都不必SelectActivate 您还可以找到最后一个使用Range("A65536").End(xlup)的单元格,而不是解析每个单元格(这可能会导致您的错误)。

然后代码如下:

Sub NonErrorDataParse()
    Dim intEnd As Integer
    Dim c As Range

    intEnd = Workbooks("data.xls").Sheets("Raw").Range("A65536").End(xlUp).Row

    For Each c In Workbooks("data.xls").Sheets("Raw").Range("F1:F" & intEnd)
       If CStr(c.Value) = "1" Then
           c.EntireRow.Cut
           Workbooks("input.xls").Sheets("Non-errors").Rows("1:1").Insert Shift:=xlDown
       End If
    Next c
End Sub

然而,如果你有很多行,使用autofilter方法或使用字典会更快。