• ベストアンサー

エクセル VBA

エクセル VBA初心者です。プログラムの管理をしたいのですが。2つのブック(前月と当月)を比較して削除されたもの、追加されたもの変更されたものを調べたいのですが。Book1のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。同様にBook2のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。この二つのシートを比べてプログラムが増えたもの、減ったもの、変更日が変わったものの3点をBook3のSheetに書き出したいのですが。何卒宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • argument
  • ベストアンサー率63% (21/33)
回答No.2

はじめまして nukumizu さん 1さんの言うとおり最近は自分のサンプルソースも書かないで注文だけするかたが多いですね。 でもまぁ構わないでしょう。回答者が出なくなり、質問が消される程度の問題です。そしてただソースがほしいなら書くだけです。 勿論それを質問者が理解できるか否かはまた別の話ですね。 前月分がbook1で当月がbook2・A列B列に項目はなくA列にプログラム名・B列に日付。はい、わかりました。では下記をbook3の標準モジュールにコピー&ペーストして実行してください。 あぁ勿論「c:\book1.xls・c:\book2.xls」のディレクトリは貴方のブックのある位置にパスを変更してくださいね。 Sub check() Workbooks.Open Filename:="C:\Book1.xls": For i = 1 To Range("A65536").End(xlUp).Row: booka = booka & Range("A" & i).Value & "," & Range("B" & i).Value & vbTab: Next: booka = Split(Left(booka, Len(booka) - 1), vbTab): ActiveWindow.Close Workbooks.Open Filename:="C:\Book2.xls" For i = 1 To Range("A65536").End(xlUp).Row For j = 0 To UBound(booka) If Range("A" & i).Value & "" = Mid(booka(j), 1, InStrRev(booka(j), ",") - 1) Then If Range("B" & i).Value & "" = Mid(booka(j), InStrRev(booka(j), ",") + 1) Then Exit For Else: bookmerge = bookmerge & Range("A" & i).Value & ",変更" & vbTab: Exit For If j = UBound(booka) Then bookmerge = bookmerge & Range("A" & i).Value & ",追加" & vbTab Next Next For j = 0 To UBound(booka) For i = 1 To Range("A65536").End(xlUp).Row If Range("A" & i).Value = Mid(booka(j), 1, InStrRev(booka(j), ",") - 1) Then Exit For Else If i = Range("A65536").End(xlUp).Row Then bookmerge = bookmerge & Mid(booka(j), 1, InStrRev(booka(j), ",")) & "削除" & vbTab Next Next ActiveWindow.Close: bookmerge = Split(Left(bookmerge, Len(bookmerge) - 1), vbTab): For i = 0 To UBound(bookmerge): Range("A" & i + 1).Value = Split(bookmerge(i), ",")(0): Range("B" & i + 1).Value = Split(bookmerge(i), ",")(1): Next End Sub 実行して見ましたか?貴方の望むとおり通り動作しましたね。 book1にありbook2にないデータはbook3でA列にプログラム名B列に削除 book1になくbook2にあるデータはbook3でA列にプログラム名B列に追加 book1にありbook2にもあり日付が一致しない場合book3でA列にプログラム名B列に変更 と表示されたはずです。 これで問題は解決ですね 処理違い・補足・追加処理等必要でしたらいってください。

nukumizu
質問者

お礼

argumentさんはじめまして。 回答ありがとうございます。 ご指摘どうりソースの一つも書かずに大変失礼いたしました。 実行してみました。思うように動作できました。 大変助かりました。ありがとうございました。

その他の回答 (1)

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

初心者といえども、ある程度はコードを書けますよね。 それを提示してみてください。 まったく解らないのであれば初心者ですらありませんし、この質問も質問ではなく作成依頼ということで、削除対象になってしまいますよ。