• ベストアンサー

Excelファイルを比較し、差分箇所に色をつけるには?

fumufumu_2006の回答

  • ベストアンサー
回答No.2

こんなのではどうでしょうか? 両フォルダには同じ名前のExcelファイル(各シート数も同じ)があるとして、片方からだけ見てます。 同名のブックを開けないので作業フォルダに別名でコピーして作業をして戻してます。(これが結構長くしてる) Const workFolder ="???"を適当に設定してください。 シートのチェックはUsedRange内のチェックをしてます。 さすがにこれは片方からだけとはいかないので両方からチェックしてます。 当然ダブってチェックする部分がほとんどですが・・・処理が長くなりそうなのでダブり部分のチェックはしません。 かわりに作業の進行状況をステータスバーに表示しますので、シートにボタンを作って、ボタンのクリックからsampleを呼んでみてください。 Option Explicit Const workFolder = "c:\temp" '適当な作業フォルダを設定してください。 Sub sample() Dim srcFolder As String Dim dstFolder As String srcFolder = "c:\test\a" 'フォルダA dstFolder = "c:\test\b" 'フォルダB Dim fso As New FileSystemObject Dim srcFile As String Dim dstFile As String Dim srcWorkFile As String Dim dstWorkFile As String Dim f As File Dim n As Integer '進行状況表示用 Dim i As Integer '進行状況表示用 '表示設定 Application.DisplayStatusBar = True 'ステータスバー表示 Application.ScreenUpdating = False '画面更新禁止 '作業ファイル名 srcWorkFile = workFolder & "\src.xls" dstWorkFile = workFolder & "\dst.xls" n = fso.GetFolder(srcFolder).Files.Count For Each f In fso.GetFolder(srcFolder).Files i = i + 1 If f Like "*.xls" Then 'srcFolderのファイルと同じ名前のファイルがdstFolderにもあるとする srcFile = srcFolder & "\" & f.Name dstFile = dstFolder & "\" & f.Name 'ステータスバー表示 Application.StatusBar = srcFile & " と " & dstFile & " を、チェック中 (" & i & "/" & n & ")" '作業フォルダにファイルをコピー fso.CopyFile srcFile, srcWorkFile, True fso.CopyFile dstFile, dstWorkFile, True 'ブックチェック checkBook srcWorkFile, dstWorkFile '作業フォルダのファイルを戻す fso.CopyFile srcWorkFile, srcFile, True fso.CopyFile dstWorkFile, dstFile, True End If Next '作業ファイルを削除 fso.DeleteFile srcWorkFile fso.DeleteFile dstWorkFile '後始末 Set fso = Nothing Application.ScreenUpdating = True Application.StatusBar = False End Sub 'ブック(ファイル)のチェック Sub checkBook(srcFile As String, dstFile As String) Dim srcBook As Workbook Dim dstBook As Workbook Dim ws As Worksheet Set srcBook = Workbooks.Open(srcFile) Set dstBook = Workbooks.Open(dstFile) 'srcBookのシート名と同じシートがdstBookにもあるとしてチェック For Each ws In srcBook.Worksheets checkSheet ws, dstBook.Worksheets(ws.Name) Next srcBook.Close savechanges:=True dstBook.Close savechanges:=True End Sub 'シートのチェック Sub checkSheet(srcSheet As Worksheet, dstSheet As Worksheet) '背景色のクリア srcSheet.Cells.Interior.ColorIndex = xlNone dstSheet.Cells.Interior.ColorIndex = xlNone '両方のUsedRange範囲内で変更点をチェック 'ダブってチェックする部分が多いけれど checkSheetUsedRange srcSheet, dstSheet checkSheetUsedRange dstSheet, srcSheet End Sub 'シートのチェック(srcSheetのUsedRange内) Sub checkSheetUsedRange(srcSheet As Worksheet, dstSheet As Worksheet) Dim r As Range For Each r In srcSheet.UsedRange If r <> dstSheet.Range(r.Address) Then r.Interior.ColorIndex = 3 dstSheet.Range(r.Address).Interior.ColorIndex = 3 End If Next End Sub

