• 締切済み

VBAにてファイル内容比較

VBAにて2つのファイルの内容を比較し、同じかどうかを判断して、同じファイル内容であれば一方を削除するフリーソフトはないでしょうか? また、そのようなことを解説しているサイトがあれば紹介下さい。

  • mk1234
  • お礼率94% (1832/1940)

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>B)バイナリデータのようなものか、どうですか。 (B)を考えています。 これで私の手におえませんが(お邪魔しました)、エクセルは表計算ソフトで文字数字情報を扱うソフトであるはず。今でこそセルに画像を貼りつけられるかどうかなど言ってますが。 今後質問される方のために、具体的にどのようなファイルを比較したいのか、例示でもされたらどうでしょう。 まさか画像を比較するとも考えにくい? その際に、「何を以って、2つのファイルの2つのレコードを、比較すべきものとして捉えるか」 の部分に答えて下さい。

mk1234
質問者

お礼

>まさか画像を比較するとも考えにくい? 比較するファイルは画像でも良いし、エクセルでもテキストファイルでも良いです。 >、「何を以って、2つのファイルの2つのレコードを、比較すべきものとして捉えるか」 #1さんの参考サイトにあるようなソフトがエクセルで作れないかということです。 PS 知りたいことは最初の質問の通りです。 それ以上のことを逆に聞かれても答えようが有りません。m(__)m

mk1234
質問者

補足

他サイトで教えていた回答を書いておきます。 '=============================================================== Sub main()   Dim flnm   If get_two_flnm(flnm) = True Then '二つの比較するファイル名を得る     ans = file_comp(flnm)     'ファイルの中身の比較     If ans = 0 Then      判定 = "一致しました"     ElseIf ans = 1 Then      判定 = "一致しませんでした"     Else      判定 = "エラー発生のため判定できませんでした"      End If     MsgBox flnm(1) & " と" & vbLf & vbLf & flnm(2) & " は、" & vbLf & vbLf & 判定     End If End Sub '=============================================================== Function get_two_flnm(flnm) As Boolean 'Output : flnm(1)とflnm(2)   Dim file_array(1 To 2)   Dim ans   get_two_flnm = True   MsgBox "ファイルを選択して下さい"   For idx = 1 To 2     ans = Application.GetOpenFilename()     If ans <> False Then      file_array(idx) = ans      If idx = 1 Then MsgBox "比較するファイル指定して下さい"     Else      get_two_flnm = False      Exit For      End If     Next idx   If get_two_flnm = True Then     flnm = file_array()     End If End Function '=============================================================== Function file_comp(flnm) As Long 'input :flnm(1) flnm(2)   Dim buf As String   Dim bt1() As Byte   Dim bt2() As Byte   Dim flio1 As binio   Dim flio2 As binio   Dim flsz1 As Long   Dim flsz2 As Long   Dim f_offset1 As Long   Dim f_offset2 As Long   file_comp = 0   Set flio1 = New binio   Set flio2 = New binio   If flio1.open_fl(flnm(1), 1024, flsz1) = 0 And _        flio2.open_fl(flnm(2), 1024, flsz2) = 0 Then     If flsz1 = flsz2 Then      Do While flio1.get_fl(bt1(), f_offset1) = 0 And _          flio2.get_fl(bt2(), f_offset2) = 0        For idx = LBound(bt1()) To UBound(bt1())         If bt1(idx) <> bt2(idx) Then           file_comp = 1           End If         Next idx        Loop     Else      file_comp = 1      End If   Else     file_comp = 2     End If   flio1.cls_fl   flio2.cls_fl   Set flio1 = Nothing   Set flio2 = Nothing End Function それからクラスモジュール(クラス名はbinioにしました)に、 '=============================================================== Private flno As Long Private restsz As Long Private buffer As Long '=============================================================== Function open_fl(flnm, buffzs As Long, flsize As Long) As Long   On Error Resume Next   flno = FreeFile()   Open flnm For Binary As #flno   open_fl = Err.Number   If open_fl = 0 Then     restsz = LOF(flno)     buffer = buffzs     flsize = restsz     End If   On Error GoTo 0 End Function '=============================================================== Sub cls_fl()   On Error Resume Next   Close #flno   On Error GoTo 0 End Sub '=============================================================== Function get_fl(bt() As Byte, g_idx As Long) As Long '               ↑は、ここでは使ってないけどあると便利そうだから   On Error Resume Next   Dim readbyte As Long   If restsz <= 0 Then     get_fl = 1   Else     If restsz >= buffer Then      readbyte = buffer - 1     Else      readbyte = restsz - 1      End If     g_idx = Loc(flno)     ReDim bt(readbyte)     Get #flno, , bt()     get_fl = Err.Number     If get_fl = 0 Then      restsz = restsz - readbyte - 1      End If     End If   On Error GoTo 0 End Function

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

そのファイルは (A)事務や経理などのレコードキーつきか(B)バイナリデータのようなものか、どうですか。 即ち何を以って2つのファイルの2つのレコードを比較すべきものとして捉えるかです。 キーをマッチングさせるとか、出現順序がペアを決めるとかあり得ます。 (A)のタイプなら、情報処理受験の教科書に載っている マッチングのロジックの処理でやればよい。 2つのファイルを同じキーでソートして、比較ルーチンに入ります。 ただmdbファイルはよいが、エクセルファイルは直接読めないですが。 コンピュタ初期の昔は、こればかりやってました。 ファイルが読めれば、コーディングは10数行で出来ますよ。 ---- ソフトを探しているのにVBAと言う言語を指定するのは おかしいのでは。コーディングを参考にしたいと言うことですか。 自分で組むならそのように、質問すべきでは。 VBAと言うからにはアクセス?エクセル?

