我有一个列“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
答案 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。之后,它只会在该数字上加一个。
另外,我删除了复制/粘贴,这可能会变得棘手/烦恼多张(在我看来),所以我只是设置两行的值相等于彼此。你能看出我是怎么做到的吗?
最后,当使用and
或or
检查变量的值时,您必须每次都重复逻辑。了解我如何更改您的行以包含每个数值的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