根据条件将行复制到两个不同的电子表格

时间:2015-11-05 16:28:02

标签: excel

我有一个列“B”,其中填充了一系列六位数字。我正在寻找我的代码来查找最后一位数字,并根据结果(0到4或5到9)将其复制到一个单独的电子表格中。我有代码获取B列中每行的最后一位数字,但不会将其粘贴到正确的工作表中:

For r = 1 To endRow

 ThisValue = Range("B" & r).Value
 LResult = Right(ThisValue, 1)


If LResult = 0 Or 1 Or 2 Or 3 Or 4 Then

        Rows(r).Select
        Selection.Copy

        Sheets("Sheet2").Select
        Rows(pasteRowIndex).Select
        ActiveSheet.Paste

        pasteRowIndex = pasteRowIndex + 1

        Sheets("Sheet1").Select

        Else

        Rows(r).Select
        Selection.Copy

        Sheets("Sheet3").Select
        Rows(pasteRowIndex).Select
        ActiveSheet.Paste

        pasteRowIndex = pasteRowIndex + 1

        Sheets("Sheet1").Select

    End If
Next r

2 个答案:

答案 0 :(得分:1)

使用多个工作表时,非常重要以确保告诉Excel要使用哪些工作表,并尽可能avoid using .Select

请参阅以下代码。我为您的工作表添加了一些变量。我不肯道哪个工作表包含您的ThisValue,因此您可能需要根据需要修改ws1

Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet

Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
Set ws3 = Sheets("Sheet3")
endrow = ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row
pasteRowIndex = 1
For r = 1 To endrow

    ThisValue = ws1.Range("B" & r).Value
    LResult = Right(ThisValue, 1)

    If LResult = 0 Or LResult = 1 Or LResult = 2 Or LResult = 3 Or LResult = 4 Then
        ws2.Rows(pasteRowIndex).Value = ws1.Rows(r).Value
        pasteRowIndex = pasteRowIndex + 1
    Else
        ws3.Rows(pasteRowIndex).Value = ws1.Rows(r).Value
        pasteRowIndex = pasteRowIndex + 1
    End If
Next r

End Sub

另外,请尝试查看我如何删除.Select并直接使用单元格。

编辑:您在哪里定义pasteRowIndex是什么?它不在你提供的代码中,我假设你在其他地方有它......但你需要它在这里。那是什么?出于测试目的,我在第一次迭代时将其设置为1。之后,它只会在该数字上加一个。

另外,我删除了复制/粘贴,这可能会变得棘手/烦恼多张(在我看来),所以我只是设置两行的值相等于彼此。你能看出我是怎么做到的吗?

最后,当使用andor检查变量的值时,您必须每次都重复逻辑。了解我如何更改您的行以包含每个数值的LResult =?另一种方法是If LResult <= 4 Then ...

答案 1 :(得分:0)

我相信所有条件都需要拼写出来,所以Or 1代替Or LResult = 1而不是Select Case。但是你最好使用Select Case LResult Case 0 To 4 ' ... Code Case Else ' ... Code End Select

$rootScope.$on