• 締切済み

当てはまらない場合は色付けして飛ばす

先日、完全に一致するものを削除する。http://okwave.jp/qa/q6462240.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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

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

sanyp
質問者

補足

そうですよね、ご指摘ありがとうございます。 データは、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