mk1234
質問者

お礼

アドバイスありがとうございます。 >そのファイルは >(A)事務や経理などのレコードキーつきか(B)バイナリデータのようなものか、どうですか。 (B)を考えています。 >ソフトを探しているのにVBAと言う言語を指定するのは >おかしいのでは。 VBAでどこまでやれるのかが知りたかったのです。 >コーディングを参考にしたいと言うことですか。 ソースが見れればそういうこともあるかもしれません。 >自分で組むならそのように、質問すべきでは。 組むと限定してはいません。 >VBAと言うからにはアクセス?エクセル? エクセルです。

  • diashun
  • ベストアンサー率38% (94/244)
回答No.1

下記がご参考になるかも。ただしVBAではありません。 http://www.forest.impress.co.jp/library/undup.html

参考URL:
http://www.forest.impress.co.jp/library/undup.html
mk1234
質問者

お礼

回答ありがとう御座います。 出来ればVBAでそのようなことが出来るか知りたいので、VBAの紹介をお願いいたします。

関連するQ&A

  • VBAを使って、2つのファイルを比較したい

    OS Windows98 Excel2000 下記のとおり、2つのファイルがあるとします。 aaa.xls(比較元) bbb.xls(比較先) 内容はほとんど同じなのですが、 行や列が追加、或いは削除されている場合もあります。 1)追加されている場合 bbb.xlsよりaaa.xlsへコピペをする。 2)削除されている場合 aaa.xlsからセルの値を削除し、 それ以下の値を上へ詰める。 ここで問題なのは、 1)ページ毎に行数が決まっていない。 2)アイテム毎に1行ずつ空白の行がある。 3)追加或いは削除の場合のコピペを行う場合、   ページブレイクをどう扱うか。 4)連番等といったLOOP等を使ってできる基本になる   値が全くない。(わざわざ手動で追加してもよいが、   全部で20ファイル(比較元)、各ファイルには300以   上の行がある。) 5)セルによって、2つ以上のセル(上下どうし、或いは   隣どうし)が結合している場合もある。 以前、Excel98でVBAを使ってプログラムを書いたことはあ るのですが、Excel2000は初めての初心者同様のものです。 プログラムの内容を書いてもらえれば1番うれしいのです が、多分これだけの説明ではそういう訳にはいかないと思 います。 ですから、何らかのきっかけとなるアドバイスでも頂けれ ばと思ってここへ質問にきました。 よろしくお願いします。

  • 2つのTXTファイルの内容を比較してくれるソフト無いでしょうか?

    プログラムの更新(変更)箇所を探すのに便利なツールを探しています。 2つのTXTファイルの内容を比較して、どこが違うとか教えてくれる ソフト無いでしょうか?出来ればフリーで。

  • 2つファイル内容を比較して同じ文字列だけを表示できるソフトがあれば紹介して下さい。

    2つのファイル内容を比較して同じ文字列だけを表示できるソフトがあれば紹介して下さい。

  • ファイル比較のフリーソフトを紹介して下さい。

    ファイル比較のフリーソフトを紹介して下さい。 OS:Win XP Pro よろしくお願いします。

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

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

  • 2つのサイトに載っている商品の比較をするリスト作成

    2つのサイトに載っている商品のがどのくらい同じか比較をするリスト作成したいのです。  エクセルに打ち込んでいくような原始的な方法では何百と商品がなったときに 探すのが大変なので何かいい方法はないかと思っているのですが?  一方のサイトにある商品は打込みますが、もう一方のサイトにある商品が 一目であるかないか判る、あるいは検索できる方法ってないでしょうか?  以外に簡単なことが判りません、、、>< オフィスソフトにありそうですが、できればフリーソフトで 使いやすいものがあればお願いします。  ファイルソフトのことかなと思うのですが、ファイルソフトとは そもそも何と検索したらIT用語でさらっと書いてあるので 判ったような判らないような、、、><

  • 2つのファイルの内容をを後ろから比較

    2つのファイルを比較する際、DOSコマンドで「FC」や「COMP」をつかって 比較することが出来ますが、これだとファイルの頭からしか比較することが できなくて困っています。 DOSや他のソフトでもよいのですが2つのファイルの一番最後の行から 順に上に上がって比較することはできないでしょうか?

  • フリーのソフトでハードディスクのファイルを比較

    いつもお世話になっております、 「フリーのソフトでハードディスクのファイルを比較してくれる物」(もちろんMacで)を探しております。 比較後、ファイル名および日時が同じ物があれば削除したいと考えております。 そこまで自動でやってくれる物があれば御の字ですが、比較後レポートを出してくれれば後は手動でも結構です。 どなたかご存知の方がいらっしゃいましたら宜しくお願いいたします。

    • ベストアンサー
    • Mac
  • フォルダの内容比較(Windows、アンドロイド)

    フォルダ同士の内容の比較を行いたいのですが、WinMergeを使ってみたものの、私には大変分かりづらくて挫折しました。 もう少しシンプルにフォルダ同士の内容の比較のできるフリーソフトを教えて下さい。 Windows10で動かします。よろしくお願いします。

  • ファイル内容を比較

    仕事で、MacintoshとWindowsを併用して使っています。 Windows用の秀丸エディタで「他の秀丸と内容比較」という機能がありますが、これと同じことをMacintoshでやりたいです。 機能:2つのテキストの内容を比較し、不一致の箇所を提示する。 履歴管理などで使用します。 使ってるエディタはmiとJedit4ですが、どうやらそんな機能は無いみたいで・・・。 他のソフトやツールでも構いませんが、出来れば無償で使用できるもので、何かいいものがあれば教えてください。

    • 締切済み
    • Mac

専門家に質問してみよう