dポイントプレゼントキャンペーン実施中!

sheet1!a2:c5、sheet2!a2:c6を比較して、比較(シート)!d2:f8に、一致するする物は
d2:f4、一致しないものはd6:f7と、Do Until loopのネスト、IF文を使って実現したいのですが、
何回やっても、ループが回らず、上手く行きません。大変、お手数ですが、どなたか、ご存じの方、
教えて頂けないでしょうか?
コード↓
Option Explicit

Sub test1() '比較sheet
Dim i As Long, j As Long ’比較シートa2:c5に貼り付け
With Sheets("sheet1").Range("a1").CurrentRegion.Offset(1, 0)
.Resize(.Rows.Count - 1).Copy Sheets("比較").Range("a2")
End With

i = 2

Dim Flag As Long
Flag = 0

j = 2
Do Until i > Sheets("sheet2").Cells(Rows.Count, "a").End(xlUp).Row

Do Until j > Sheets("比較").Cells(Rows.Count, "a").End(xlUp).Row

Flag = 0
If Sheets("比較").Cells(j, "a") = Sheets("sheet2").Cells(i, "a") Then
Sheets("比較").Cells(j, "d") = Sheets("sheet2").Cells(i, "a")
Sheets("比較").Cells(j, "e") = Sheets("sheet2").Cells(i, "b")
Sheets("比較").Cells(j, "f") = Sheets("sheet2").Cells(i, "c")

Flag = 1

i = i + 1
Exit Do


j = j + 1

End If

If Flag = 0 Then

With Sheets("比較").Range("a1").CurrentRegion
.Cells(.Rows.Count + 1, 4) = Sheets("sheet2").Cells(i, "a")
.Cells(.Rows.Count + 1, 5) = Sheets("sheet2").Cells(i, "b")
.Cells(.Rows.Count + 1, 6) = Sheets("sheet2").Cells(i, "c")
j = j + 1
End With

End If
Loop
Loop
End Sub

「ExcelVBAでDo Until lo」の質問画像

質問者からの補足コメント

A 回答 (11件中1~10件)

>最後のd10:e10、F 600 60は、なくてもいいんですが、どうやったら、削除できますか?



下記へアップしました。
https://ideone.com/tMEiWM
    • good
    • 0
この回答へのお礼

度々、すみません。ありがとうございます。初心者なので、分かりません。一端、保留にさせて下さい。

お礼日時:2022/12/25 18:24

>ありがとうございます。

出来たらDO until loopのネストで、実現したかったのですが、すみません。

下記にアップしました。
https://ideone.com/vHhYpn

Sheet2のE列
比較のG列を作業用に使っています。
もし、上記の列に値が残るのがいやでしたら、最後にその列をクリアする
処理を追記してください。
追記の方法が判らない場合は、補足してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。すみません。最後のd10:e10、F 600 60は、なくてもいいんですが、どうやったら、削除できますか?すみません。度々。

お礼日時:2022/12/25 17:25

>Do Until loopのネスト、IF文を使って実現したいのですが、



画像が良くわかりませんが(リンク先は運営が違反とするか検討中の場所なので見てません)、上記は必須条件なのでしょうか?
もしそうでないならコードは必要ないのでしょ。(と言っても詳細が不明ですけど)。
仮に課題であると言うのなら問題ですよねぇ。

検討中ではあるが結果は問い合わせた方には個別に知らされないので、結果的に良いのかダメなのかはわからないので。
回答者が記載したのであるなら何も注意はなかったのかもですが、OKWaveと繋がってた時には利用規約でもネット上の質問マナーとしても禁止でした。
近年変更されたのかは不明。
    • good
    • 0

下記へアップしました。


https://ideone.com/fFr83N
不明点は補足してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。出来たらDO until loopのネストで、実現したかったのですが、すみません。

お礼日時:2022/12/25 14:44

画像のアップありがとうございました。


いくつか不明点です。
1.比較シートのD列~F列へ出力する件ですが、
①商品名が一致するものは、Sheet1の商品名、価格、売上を、2行から出力する。
②上記以外の場合、
Sheet1になくSheet2にある商品は、Sheet2の商品名、価格、売上を出力する。
Sheet1にありSheet2にない商品は、Sheet1の商品名、価格、売上を出力する。
出力開始行は、①で出力した商品の最後の行から空行を3行いれた次の行からとする。
上記の仕様で良いでしょうか。

