Page 598 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼2つの表の比較について ぷるぷる 03/1/22(水) 15:19 ┗Re:2つの表の比較について ぴかる 03/1/22(水) 16:01 ┗Re:2つの表の比較について ぷるぷる 03/1/22(水) 19:47 ┣Re:2つの表の比較について Jaka 03/1/23(木) 9:58 ┃ ┗訂正。 Jaka 03/1/23(木) 10:24 ┗条件付書式はNG! ぴかる 03/1/23(木) 12:39 ┗本当にすみません(T_T) ぷるぷる 03/1/23(木) 14:53 ┗Re:本当にすみません(T_T) Jaka 03/1/23(木) 16:05 ┗感謝します(o^-^o) ぷるぷる 03/1/23(木) 16:37 ┗えっ!さっきので、本当に良いの? Jaka 03/1/23(木) 16:56 ┗またまたありがとうございます。 ぷるぷる 03/1/23(木) 18:57 ─────────────────────────────────────── ■題名 : 2つの表の比較について ■名前 : ぷるぷる ■日付 : 03/1/22(水) 15:19 -------------------------------------------------------------------------
みなさん、こんにちわ(*'-'*) 2つの表の比較について教えてください。 sheet1とsheet2に下のようなデータが入っているとします。 sheet1 番号 枝番 名前 数量 1 01 りんご 1 1 02 みかん 2 2 01 りんご 2 3 01 バナナ 3 sheet2 番号 枝番 名前 数量 1 01 みかん 3 1 02 みかん 2 2 01 りんご 2 2 02 りんご 1 3 01 バナナ 3 この2つのシートを比較して、番号と枝番が一致するもので名前と数量が 変わっているところと、新規に追加された内容のsheet2のセルに網掛けを したいのですがどうしたらよいのでしょうか? あと、sheet1とsheet2は常に名前が変わりますが、sheet1のあとにsheet2 という並びはかわりません。なので、sheet2を選んでマクロを実行すると 自動で前のsheet1と比較させたいのですが・・・ どうか、よろしくお願いします<(_ _)> |
ぷるぷるさん、こんにちは。 状況と合っているがどうか分かりませんが、マクロではなく一般機能の条件付き書式を 使ってみるのはどうでしょうか?。数式をsheet1の内容=sheet2の内容として書式を 設定してやればOKの様な気がします。的外れだったら、ゴメンナサイです。 |
解答ありがとうございます。 条件付書式も考えましたが、Sheet名が2つとも常に変わるので 数式でどのようにしてよいかわかりませんでした。 マクロでも条件付書式でも何でもよいので良い方法が ありましたらよろしくお願いします。 |
こんにちは。 いま一歩、処理内容が解ってませんが...。 Sub popo() Sh2EndRow = Cells(Rows.Count, "A").End(xlUp).Row Sh1EndRow = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To Sh2EndRow Set CCel = Sheets("Sheet1").Range("A1" & ":A" & Sh1EndRow).Find(Range("A" & i).Value, _ After:=Sheets("Sheet1").Range("A1"), LookAt:=xlWhole, MatchCase:=True) If Not CCel Is Nothing Then SaveAd = CCel.Address Do If Cells(i, 2).Value = Sheets("Sheet1").Range(CCel.Address).Offset(, 1).Value Then If Cells(i, 3).Value <> Sheets("Sheet1").Range(CCel.Address).Offset(, 2).Value Or _ Cells(i, 4).Value <> Sheets("Sheet1").Range(CCel.Address).Offset(, 3).Value Then Range("A" & i).Resize(, 4).Interior.Pattern = xlGray16 End If End If Set CCel = Sheets("Sheet1").Range("A1" & ":A" & Sh1EndRow).FindNext(CCel) Loop Until SaveAd = CCel.Address Set CCel = Nothing End If Next Set CCel = Nothing End Sub |
>sheet1とsheet2は常に名前が変わりますが、sheet1のあとにsheet2 >という並びはかわりません。 すみません。見落してました。 Sub popo() Dim ShNo As Long, Sh1Name As String, Sh1EndRow As Long, Sh2EndRow As Long Dim CCel As Variant, SaveAd As String, i As Long ShNo = ActiveSheet.Index If ShNo > 1 Then Sh1Name = Sheets(ShNo - 1).Name Else End End If Sh2EndRow = Cells(Rows.Count, "A").End(xlUp).Row Sh1EndRow = Sheets(Sh1Name).Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To Sh2EndRow Set CCel = Sheets(Sh1Name).Range("A1" & ":A" & Sh1EndRow).Find(Range("A" & i).Value, _ After:=Sheets(Sh1Name).Range("A1"), LookAt:=xlWhole, MatchCase:=True) If Not CCel Is Nothing Then SaveAd = CCel.Address Do If Cells(i, 2).Value = Sheets(Sh1Name).Range(CCel.Address).Offset(, 1).Value Then If Cells(i, 3).Value <> Sheets(Sh1Name).Range(CCel.Address).Offset(, 2).Value Or _ Cells(i, 4).Value <> Sheets(Sh1Name).Range(CCel.Address).Offset(, 3).Value Then Range("A" & i).Resize(, 4).Interior.Pattern = xlGray16 End If End If Set CCel = Sheets(Sh1Name).Range("A1" & ":A" & Sh1EndRow).FindNext(CCel) Loop Until SaveAd = CCel.Address Set CCel = Nothing End If Next End Sub |
ぷるぷるさん、こんにちは。 ゴメンナサイ。条件付書式はNGでした。数式は、同シート内でしか無理の様です。 適当にお答えしたわたしは、ダメですね。以後、気を付けますっ。 |
JAKAさんぴかるさんありがとうございます。 さっそく、試してみました。うまくいきました。 それでJAKAさんのを元にもうちょっと改善しようとしたのですが 初心者の私にはどうしても無理だったので、またまたよろしくお願いします。 JAKAさんのマクロを実行すると、名前と数量が変更の場合、行全体が 網掛けになってしまうので、これを変更のあったセルだけに網掛けしたいのですが・・・ あと、sheet1にはなくてsheet2に新たに加わったデータの行にも網掛けするには どうしたらよいのでしょうか? せっかく教えていただいたのに、欲が出ちゃいました。 本当にすみません。 |
>sheet1にはなくてsheet2に新たに加わったデータの行にも網掛けする これについては、私の書いたコードを基本ベースとするとロジックというかアルゴリズムが今一思いつかないので、多分全くの作りなおしか、ループ処理の付け足しと言う事に成りそうなんで...。 保留。 他のはこんな感じ? Sub popo() Dim ShNo As Long, Sh1name As String, Sh1EndRow As Long, Sh2EndRow As Long Dim CCel As Variant, SaveAd As String, i As Long ShNo = ActiveSheet.Index If ShNo > 1 Then Sh1name = Sheets(ShNo - 1).Name Else End End If Sh2EndRow = Cells(Rows.Count, "A").End(xlUp).Row Sh1EndRow = Sheets(Sh1name).Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To Sh2EndRow Set CCel = Sheets(Sh1name).Range("A1" & ":A" & Sh1EndRow).Find(Range("A" & i).Value, _ After:=Sheets(Sh1name).Range("A1"), LookAt:=xlWhole, MatchCase:=True) If Not CCel Is Nothing Then SaveAd = CCel.Address Do If Cells(i, 2).Value = Sheets(Sh1name).Range(CCel.Address).Offset(, 1).Value Then If Cells(i, 3).Value <> Sheets(Sh1name).Range(CCel.Address).Offset(, 2).Value Then Cells(i, 3).Interior.Pattern = xlGray16 End If If Cells(i, 4).Value <> Sheets(Sh1name).Range(CCel.Address).Offset(, 3).Value Then Cells(i, 4).Interior.Pattern = xlGray16 End If End If Set CCel = Sheets(Sh1name).Range("A1" & ":A" & Sh1EndRow).FindNext(CCel) Loop Until SaveAd = CCel.Address Set CCel = Nothing End If Next Set CCel = Nothing End Sub >欲が出ちゃいました。 欲かきすぎて、止め時を見失い、全部飲まれて泣かない様にしましょう。 と、いつも自分に言い聞かせているんだけど、すぱっと止められないんだよね! |
わがままにつきあっていただき、ありがとうございました。 今まで、印刷してから間違い探し状態だったので、 寝不足のときなどは本当に苦労しましたが これで、憂鬱な作業が楽になりました。 本当に本当にありがとうございました。 |
一応、取り急ぎパターンでIV列を使用して、新規の物の行に2、そうでないものに1と書き込みましたんで、条件書式を使ってパターンを変えて下さい。(急場しのぎのごまかしですが...。) Sub Shirobon() Dim ShNo As Long, Sh1name As String, Sh1EndRow As Long, Sh2EndRow As Long Dim CCel As Variant, SaveAd As String, i As Long ShNo = ActiveSheet.Index If ShNo > 1 Then Sh1name = Sheets(ShNo - 1).Name Else End End If Columns("IV").ClearContents Sh2EndRow = Cells(Rows.Count, "A").End(xlUp).Row Sh1EndRow = Sheets(Sh1name).Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To Sh2EndRow Set CCel = Sheets(Sh1name).Range("A1" & ":A" & Sh1EndRow).Find(Range("A" & i).Value, _ After:=Sheets(Sh1name).Range("A1"), LookAt:=xlWhole, MatchCase:=True) If Not CCel Is Nothing Then SaveAd = CCel.Address Do If Cells(i, 2).Value = Sheets(Sh1name).Range(CCel.Address).Offset(, 1).Value Then If Cells(i, 3).Value <> Sheets(Sh1name).Range(CCel.Address).Offset(, 2).Value Then Cells(i, 3).Interior.Pattern = xlGray16 End If If Cells(i, 4).Value <> Sheets(Sh1name).Range(CCel.Address).Offset(, 3).Value Then Cells(i, 4).Interior.Pattern = xlGray16 End If Range("IV" & i).Value = 1 ElseIf Range("IV" & i).Value <> 1 Then Range("IV" & i).Value = 2 End If Set CCel = Sheets(Sh1name).Range("A1" & ":A" & Sh1EndRow).FindNext(CCel) Loop Until SaveAd = CCel.Address Set CCel = Nothing ElseIf Range("IV" & i).Value <> 1 Then Range("IV" & i).Value = 2 End If Next Set CCel = Nothing End Sub |
またまたありがとうございます。 もう、なんてお礼を言っていいやら。 ヒントだけでは、そこから前に進めない私にとっては 丁寧に教えていただき本当に感謝しています。 |