データの比較と抽出方法について

このQ&Aのポイント
  • エクセルデータのリストAとリストBを比較し、新規、解消、処理なしのデータを抽出する方法について教えてください。
  • 抽出するデータは、管理番号、伝票番号、金額の3項目です。
  • 毎日行う処理で他の人も使用するツールになるため、正確かつわかりやすい方法を教えてください。
回答を見る
  • ベストアンサー

データの比較

エクセルデータの「リストA(前日分)」と「リストB(当日分)」の2つのファイルがあります。 そのデータはどちらもオートフィルタで抽出されたデータで、「管理番号(数字が文字列として入力)」 「伝票番号」「金額」を含む複数の項目で構成されています。 「リストA(前日分)」と「リストB(当日分)」の「管理番号」「伝票番号」「金額」を比較して、 「管理番号」「伝票番号」「金額」が「リストA(前日分)」になくて「リストB(当日分)」にある →→→新規 「管理番号」「伝票番号」「金額」が「リストB(当日分)」になくて「リストA(前日分)」にある →→→解消 「伝票番号」「金額」が「リストA(前日分)」になくて「リストB(当日分)」にあり、かつ、 「管理番号」が「リストA(前日分)」にある →→→処理なし この「新規」「解消」「処理なし」のデータの内容を抽出したいのですが、どのようにしたらよいのかが わかりません。他の方の質問と回答を基に関数やマクロで作ってみたのですがうまくいきませんでした。 毎日行う処理&私以外の人も使うツールなのでわかりやすく正確なものにしたいのです。 皆様知恵を貸してください。お願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>まず金額(2)が0のデータを抽出する Sub test()  Dim wb1 As Workbook  Dim wb2 As Workbook  Dim ws1 As Worksheet  Dim ws2 As Worksheet  Dim i As Long, j As Long, k As Integer  Dim v As Variant, w As Variant  Set wb1 = Workbooks("Book1.xls")  Set wb2 = ThisWorkbook  Set ws1 = wb1.Worksheets("Sheet1")  Set ws2 = wb2.Worksheets("Sheet1")  ws2.Range("A1:E1").Value = ws1.Range("A1:E1").Value  ws2.Columns("A").NumberFormatLocal = "m""月""d""日"""  ws2.Columns("B:C").NumberFormatLocal = "@"  With ws1       v = .Range(.Range("A2"), .Cells(Rows.Count, 1).End(xlUp).Offset(0, 4)).Value  End With  ReDim w(1 To 5, 1 To UBound(v, 1))  For i = 1 To UBound(v, 1)      If v(i, 5) <> 0 Then         j = j + 1         For k = 1 To 5             w(k, j) = v(i, k)         Next      End If  Next  ReDim Preserve w(1 To 5, 1 To j)  ws2.Range("A2").Resize(j, 5).Value = Application.Transpose(w)  Erase v, w End Sub で精一杯かな?参考になれば幸いですが。 あとは難しいっす。

irikodashi
質問者

お礼

いろいろ考えていただいてありがとうございます! 早速試してみますね^^

その他の回答 (3)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

>まず金額(2)が0のデータを抽出する >    If v(i, 5) <> 0 Then     If v(i, 5) = 0 Then 訂正。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>「シートレイアウトで掲示」とはどういう風にすればよいのでしょうか? 回答者側にはシートにデータがどのように配置されているのか、 わかりません。 それをわかりやすく提示して頂きたいと思っての発言です。 近々の質問等を見て頂ければ、どんな感じかわかるかと。 >エクセルデータの「リストA(前日分)」と「リストB(当日分)」の2つのファイルがあります。 同一ブックのシートの比較ではなく、別ブックのとあるシート毎の比較になるのでしょうか?

irikodashi
質問者

お礼

回答してくださる方々への配慮が足りませんでした。 申し訳ありません。。 >同一ブックのシートの比較ではなく、別ブックのとあるシート毎の比較になるのでしょうか? その通りです。 前日分のファイルが1つ、当日分のファイルが1つで、項目のレイアウトは前日と当日は同じです。今考えているのは、前日分と当日分を比較するための関数やマクロを取り入れた「比較」ファイルを作ることを考えています。 元データ(前日分・当日分)のシートレイアウトは      日付  管理番号  伝票番号  金額(1)  金額(2)      6/10 00020081 00123456 1000 0 6/11 00020081 00123456 1000 1000 このデータから、まず金額(2)が0のデータを抽出する(前日・当日どちらも) 「前日分」と「当日分」のデータを「比較」ファイルの中の シートにコピー、貼り付け。 「新規」「解消」「処理なし」の判定は「管理番号」「伝票番号」 「金額(1)」を使って行う。 「 新規」「解消」「処理なし」のデータがそれぞれ抽出されるように する。 これでわかっていただけましたでしょうか。。    

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excelであればシートレイアウトで提示された方がいいかと。 あとマクロ(VBA)は検討範囲内なのでしょうか?