animack
質問者

お礼

コメントありがとうございます。 お忙しいところココまで考えて頂きありがとうございます。 ほとんど丸投げ的な感じになってしまい申し訳ないという気持ちです・・・。 ほとんどやりたい事は実現されていますので、これを参考に詰めて生きたいと思います。 本当にありがとうございました。

関連するQ&A

  • ファイルを比較して差分のみを出力するには…?

    とつぜんですみません。緊急なので投稿しました。 VBSを使って、2つのファイル(ファイルAとファイルB)の1行目からファイルの終わりまでを比較して差分を出力するプログラムを作成したいと考えています。 ファイルの1列目は主キーとなっております。 <ファイルA> 100,A 110,B 133,D 155,R … <ファイルB> 100,A 110,B 133,F 155,P … また差分の出力は上の例でいくと、 133,D → F 155,R → P というようなかたちでファイルに出力したいです。 どなたかアドバイス頂けないでしょうか? よろしくお願いします。

  • エクセルで2つのファイルを差分して、追加・削除されたそれぞれのファイルのデータセルを色で塗る。

    エクセルで2つのファイルを差分して、追加・削除されたそれぞれのファイルのデータセルを色で塗る。変更のないものは元ファイルから新ファイルへセル内容をコピーするというVBAは可能でしょうか? 例)元ファイル、新ファイルにおいてA列を差分。 元ファイル 新ファイル   A   B    A   B 1 aa1  bb1   aa1 2 aa2  bb2   aa3 3 aa3  bb3   aaA 4 aa4  bb4   aa4 とあるとします。 追加>新ファイルのA3セルを塗る。 削除>元ファイルのA2セルを塗る。 変更なし>新ファイルのB1、B2、B4へ元ファイルのB1、B3、B4のデータをコピペ。 元ファイル 新ファイル   A   B    A   B 1 aa1  bb1   aa1  bb1 2 aa2  bb2   aa3  bb3 3 aa3  bb3   aaA 4 aa4  bb4   aa4  bb4 このような感じです。 どうぞよろしくお願いします。

  • 差分のLZHファイルの作り方

    win2000のDOSコマンドから実行する方法を模索しています。 指定するディレクトリの中身全部を圧縮するとき、別の場所に作ってある「A.LZH」と比較して差分ファイルだけを「B.LZH」の名前で圧縮するという方法はありませんか? つまり、これから圧縮しようとするファイルに対し「A.LZH」の中に無い物だけを「B.LZH」として圧縮したいのです。 差分のバイナリファイルを作るフリーウェアが存在するようなのですが、どうしても差分のLZHを作りたいので。 通常はLHMeltを使っています。

  • エクセルのファイル内データ比較

    データがエクセルファイルなのでここで質問いたします. エクセルファイルが300個ぐらいあります. この中で基本になるファイルは50個ぐらいあります. その50個のファイルの1つと残り250個ぐらいのファイル内データを比較できる方法はないでしょうか? 当然一気に比較する方法ではなくてもかまいません. 現在1つ1つ開いて見て比較する途方もない作業で死にそうです. ファイル内データはマクロもなければ計算式すらありません. 数字データがA1~A90,B1~B90まで入っています. データ数は全ファイル共通となっています. どなたか良い知恵を授けてください.お願いします.

  • 全シート内の差分比較とそのセル色塗りつぶしマクロ

    Excelファイルデータの差分比較とそのセル塗りつぶしのマクロを作成したいのですが、今の自分には、下記のマクロでとどまっており、 マクロを実行するファイル内シートにデータをコピーしたり、 マクロ内でその都度、シート名の記載の変更、差分比較データ範囲の変更が必要になり、大変不便で困っております。 やりたい事は、マクロでユーザがExcelのファイルを選択出来て、 そのファイルの中の全シートのデータについて、差分比較とそのそのセルの塗りつぶしをして、塗りつぶしをファイルへ反映させて保存させることです。 どうか、お分かりの方がいらっしゃいましたら、ご教示をお願い出来ますと大変助かります。 各シート内のデータは、列、行共にほぼ同じフォーマットで値が入っています。 それらのシート内のデータで修正した箇所を見つける為、差分比較がしたいです。 例えば、シートが3つの場合は、 1つ目のシートは修正前のデータ、 2つ目のシート内は1つ目のシートの値を部分的に修正したものです。 3つ目のシート内のデータも、1つ目のデータの値を更に再修正したものです。 この3つのシート内のデータを差分比較したいです。 シートの数は、選択したファイルによって異なります。 Sub TEST1() Dim s1, s2 As Worksheet 'Worksheetsオブジェクト用 Set s1 = Worksheets("修正前S装置検索システム") '比較元シート名 Set s2 = Worksheets("修正後装置検索システム") '比較先シート名 Dim arr1 As Variant, arr2 As Variant arr1 = s1.Range("$A$2:$W$548").Value arr2 = s2.Range("$A$2:$W$548").Value For i = 1 To UBound(arr1, 1) For j = 1 To UBound(arr1, 2) If arr1(i, j) <> arr2(i, j) Then '塗りつぶし処理 s1.Cells(i + 1, j).Interior.Color = RGB(255, 0, 0) s2.Cells(i + 1, j).Interior.Color = RGB(102, 255, 51) End If Next Next End Sub

  • 2つのエクセルファイルの比較

    仕事で使用している顧客一覧(エクセルファイル)があります。 このファイルは会社のシステムで自動的に生成され、 毎日その日の最新版が日付ごとのフォルダ(今日だったら20080527) に上書きされます。ファイル名は同じです。 そこで昨日のファイルと本日のファイルに変更点が あればどのような形でも良いので分かるようにしたいと思っています。 変更点の色が変わって2つのファイルが比較できるフリーソフトを試してみましたが、 当然なのですが、新規の顧客が従来の顧客の間に入ってしまうと、 順番が変わりそれ以降の顧客のデータ全て変更点とみなされてしまいます。 できれば名前が入っている列、例えばB列をキーとし、 新規の顧客データや、従来の顧客のデータの順番が入れ替わっても 変更点のみ色が変わるようにするにはどのようにすればよいでしょうか。 また、そのような機能を満たしているソフトなどありましたら、 教えていただけると大変助かります。

  • ファイルの比較について

    できたらやってみたいのですが、フリーソフトなどで フォルダとフォルダのファイルを比較するソフトが あります。 それを使えば問題ないのですが、マクロでそういうことって できないのでしょうか。 差分があった場合、差分部分をファイルに差分ファイルを 出力する等 お願いします

  • 同名差分ファイルを他フォルダへ移動するには?

    フォルダAとフォルダBの差分ファイル(名前のみの判定)をフォルダCに移動できるようなPCアプリはありませんか? SABOON!というアプリがイメージと大分近かったのですが、フォルダAとBの同名ファイルはフォルダAから消えてしまうのと、ファイル名だけの突合せが出来ませんでした。 よろしくお願いします。

  • 差分ファイルだけ別フォルダに保存したい

    ファイルのバックアップをWindowsのコマンドを使って行いたいと思っています。元フォルダAとミラー先フォルダBの差分ファイルだけをディレクトリを作りながらフォルダCの下にコピーをしたいのですが、xcopyやrobocopyでこのような処理ができるようにコードを教えてください。 よろしくお願いします。

  • VBAでの差分比較のマクロの組み方について

    VBA初心者です。 シートCの開始ボタンを押下すると、シートAの表とシートBの表のセル内の数式を取得・比較して、シートCの表に差分箇所に色が付く。 ↑のような形で差分比較をするマクロを組みたいのですが、ネットで調べてもうまく作ることができませんでした。 組み方は色々あるかと思いますが、その一例をお教えいただけると幸いです。 よろしくお願いいたします。 (補足) シートAの表とシートBの表の形式は同一で、例えばそれぞれセルの(1,1)〜(150,50)まであるようなイメージです。