• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのCSVを比較して一致していないものを検出したいのですがヒントをい)

2つのCSVを比較して一致していないものを検出する方法

DOUGLAS_の回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

●VBScriptでテキストファイルの内容の間違い探しは出来るでしょうか? http://okwave.jp/qa/q6138246.html の続きかと存じますが、No.2 nda23 さんがお書きの >(1)データを読み込んで配列に溜め、比較を行う。 >(1)はまぁ、コテコテとプログラムすることになります。 に近い方法をお一つ。 ------------------------------------ >BのCSVの「A列の値+B列の値」がおなじものをAのCSVから探し >同じものを見つけたらBのCSVの同じ行のC列の値が一致しているか検索 とのことですが、その順序で コード を書くと、冗長になりますので、 1)「BのCSV」の中から「AのCSV」に存在しない行を探し 2)BのCSVのその行の「A列の値+B列の値」を、再度「AのCSV」から探す という順序で考えてみました。 ------------------------------------ [1]「AのCSV」("D:\hoge\A.CSV")の全文を strCsvA に格納します。 [2]「BのCSV」("D:\hoge\B.CSV")を 1レコード ずつ読み込み、[1] から検索します。 [3] 見つからなかった場合は、今度は、「A列の値+B列の値」だけを [1] から検索します。 [4] [3] の結果が、 ・「見つかった」場合は(C列の値だけ)「一致しない」 ・「見つからなかった」場合は(「A列の値+B列の値」自体が)「存在しない」 という文字列を付して、「別テキスト」("D:\hoge\C.CSV")に書き出します。 ------------------------------------ >VBすくりぷとで考えています。 とのことですので、 ・メモ帳を起動し、下記コード を コピペ します。 ・全角スペース を 半角スペース 2個 に置換します。 ・これを適当な名前で、拡張子「VBS」で保存します。 ・この VBS ファイル を実行します。  以上です。 '----------------------------------- Option Explicit Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Dim objFSO Dim objCsvA, objCsvB, objCsvC Dim strCsvA, strCsvB, strCsvC Dim arrCsvB '//FileSystemObject を使って 値を読み書きします。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objCsvA = objFSO.OpenTextFile("D:\hoge\A.CSV", ForReading) Set objCsvB = objFSO.OpenTextFile("D:\hoge\B.CSV", ForReading) '//追加書込の場合は、下の「ForWriting」を「ForAppending」に変えてください。 Set objCsvC = objFSO.OpenTextFile("D:\hoge\C.CSV", ForWriting) strCsvA = vbCrLf & objCsvA.ReadAll  '[1] Do While objCsvB.AtEndOfStream <> True  '[2]  strCsvB = vbCrLf & objCsvB.ReadLine  arrCsvB = Split(strCsvB, ",")  If InStr(strCsvA, strCsvB) = 0 Then   If InStr(strCsvA, arrCsvB(0) & "," & arrCsvB(1)) = 0 Then  '[3]・[4]    objCsvC.writeline """存在しない""," & Replace(strCsvB, vbCrLf, "")   Else    objCsvC.writeline """一致しない""," & Replace(strCsvB, vbCrLf, "")   End If  End If Loop objCsvA.Close objCsvB.Close objCsvC.Close Set objCsvA = Nothing Set objCsvB = Nothing Set objCsvC = Nothing Set objFSO = Nothing

mr-r00
質問者

お礼

ありがとうございました。 若干レスポンスに問題はありましたが、要件も問題なくクリアしており大変助かりました。 参考になりました

