- 締切済み
VBAにてファイル内容比較
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17068)
>B)バイナリデータのようなものか、どうですか。 (B)を考えています。 これで私の手におえませんが(お邪魔しました)、エクセルは表計算ソフトで文字数字情報を扱うソフトであるはず。今でこそセルに画像を貼りつけられるかどうかなど言ってますが。 今後質問される方のために、具体的にどのようなファイルを比較したいのか、例示でもされたらどうでしょう。 まさか画像を比較するとも考えにくい? その際に、「何を以って、2つのファイルの2つのレコードを、比較すべきものとして捉えるか」 の部分に答えて下さい。
- imogasi
- ベストアンサー率27% (4737/17068)
そのファイルは (A)事務や経理などのレコードキーつきか(B)バイナリデータのようなものか、どうですか。 即ち何を以って2つのファイルの2つのレコードを比較すべきものとして捉えるかです。 キーをマッチングさせるとか、出現順序がペアを決めるとかあり得ます。 (A)のタイプなら、情報処理受験の教科書に載っている マッチングのロジックの処理でやればよい。 2つのファイルを同じキーでソートして、比較ルーチンに入ります。 ただmdbファイルはよいが、エクセルファイルは直接読めないですが。 コンピュタ初期の昔は、こればかりやってました。 ファイルが読めれば、コーディングは10数行で出来ますよ。 ---- ソフトを探しているのにVBAと言う言語を指定するのは おかしいのでは。コーディングを参考にしたいと言うことですか。 自分で組むならそのように、質問すべきでは。 VBAと言うからにはアクセス?エクセル?
お礼
アドバイスありがとうございます。 >そのファイルは >(A)事務や経理などのレコードキーつきか(B)バイナリデータのようなものか、どうですか。 (B)を考えています。 >ソフトを探しているのにVBAと言う言語を指定するのは >おかしいのでは。 VBAでどこまでやれるのかが知りたかったのです。 >コーディングを参考にしたいと言うことですか。 ソースが見れればそういうこともあるかもしれません。 >自分で組むならそのように、質問すべきでは。 組むと限定してはいません。 >VBAと言うからにはアクセス?エクセル? エクセルです。
- diashun
- ベストアンサー率38% (94/244)
下記がご参考になるかも。ただしVBAではありません。 http://www.forest.impress.co.jp/library/undup.html
お礼
回答ありがとう御座います。 出来れば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つのファイル内容を比較して同じ文字列だけを表示できるソフトがあれば紹介して下さい。
- ベストアンサー
- その他(業務ソフトウェア)
- ファイルの比較について
できたらやってみたいのですが、フリーソフトなどで フォルダとフォルダのファイルを比較するソフトが あります。 それを使えば問題ないのですが、マクロでそういうことって できないのでしょうか。 差分があった場合、差分部分をファイルに差分ファイルを 出力する等 お願いします
- ベストアンサー
- オフィス系ソフト
- 2つのサイトに載っている商品の比較をするリスト作成
2つのサイトに載っている商品のがどのくらい同じか比較をするリスト作成したいのです。 エクセルに打ち込んでいくような原始的な方法では何百と商品がなったときに 探すのが大変なので何かいい方法はないかと思っているのですが? 一方のサイトにある商品は打込みますが、もう一方のサイトにある商品が 一目であるかないか判る、あるいは検索できる方法ってないでしょうか? 以外に簡単なことが判りません、、、>< オフィスソフトにありそうですが、できればフリーソフトで 使いやすいものがあればお願いします。 ファイルソフトのことかなと思うのですが、ファイルソフトとは そもそも何と検索したらIT用語でさらっと書いてあるので 判ったような判らないような、、、><
- 締切済み
- マーケティング・企画
- 2つのファイルの内容をを後ろから比較
2つのファイルを比較する際、DOSコマンドで「FC」や「COMP」をつかって 比較することが出来ますが、これだとファイルの頭からしか比較することが できなくて困っています。 DOSや他のソフトでもよいのですが2つのファイルの一番最後の行から 順に上に上がって比較することはできないでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- フリーのソフトでハードディスクのファイルを比較
いつもお世話になっております、 「フリーのソフトでハードディスクのファイルを比較してくれる物」(もちろんMacで)を探しております。 比較後、ファイル名および日時が同じ物があれば削除したいと考えております。 そこまで自動でやってくれる物があれば御の字ですが、比較後レポートを出してくれれば後は手動でも結構です。 どなたかご存知の方がいらっしゃいましたら宜しくお願いいたします。
- ベストアンサー
- Mac
- フォルダの内容比較(Windows、アンドロイド)
フォルダ同士の内容の比較を行いたいのですが、WinMergeを使ってみたものの、私には大変分かりづらくて挫折しました。 もう少しシンプルにフォルダ同士の内容の比較のできるフリーソフトを教えて下さい。 Windows10で動かします。よろしくお願いします。
- ベストアンサー
- フリーウェア・フリーソフト
お礼
>まさか画像を比較するとも考えにくい? 比較するファイルは画像でも良いし、エクセルでもテキストファイルでも良いです。 >、「何を以って、2つのファイルの2つのレコードを、比較すべきものとして捉えるか」 #1さんの参考サイトにあるようなソフトがエクセルで作れないかということです。 PS 知りたいことは最初の質問の通りです。 それ以上のことを逆に聞かれても答えようが有りません。m(__)m
補足
他サイトで教えていた回答を書いておきます。 '=============================================================== 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