2017-05-02 13 views
-1

これでエラー9の下付き文字が範囲外になりました。 iとiiの両方が3の場合は値を表示します。これはデータをどの行から開始するかです。私が理解することができる最高は私Excel - シート間のデータの比較と移動

すぎ

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 次のコードを調整した後

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 

を報告UPTと同じです前のレポートからデータを読み取ることができ、そのことです現在はデータを移動していますが、行を2倍にしています。

ので、2行は行ごとに追加される1

現在追加されているべきであるHERESにいただきましたこと、最初の2行は、この作業を行いどのようにマクロを実行する前に所定の位置に

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 
+0

エラーはどの回線で発生しますか?私はそれが最初のループの内側にあると賭けるつもりです...あなたは常に*すべての範囲をワークシートで修飾する必要があります。範囲(ワークシート(UPT Prev))、セル(ii、1)、ワークシート( "UPT Prev")、セル(ii、22)).Valueなど – BruceWayne

+0

は最初の繰り返しで添字を範囲外にします。 – Humbrol2

+0

私が投稿した答えはまだエラーを投げますか? – BruceWayne

答えて

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にタイプミスがありました。

また、コマンドを2行に分割する場合は、最初のIf文のように_と「接続」してから接続する必要があります。 を使用し、2つの範囲の値を(たとえば特殊な値をコピー/貼り付けするのではなく)同じに設定する場合は、これはちょっと整理できますが、読者の練習として残しておきます。

+0

は命名法のマイナーなタイプミスですが、行ごとに対処するのではなく、各マッチングの行が10行になります – Humbrol2

+0

@ Humbrol2 - マクロをステップ実行します。あなたが言及した部分は最初の 'If'文ですか?列1-22をどこにコピーしますか?あなたはそれがあなたに10行マッチングを与えることを意味しますか?おそらく、あなたのデータがどのように見えるのか、あなたがアウトプットとして望むもの(OPに編集されたもの)を示すのに役立つでしょうか? – BruceWayne

+0

私はループを壊す必要があると思う場合は、一致が見つかった場合は、次の私とそれが実行されるたびに、それはまだ最後の各行に追加したい場合は、 – Humbrol2

関連する問題