2.Sheet1内で商品の重複はない前提とする。
 (Sheet2も同様)
  この前提で良いでしょうか。
    • good
    • 0
この回答へのお礼

はい。そうです。すみません。sheet1!c1、sheet2!c1は、売上ではなく、個数が正しいです。間違ってすみません。5時間近く、やってると、訳が、分からなくて、ミスにも気付きませんでした。

お礼日時:2022/12/25 13:20

>sheet1!a2:c5、sheet2!a2:c6を比較して



セル数が1行分少ないのですが、仮に異数とした時比較はどういう条件で行なうのでしょう?
例えばSheet1のA列について順次値を取得し、その値がSheet2のA列に存在するか否かとかですかね?
    • good
    • 0
この回答へのお礼

そうですね。そこまで考えていないんです。このサイトが、こうなっているんでですね。写真で、訂正したものだけです。

お礼日時:2022/12/25 13:27

良く理解してないですが。

(ジジィなので・・・)

If Sheets("比較").Cells(j, "a") = Sheets("sheet2").Cells(i, "a") Then
Sheets("比較").Cells(j, "d") = Sheets("sheet2").Cells(i, "a")
Sheets("比較").Cells(j, "e") = Sheets("sheet2").Cells(i, "b")
Sheets("比較").Cells(j, "f") = Sheets("sheet2").Cells(i, "c")

Flag = 1

i = i + 1
Exit Do '← ここで内側のループを抜けると

j = j + 1 '← この加算はされないのですが、そこは狙っての事ですか?

End If
    • good
    • 0
この回答へのお礼

うーん。自分でも、分かりません。他のサイトを、真似て、自分流に、Do Until Loopで、出来ないかとしていて、何十回と、f8で、確認したのですが、ループが、回らず、本当に、本当に、困って、質問しました。なかなか、これっと、言った、解答が来ないので、全然、分かりません。

お礼日時:2022/12/25 11:35

直接の回答ではありません。



PCがネットに繋がっているならPCからログオンし、画像を送信すれば良いのですが繋がってないのでしょうか?
スマホの写真撮影は質問する側は楽なのかわかりませんが、回答する側は見づらいのです。
拡大表示については要望は出しましたけど、かれこれ1年経ちますかね?

知恵袋利用なら拡大機能ありますよ。
要望して3ヶ月程で変更してもらえました(もっと前に要望した回答者がいたのかも?)
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2022/12/25 09:48

>Snipping toolで、pcのデスクトップ上に表示させ、スマホで、撮影しました。



スマホを使ってはいけません。
excelでファイルを開いて、シートの内容を表示します。
表示した状態で、snipping toolを起動し、表示した画面をキャプチャします。キャプチャした内容をファイルに保存します。(拡張が.PNGのファイルが保存されます)
その内容を確認後、gyazo.comへアップします。

キャプチャ方法は「snipping tool 使い方」で検索してみてください。
以下、参考URLです。
https://www.pasoble.jp/windows/10/snipping-tool. …

https://otona-life.com/2022/04/07/112709/
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2022/12/25 09:46

画像が不鮮明なので全くわかりません。


gyazo.comへアップされてはいかがでしょうか。
以下のURLはgyazo.comへアップしたサンプルです。
https://gyazo.com/1add33c908cb4e04259f54dafff27dcf
(画像の内容は本件とは関係ありません)

windows アクセサリにSnipping toolがあります。
Snipping toolを使用すると簡単に画面のキャプチャが行えます。
(上記URLの画像もSnipping toolで作成したものです)
画面のキャプチャを行う際はSnipping toolを使うことを推奨いたします。

尚、セルの正確な位置を知ることが必須になりますので、キャプチャする際は、
行、列のガイドを必ず含めてキャプチャしてください。
(赤線で囲んだ部分です)
    • good
    • 0
この回答へのお礼

Snipping toolで、pcのデスクトップ上に表示させ、スマホで、撮影しました。このサイトで画像が粗くて、いつも困っていて、gyazo.comにアップして、本当に上手く行くのでしょうか?やった事ないので、やり方分かりません。

お礼日時:2022/12/25 08:40

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