関連するQ&A

  • VBScriptでテキストファイルの内容の間違い探しは出来るでしょうか

    VBScriptでテキストファイルの内容の間違い探しは出来るでしょうか? CSVをテキスト形式で読み込んでいるファイルなのですがごくごくたまに一部内容が違っています。 例: <Aテキスト> "AAAAA","BBB","CC" "DDDDD","EEE","FF" "GGGGG","HHH","II" <Bテキスト> "AAAAA","BBB","CC" "DDDDD","EEE","F8" "GGGGG","HHH","II" とほとんどあっているのですが一部違う行をみつけて別ファイルにその行を書き出したいのです。 CSV形式で見たときA列+B列の値が一致したもののC列データが正しいか確認したいのですがどういったアルゴリズムがいいのでしょうか? お願いします。

  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

  • Excel比較関数について教えてください。2

    下記のようにA列とC列を比較して、 一致した値が存在する場合、B列とC列を比較して、 E列に全て一致した場合は○、一致しない場合は×にしたいのですが教えてください。 また、A列にあってC列にない場合は、×を表示したいです。 A列 B列 C列 D列 E列 1 12345 aaa 12389 aaa A1とA3が一致&B1とD3が一致したので○ 2 12389 bbb 22222 bbb A2とC1が一致したが、B2とD1が一致しないので× 3 33333 bbb 12345 aaa A3の値がC列にないので空欄 教えてください。

  • Excel比較関数について教えてください。

    下記のようにA列とC列を比較して、 一致した値が存在する場合、B列とC列を比較して、 E列に一致した場合は、●一致しない場合は、空欄にしたいのですが教えてください。 A列 B列 C列 D列 E列 12345 aaa 12389 bbb A2と一致したので● 12389 bbb 22222 bbb 一致しないので空欄 33333 bbb 12345 aaa A1と一致したので●

  • excel2003 二つと一致したものを選ぶ関数

    いつもお世話になります。 素人が何かをするとすぐに壁に当ります。 よろしくお願いします。 二つのキーに一致したものを選べる関数はありますか? 例えば、 CD1 CD2 CD3 CD4 0001 aaa ddd ggg 0002 bbb eee hhh 0003 ccc fff iii 上記のデータがあると致しまして、 CD1の「0002」とCD4「hhh」が、一致して、 CD2の『bbb』を抜き出したいのですが・・・。 よろしくお願い致します。

  • csv形式のデータの一部を削除して、上書きする方法

    前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。

    • ベストアンサー
    • Perl
  • 検索VBAを教えてください。

    VBAの勉強中です。 超初心者です。 シート1のB3に入力した値を、シート2のデータベースのC列から検索して、その検索した値と同じ行のD列・E列・F列の値を、シート1のB4・ B5・B6に表示したいと思います。 <シート1>    A     B     C     D 1 2     3       あああ ←ここを入力すると 4       aaa   ←表示したい! 5       bbb   ←表示したい! 6       ccc   ←表示したい! <シート2>    A    B    C      D     E     F 1           あああ    aaa     bbb     ccc 2           いいい      eee     fff      ggg 3           ううう      hhh      iii       jjj 4           えええ     kkk      mmm     nnn 5             おおお     ooo     ppp     qqq findを使えばいいと聞きましたが、使い方がよくわかりません。 例を読みましたが、どう自分に生かせばいいのかわかりませんでした。 どなたか未熟な私に教えていただけませんか? どうぞよろしくお願いいたします。

  • セルの値を含む文字列を検索する方法

    エクセル2010を使っている者です。 セルの値を一部として含むかどうかを調べることはできますか? countifだとA列のセルとB列のセルの値が一致してないとならないし、findだと*aaa@tokyo.co.jp* のようにセルとして指定することができないし。。 例えば以下のような表でB列においてA列のそれぞれのセルについて値が含まれているか を調べたいと思っております。 よろしくお願いします。 A列              B列 aaa@tokyo.co.jp      aaa@tokyo.co.jp; bbb@tokyo.co.jo; ccc@tokyo.co.jp         bbb@tokyo.co.jp      ddd@tokyo.co.jo; eee@tokyo.co.jp; fff@tokyo.co.jp ccc@tokyo.co.jp      ggg@tokyo.co.jp; hhh@tokyo.co.jp; iii@tokyo.co.jp ・・・             ・・・・・・・

  • Excelでの帳票作成

    Excelで以下のようなシートがあります。 --------------------------- A列  B列 C列 D列 1 Name1 11111 2222 3333 2 Name1 44444 5555 6666 3 Name1 77777 8888 9999 4 Name2 aaaaa bbbb cccc 5 Name2 ddddd eeee ffff 6 Name3 ggggg hhhh iiii --------------------------- これを元に以下のようなシートを別々に作成したいです。 <シート1> Name1 11111 3333 Name1 44444 6666 Name1 77777 9999 <シート2> Name2 aaaaa cccc Name2 ddddd ffff <シート3> Name3 ggggg iiii つまり、元のシートのA列の内容(Name1,Name2,Name3)毎にシートを 作成し、A列、B列、C列をコピーしたいです。 上記のシート作成をマクロで自動化したいのですが、どのように行えばよいでしょうか? (VBAでも可) 以上、よろしくお願いします。

  • 【Excel2007】A列の値がB列に存在しないことを確認したい

    いつもお世話になっております。 Excel2007を使用しております。 次のような一覧があります。 A列   B列 aaaaa aaaaa bbbbb bbbbb ccccc ddddd ddddd fffff eeeee A列にはあるが、B列にはない値を取得したいと 思っております。 この例であれば、「ccccc」と「eeeee」を抜き出したいのです。 何か関数などで抜き出す方法がございましたら、 教えて頂けませんか? A列、B列ともに2000行程度あるため、調査に苦労しています。 ぜひよろしくお願いいたします。