Excel VBAでDo Until Loopのネスト、IF文を使って一致するものと一致しない物としたい
sheet1!a2:c5、sheet2!a2:c6を比較して、比較sheet!d2:f8に、一致するする物は
d2:f4、一致しないものはd6:f7と、Do Until loopのネスト、IF文を使って実現したいのですが、
何回やっても、ループが回らず、上手く行きません。大変、お手数ですが、どなたか、ご存じの方、
教えて頂けないでしょうか?office2010のバージョンです。
vba
1Sub test() 2 Dim i As Long, j As Long 3 With Sheets("sheet1").Range("a1").CurrentRegion.Offset(1, 0) 4 .Resize(.Rows.Count - 1).Copy Sheets("比較").Range("a2") 5 End With 6 7 Dim Flag As Long 8 Flag = 0 9 10 i = 2 11 Do Until i > Sheets("sheet2").Cells(Rows.Count, "a").End(xlUp).Row 12 13 j = 2 14 Do Until j > Sheets("比較").Cells(Rows.Count, "a").End(xlUp).Row 15 16 17 Flag = 0 18 If Sheets("比較").Cells(j, "a") = Sheets("sheet2").Cells(i, "a") Then 19 Sheets("比較").Cells(j, "d") = Sheets("sheet2").Cells(i, "a") 20 Sheets("比較").Cells(j, "e") = Sheets("sheet2").Cells(i, "b") 21 Sheets("比較").Cells(j, "f") = Sheets("sheet2").Cells(i, "c") 22 23 Flag = 1 24 25 Exit Do 26 27 28 End If 29 If Flag = 0 Then 30 31 With Sheets("比較").Range("a1").CurrentRegion 32 .Cells(.Rows.Count + 1, 4) = Sheets("sheet2").Cells(i, "a") 33 .Cells(.Rows.Count + 1, 5) = Sheets("sheet2").Cells(i, "b") 34 .Cells(.Rows.Count + 1, 6) = Sheets("sheet2").Cells(i, "c") 35 End With 36 j = j + 1 37 End If 38 Loop 39 i = i + 1 40 Loop 41End Sub 42 43 44 45 46 47 48 49 50ここに質問の内容を詳しく書いてください。 51 52### 発生している問題・エラーメッセージ 53
エラーメッセージ
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
office2010
ここにより詳細な情報を記載してください。
コードが見にくいのでインデントが分かるように修正お願いします。(どのように投稿されるかはプレビューで確認ください)
> 何回やっても、ループが回らず
ループに入らないという意味でしょうか? ループ内の処理が一度しか実行されないという意味でしょうか?
ループが回り続ける
赤枠のようにループが回り続ける。インデントの修正をして、更新しようとしたのですが、更新をクリックしても、何回も更新をクリックしても、更新のクリックが出来ません。すみません。
やって、分からないのに、何が丸投げですか?
ちょっと、失礼では、有りませんか?
このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
> ループが回り続ける。
ということは「ループが回らず」ではなく、”無限ループ”の可能性がありますね。
コードが読みずらいのでよく分かりませんが、ループ中の i と j の値をデバックで確認されると無限ループの原因が分かるかもしれません。(ループを抜けられないのはループを抜ける条件が成立しないからです)
> 何が丸投げですか?
調べたことや試したこと(デバックの結果等)が何も書かれていないからかもしれません。実際には色々調査されているかもしれませんが、第三者にはこの質問文に書かれていることしか知りえませんので。
y_waiwaiさん、megさん、すみません。頭に来ていて、やる気が起きません。コードは、コピペして、お手数ですが、インデント、そちらで、かけて下さい。
ここは初心者の方が質問すると、非常に辛辣な、手厳しい意見が多いと感じます。お互いに切磋琢磨しようという、目的が素晴らしいサイトであるだけに勿体ない。優秀なプログラマは相手に目線合わせをします。相手の説明に不足があれば、何を質問をしたいのかも含めて読み取ろうとします。もちろん、学校の課題等の答えだけを得たいというのは全く感心しませんが、それは相手にしなければよいだけです。相手を突き放すだけの回答者は、結局、相手に目線を合わせられない、能力が低い技術者なのだと思います。気を取り直して頑張ってください。
ak,nさん、コメント、ありがとうございます。怒りが収まりました。いい対処法も記述して、下さり、助かりました。気分が楽になりました。
ak.nさんへ
> ここは初心者の方が質問すると、非常に辛辣な、手厳しい意見が多いと感じます。
他のサイトに比べてそうなんですね。私は他にはStackoverflowぐらいしか見ないのですが、情報が不足している質問等にはなかなか回答が付きづらい印象です。Stackoverflowの場合は質問を回答者が編集できるため勝手が違うところはありますが。答えだけを求める質問には回答は付きづらいですね。
meg_さんは丁寧に回答しようとされていましたね。
初学者の方は、そもそも何の情報を提供すれば良いかがわからない、というところがあるのだと思います。例えばコードを載せることについても、一部分を切り取って載せようとします。他の部分が影響を与えている可能性に思いが至らないためです。質問者と回答者のギャップが、どうしてもありますね。

回答1件
あなたの回答
tips
プレビュー