irikodashi
質問者

お礼

回答ありがとうございます! 「シートレイアウトで掲示」とはどういう風にすればよいのでしょうか? マクロ(VBA)は検討範囲内です♪ 会社の決まりで他のデータ比較ソフトなどをダウンロードや インストールできないことになっているので、マクロなどを 使って自分で作るしかないのです(OFFICEは一式あります)

関連するQ&A

  • 複数のフィールドを比較してデータが更新されているフィールド名を抽出したい!

    素人質問で申し訳ありませんが教えてください。実は或る伝票管理テーブルがあり、そのリスト中の実質的なキーコードである「伝票番号」フィールドには重複可能なインデックスを設定してあります。それとは別に主キーを設定してはいますが、それはオートナンバーとしてデータをソートするくらいにしか使っていません。 この伝票管理テーブルは外部のTXTファイルを一括して取り込む受け皿として存在していて、アクセス上で各フィールドにキー入力することはありません。 このように「伝票番号」フィールドには同じ番号のものが複数存在するのですが、同じ番号の中で一番最初のものが新規に登録されたもので、2番目以降にくるものが変更として登録されたものですが、残念ながらどのフィールドが更新されたのか判らないので、その都度一項目ずつマニュアルでチェックしている為にとても時間が掛かっています。 それぞれのデータには「伝票番号」以外に合計10項目くらいのフィールドが存在しています。 アクセスで何とか処理できないものかと思いあぐねている内容としては、同じ「伝票番号」をもつデータを時系列的に2データずつ比較します。(直近データ同士の比較) その上で、 (1)10項目のフィールド全てのデータが両者で全くイコールならば、新しい方の行を削除する。 (2)いずれかのフィールドのデータが更新されていれば、主キー同士の番号と更新されているフィールド名を抽出して、別のテーブルにその結果を放り投げる。 例えば、『800888』という「伝票番号」をもったデータが4個テーブル中に存在していて、それぞれに10、25、40、80という主キーが付番されているとして、 (1) 25は10に対し、フィールドKとNのデータが更新されている。 (2) 40は25と全てのデータが全く同じ。 (3) 80は40(=25)とフィールドDとPのデータが違う。 となった場合、まず伝票管理テーブルから主キー40の行を削除し、その上で下記のようなデータを抽出できればうれしいのですが。 10/25: K N 25/80: D P 雲を掴むような話で申し訳ありませんが、こんなことが可能なのかどうかご教示頂ければ幸甚です。宜しくお願いします。

  • プログラムの考え方とDBの扱いかたについて

    技術的な質問ではなく、考え方についての質問です。 こっちを立てるとあっちが立たずのような状態で困ってます。 どのカテゴリで質問するか悩んだのですが、直近の投稿数が多いのでC言語のところで質問させて頂きます。 ご教示ください。 現在こういうバッチプログラムがあります。 バッチA  > (1)外部から前日分の確定データリストを取得  > (2)データリストに基づいて特定処理の実施  > (3)特定処理の対象になったものをDB(テーブルA)に格納 ※1つのプログラムで3つの処理を行ってます 今度、データリストの取得先に外部2が追加されます。 仕様が同じであれば、バッチAと同様のものを作ればいいのですが、 外部2の場合、1か月の間データが確定されないという仕様があります。 前日分のデータが確定するのは、 1カ月後までの間に取得するデータリストにキャンセルデータが無かった場合です。 1.そこでこのように考えました。 バッチA  > 外部2から1カ月分のデータリストを取得  > 取得データから、1か月前のデータを対象に1ヶ月間キャンセルデータが無いものを抽出する  > (2)データリストに基づいて特定処理の実施  > (3)特定処理の対象になったものをDBに格納 2.でも、毎日1か月分のデータを取得して抽出処理を行うのは負担になるし、 毎日ほぼ同じデータを取得するのはあほらしいと思い、以下のように考えました。 バッチA  > 外部2から前日分のデータリストをDB(テーブルB)に格納  > DBから1か月前のデータを対象に1ヶ月間キャンセルデータが無いものを抽出する  > (2)データリストに基づいて特定処理の実施  > (3)特定処理の対象になったものをDB(テーブルA)に格納 3.今度はそもそもバッチ分けた方がいいんじゃないかと思い、以下のように考えました。 バッチ1  > 外部2から前日分のデータリストをDB(テーブルB)に格納 バッチA  > DBから1か月前のデータを対象に1ヶ月間キャンセルデータが無いものを抽出する  > (2)抽出したデータリストに基づいて特定処理の実施  > (3)特定処理の対象になったものをDB(テーブルA)に格納 4.さらに、キャンセルデータの処理も別バッチにすれば、   バッチAでの処理がわかりやすくなるじゃないかと思い、以下のように考えました。 バッチ1  > 外部2から前日分のデータリストをDB(テーブルB)に格納 バッチ2  > DB(テーブルB)から1か月前のデータを対象に1ヶ月間キャンセルデータが無いものを抽出する  > 抽出したデータのキャンセルデータのレコードをDB(テーブルB)から削除 バッチA  > (1)DB(テーブルB)から前日分のデータリストを取得  > (2)データリストに基づいて特定処理の実施  > (3)特定処理の対象になったものをDB(テーブルA)に格納 ここまで考えてどうするのがスマートなのかよくわからなくなってきてしまいました。 3か4でいこうと思うのですが、3の時にバッチAで抽出処理をするのはいまいちって思ってます。 それで4にしようと思ったのですが、 テーブルBは取得データをそのままの状態で入れておくって当初考えてたので、 それをあとからレコード削除したりするのもどうなんだろうと思ってます。 確定したデータと未確定のデータが混在するのもなんだか腑に落ちません。 それだったら、新たにテーブルCを作って、確定データを突っ込んでおくってことも考えたのですが、 そうなると、バッチA最後に格納しているテーブルAと何も変わらないようなものがもう一つできてしまいます。 どういうのがスマートというか良い考え方なのでしょうか。

  • 【Excel VBA】データの比較

    Excel2003を使用しています。 職場のシステムに入力した仕訳をCSVデータで出力→マクロで処理したデータを集計し、科目ごとの金額確認用として使用しています。 このCSVデータは伝票番号順に上から表示されていますが、借方と貸方が混在していて、金額も借方と貸方で2列で表示されていたので、一旦、借方データと貸方データに分けて(それぞれシートを用意して該当する必要データをコピペ)借方データの伝票番号&伝票行番号が貸方データの伝票番号&伝票行番号と一致したら、同行に表示するようにしました。 ただ、借方データを基準に比較しているため、借方の行数が貸方の行数より少ない仕訳の場合は貸方のデータが表示されません。私はこのケース(借方行数<貸方行数)の仕訳はありませんが、よその支店で月に2回ほどあるようで、これを解消できないか尋ねられています。 下記は、ある飲食店へ代金\15,000振込、振込手数料\420は差し引く(飲食店持ち)という場合の仕訳だそうです。 交際費15,000/普通預金14,580          /雑費     420 私自身、この仕訳にちょっと違和感を感じるのですが、この場合だと、貸方の雑費\420が表示されません。 何か良い解決方法があれば、教えていただきたくよろしくお願いします。

  • 2つのデーターの突合の仕方 シート1 A1 伝票番

    2つのデーターの突合の仕方 シート1 A1 伝票番号 B2 金額 100行 シート2 A1 伝票番号 B2 金額 70行 どちらも各シート内には重複データーは無く、シート2はシート1の中に必ずあります。 エクセル関数で解決するにはどうしたらいいでしょうか?

  • データの比較

    SQLserver2005を使用ています.     ----------------- 日付 値 6/9 13:10 158 ・・・1 6/9 13:00 154 ・・・2 6/9 12:50 40 ・・・3 6/9 12:40 158 ・・・4 6/9 12:30 37 ・・・5 6/8 08:45 152 ・・・6 6/8 08:40 159 ・・・7 ----------------- というデータの中から Aの一つ前の時間のBと比較して値が100以上少なく 変化していたらそのAのデータを抽出. 例として, 3は4に比べ-100以上変化しているので抽出. 5は6に比べて-100変化しているが, 日付が違うので抽出しない. という条件を作りたいのですが, いまいちピンと来ないのでご教示いただけると幸いです. よろしくお願いします.

  • エクセルデータの抽出について

    関数初心者なので、どんな関数を使えば簡単に抽出できるのかわかりません。下のようなデータがあるとしたらどんな方法があるでしょうか?    A      B     C    D 1 受注番号  業務内容   担当  金額 2  1     ○○○   伊藤   20000 3   1 ○○○   伊藤   5000 4  1     ○○○   伊藤   5000 5  2     ○○○   佐藤   25000 一つの受注番号でいくつかの業務があるとして、伊藤が担当した受注分の各受注番号ごとの金額の合計を抽出したい。

  • 条件に一致したデータの検索・抽出について

    エクセルで2つのデータから条件に一致したデータを検索・抽出がしたいのですが、うまく抽出することができないため、質問させていただきます データA |入荷日|商品番号|商品名|数量|金額| |1.1|1111|〇〇〇|10|10| |1.2|2222|◎◎◎|15|15| |1.3|3333|△△△|20|20| |1.4|4444|◆◆◆|10|10| データB |販売日|商品番号|商品名|販売数| |3.1|1111|〇〇〇|   | |3.2|    |AAA|100| |3.3|    |BBB|120| |3.1|2222|◎◎◎|   | |3.3|    |CCC|100| |3.1|3333|△△△|   | |3.1|4444|◆◆◆|   | データBから商品番号の一致したデータの一部を抽出してデータAに追加したいです (一部が難しいようなら1行そのまま抽出でも大丈夫です) 理想は |入荷日|商品番号|商品名|数量|金額|販売数| |1.1|1111|〇〇〇|10|10|   | |   |    |AAA|  |  |100| |   |    |BBB|  |  |120| |1.2|2222|◎◎◎|15|15|   | |   |    |CCC|  |  |100| |1.3|3333|△△△|20|20|   | |1.4|4444|◆◆◆|10|10|   | もしくは、関数を利用して以下の形にできれば、と思います |入荷日|商品番号|商品名|数量|金額|商品名|販売数|商品名|販売数| |1.1|1111|〇〇〇|10|10|AAA|100|BBB|120| |1.2|2222|◎◎◎|15|15|CCC|100|   |   | |1.3|3333|△△△|20|20|   |   |   |   | |1.4|4444|◆◆◆|10|10|   |   |   |   | データAをベースに、データBから重複データのうちすでにデータAにあるものを省き(1件目は重複データなので2件目以降)抽出する 1.データB商品番号重複しています。重複データの1件目はデータAと共通で、2件目以降を抽出したいです 2.データB商品番号の重複はそれぞれ違うため、1件も重複してないものもあれば3件ほど重複しているものもあります 3.データAは入荷日の範囲を指定したデータですが、データBは入荷日項目がないため抽出する必要のない内容・件数のデータもはいっています。その為、データAから抽出するのではなく、データAをベースにデータBから抽出がしたいです。 よろしくお願いします。

  • エクセル関数 データの抽出について

    エクセル2010 重複データの抽出。 重複データの抽出方法をご教示ください。 抽出先はシート1のA列A3~抽出データの分だけ リストはシート2のB2:AB32まで フィルターオプションなども使ってみたのですが どうも上手くいきません。 どなたか知恵をお貸しください。 方法はできれば関数だといいのですが(データが増えてもいいように) できなければ他の方法でもいいです。 VBAなどは全くの初心者なので出来れば避けたいのですが… シート2     A    B   C    D~AB32 1  "" 2 いちご ばなな いちご りんご 3 みかん いちご ばなな いちご 4 りんご ばなな いちご みかん 5 みかん いちご ばなな りんご 6 ばなな ばなな りんご いちご : : 32 シート1(重複データなし)  A 1  "" 2  "" 3 いちご 4 みかん 5 りんご 6 ばなな 7 : : 抽出リストのデータはシート2のB2:AB32にぎっしり入っています。 宜しくお願い致します。

  • エクセル 重複データの抽出方法を教えてください。

    複数のセルの値が同じである重複データを抽出する方法を教えてください。 (A)伝票No.、(B)勘定科目CD、(C)金額、(D)取引先CDとなっている場合で、(B)(C)(D)のすべての値が同じデータ(重複データ)のみを抽出したいのです。 例: (A)伝票No.、(B)勘定科目CD、(C)金額、(D)取引先CD 12120 005 10,000 1234 ※ 12121 005 20,000 1234 12122 004 20,000 1235 12123 003 20,000 1236 12124 005 10,000 1234 ※ 12125 003 20,000 1237 12126 006 10,000 1237 ※印の2つの行が重複データとなり、この行のみを表示または色や印を付けてわかる状態にしたいのです。 重複しているデータは双方わかるようにしたいのですが可能でしょうか? (伝票No.12120と12124の両方が解る状態) データ件数が5000件ちょっとあるのでソートしただけでは時間がかかってしまいます。解る方おられましたら教えてください。(*- -)(*_ _)ペコリ

  • データ比較から抽出ができなくて困っています。

    はじめまして。どなたかご存知の方がいらっしゃれば教えてください。 大量のデータが入ったフォルダがA,B(約90,000枚の画像データ)それぞれありますが、そのA,Bを比較し重複していないデータのみ抽出を行いたいのですが、良い手法及びソフトはございませんでしょうか。

専門家に質問してみよう