電子書籍の厳選無料作品が豊富!

先日、完全に一致するものを削除する。http://oshiete.goo.ne.jp/qa/6462240.htmlにて教えていただいたことを応用して、別のVBAを作ることにしましたが、今回は必ずしもID(A列)が二つ存在するわけではないため、上下のIDを比較して違った場合は1列色づけし、比較は飛ばして次に進む、というVBAを入れたいのですが、上下同じIDを1列色づけしたり、ひとつしかないIDが続くと止まったりしてしまいます。
間違いもしくは、違う考え方など教えてください。

With Worksheets("差分")
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
For j = 2 To 37
If Cells(i, 1).Value <> Cells(i + 1, 1) Then
.Cells(i, 1).Interior.ColorIndex = 36
End If
If Cells(i * 2, j).Value <> Cells(i * 2 + 1, j) Then
.Cells(i * 2, j).Interior.ColorIndex = 44
.Cells(i * 2 + 1, j).Interior.ColorIndex = 6
.Cells(i * 2, 41).Value = "*"
.Cells(i * 2 + 1, 41).Value = "*"
Else
.Cells(i * 2, 40).Value = "重複"
.Cells(i * 2 + 1, 40).Value = "重複"
End If
Next
Next
End With

A 回答 (1件)

問題のコードの意味の解析はやってないので回答ではないが


(実例データを挙げて、その上でデータがこうだから、こうしたいという例を載せて質問文章も添えて質問すること。何をやっているのか読者に判りにくい。質問者はこのことで頭がいっぱいでもね。他人は初めての問題。)
1つ気のついたことは
Cells()の行を表す引数のほうで、i * 2を書いているが、For i=2 to ・・で
終わり値を適当(と言うかすべて)にして、Step 2 した書き方の方が判りやすい(可読性が増す)と思う。今後の参考に。

この回答への補足

そうですよね、ご指摘ありがとうございます。
データは、2種類あり、前回シートと今回シートで変更された分を抽出するためのVBAを作っています。
両データとも1行目にタイトル、2行目からデータとなり、A列にID番号が記載されています。
比較するため、3枚目のシート「差分」に前回、今回のデータをコピペし、2列ごとに上下を比較して変更があった場合は色づけと、データの後ろに重複か否か(*)を記載するようにします。
基本的にはID番号は、2つずつあるはずなのですが、前回or今回のどちらかにしか存在しないデータがあり、これが不具合の原因のようで、5行ほどIDがひとつしかない状況が続いたところで、デバッグが発生してしまいます。
エラーは7行目 If Cells(i * 2, j).Value <> Cells(i * 2 + 1, j) Then が表示されます。

そこで、とりあえず
 1、ID2行を比べて、違ったら1列色づけして次の行へ。
 2、同じIDだったら、B列以降を比較、変更分を色づけ(マークをつける)
という操作をしたいです。

ご指摘の部分、修正しました。確かに、、と思いましたw

補足日時:2011/02/10 21:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!