Excel - 比较和移动工作表之间的数据

时间:2017-05-02 00:54:45

标签: excel

我得到错误9下标超出范围。如果i和ii都显示3,那么打印该值,这是数据应该从哪一行开始。我能想到的最好的是它无法从prev报告中读取数据,这与upt报告相同

  For i = 3 To lastRowReport
   For ii = 3 To lastRowPrev
      If Worksheets("UPT Report").Cells(i, 1).Value = Worksheets("UPT Prev").Cells(ii, 1) 
       Then 
         Worksheets("UPT Prev").Range(Cells(ii, 1), Cells(ii, 22)).Value = 
         Worksheets("UPT Report").Range(Cells(i, 1), Cells(i, 22)).Value
       Else
        Worksheets("UPT Report").Range(Cells(i, 1), Cells(i, 22)).Copy
        Worksheets("UPT Prev").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PastSpecial xlPasteValues
      End If
   Next ii
Next i
调整代码后

 lastblankrow = lastRowPrev + 1
 For i = 3 To lastRowReport
   For ii = 3 To lastRowPrev
      If Worksheets("UPT Report").Cells(i, 1).Value = Worksheets("UPT Prev").Cells(ii, 1).Value Then
     Worksheets("UPT Prev").Range(Worksheets("UPT Prev").Cells(ii, 1), Worksheets("UPT Prev").Cells(ii, 22)).Value = _
     Worksheets("UPT Report").Range(Worksheets("UPT Report").Cells(i, 1), Worksheets("UPT Report").Cells(i, 22)).Value
     Else
      Worksheets("UPT Prev").Range(Worksheets("UPT Prev").Cells(lastblankrow, 1), Worksheets("UPT Prev").Cells(lastblankrow, 22)).Value = _
      Worksheets("UPT Report").Range(Worksheets("UPT Report").Cells(i, 1), Worksheets("UPT Report").Cells(i, 22)).Value
      lastblankrow = lastblankrow + 1
  End If

下一步ii 接下来我

它现在正在移动数据,但将线路加倍。

因此每行应添加2行,应为1

当前添加的是什么,在宏运行之前前两行已经到位

1   Test    Test Mgr    -12 Test 1
2   Test    Test Mgr    -13 Test 1
1   Test    Test Mgr    -12 Test 1
2   Test    Test Mgr    -13 Test 1
3   Test    Test Mgr    -12 #N/A
3   Test    Test Mgr    -12 #N/A
4   Test    Test Mgr    -12 #N/A
4   Test    Test Mgr    -12 #N/A
5   Test    Test Mgr    -12 #N/A
5   Test    Test Mgr    -12 #N/A
6   Test    Test Mgr    -12 #N/A
6   Test    Test Mgr    -12 #N/A
7   Test    Test Mgr    -12 #N/A
7   Test    Test Mgr    -12 #N/A
8   Test    Test Mgr    -12 #N/A
8   Test    Test Mgr    -12 #N/A
9   Test    Test Mgr    -12 #N/A
9   Test    Test Mgr    -12 #N/A
10  Test    Test Mgr    -12 #N/A
10  Test    Test Mgr    -12 #N/A
12  Phil    Zkim    12  #N/A
12  Phil    Zkim    12  #N/A

1 个答案:

答案 0 :(得分:0)

这是如何运作的?

Sub t()
  For i = 3 To lastRowReport
   For ii = 3 To lastRowPrev
      If Worksheets("UPT Report").Cells(i, 1).Value = Worksheets("UPT Prev").Cells(ii, 1) Then
         Worksheets("UPT Prev").Range(Worksheets("UPT Prev").Cells(ii, 1), Worksheets("UPT Prev").Cells(ii, 22)).Value = _
         Worksheets("UPT Report").Range(Worksheets("UPT Report").Cells(i, 1), Worksheets("UPT Report").Cells(i, 22)).Value
       Else
        Worksheets("UPT Report").Range(Worksheets("UPT Report").Cells(i, 1), Worksheets("UPT Report").Cells(i, 22)).Copy
        Worksheets("UPT Prev").Cells(Worksheets("UPT Prev").Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
      End If
   Next ii
Next i
End Sub

基本上,我只是使用工作表(我假设)对所有Cells()Rows.Count进行了限定,应该从中调用它。你在PastSpecial中也有一个拼写错误。

此外,在将命令分成两行时,您需要像我在第一个_语句中那样“连接”然后使用If

如果您想使用With Worksheets("UPT Report")并将两个范围的值设置为相等(而不是复制/粘贴特殊值),这可以稍微整理一下,但我会将其作为练习读者。