ExcelでAシートとBシートを比較する方法

このQ&Aのポイント
  • ExcelでAシートとBシートを比較する方法を教えてください。AシートとBシートのテーブルには商品コード、商品名、単価、数量、価格のデータがあります。
  • Bシートの行にエラーがある場合にエラーメッセージを表示する関数を知りたいです。Bシートの行数や数値がAシートと異なることがありますが、列数は同じです。
  • また、Aシートの商品コードは重複しない一方、Bシートの商品コードは存在しないか重複している可能性があります。Bシートのデータが異常な場合にエラーメッセージを出力したいです。
回答を見る
  • ベストアンサー

ExcelでAシートとBシートの比較

ExcelでAという正しいシートがあります。中味は大きなテーブルです。 Bシートも最終的にはAシート=Bシートの形にしたいのですが、諸事情でBの方は行が多かったり少なかったり、或いは、数値が異なっていたりします。列数は大丈夫です。 そこで、AとBを比較し、データがおかしいBの行にエラーを返したいのですが、何か適当な関数をご存知の方教えて下さい。 (例) 【Aシート】(正) 商品コード・商品名・単価・数量・価格 ab13467…シャツ…1,500…2…3,000 hj28888…スカート…2,000…3…6,000 【Bシート】 商品コード・商品名・単価・数量・価格 ab13467…シャツ…1,500…2…5,000 ←(エラーを出す)  hj28888…スカート…2,000…3…6,000 (※Aの商品コードは重複データなし、Bの商品コードは存在しない又は重複の可能性ありです。 Bは入手経路が異なる為に一部データがおかしくなっています。) 以上、わかりにくいかもしれませんが、何か手がかりでも頂ければと思います。但し、マクロは解らないので関数でお願いします。

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

  • ベストアンサー
  • comv
  • ベストアンサー率52% (322/612)
回答No.6

こんばんは こんな方法もあります ・Bシートの項目を含む全データ範囲を選択 ・メニューのデータ フィルタ  フィルタオプションの設定  リスト範囲:Bシートの選択した範囲が入力済みの筈です  検索条件範囲:欄をクリックして入力状態にした後  シートAの項目を含む全データ範囲を選択 (重複もエラーチェックしたいなら)  「重複するレコードは無視する」 にチェック ・OK ・抽出された状態で [ALT]+[;]キー ・可視セルのみ選択状態になりますから 適当な色で  塗りつぶし指定 ・データ フィルタ 全て表示 これで色の塗られていない行がシートAにないデータ (と重複データの2番目以降)です。

M-ring
質問者

お礼

すみません、たいへん失礼しました。 『(重複もエラーチェックしたいなら) 「重複するレコードは無視する」にチェック 』 で正しかったです。 再度処理をしてみたら書かれた通りの結果となりました。

M-ring
質問者

補足

えっ、何だかわからないけれど、この通りにやってみたら出来たような…気がします。ありがとうございます。 『(重複もエラーチェックしたいなら) 「重複するレコードは無視する」 にチェック 』 は、チェックを外す でいいですよね? でもこれは一体なんですか?こんな方法初めて知りました。 ただ、Aに存在しBには存在しないデータは、やはりVLOOKUP関数(今、他の適当な関数が思い浮かびません。)などで検索し、Bに追加しなければいけませんよね?

その他の回答 (8)

  • comv
  • ベストアンサー率52% (322/612)
回答No.9

こんばんは3 >それからこの教えて頂いた機能は、項目がそれぞれ >全て同じとして、一部の項目、例えばC~F列を >比較するという事は可能でしょうか? 抽出範囲 も 検索条件範囲も C~F にすれば OK の筈です。 >教えて頂いた方法で本番データ(AB両シートとも >項目数40、行数約700)を処理していたら、途中で >「EXCEL.EXE」というエラーが出てしまい勝手に >終了してしまいました。 私も限界値は試したことがないので申し訳ありませんが わかりません!数百行単位の重複処理は行ったことは ありますが精々4項目程度だったので・・・40項目 700行を OR 処理条件 とするのは確かに負荷的に キツイかもしれませんね! >「AのあるコードをBに探しにいって値を返してもらう」 >と言いたかったので、関数が入るのはA側です。 >この問題は多分大丈夫だと思うのですが…、 あっ 成る程 読みが足りませんでした 失礼しました 当然、前記された方々の数式で可能だと思います。

M-ring
質問者

お礼

検証作業終了しました。 項目も1/4ぐらいに絞り、行も100ずつシート分けをし、comvさんから伝授して頂いた方法で処理をしました。 あんまりにも簡単に比較が出来てしまうので本当に大丈夫…?かと少し心配でしたが、結果OKでした。 ありがとうございました。助かりました。

  • comv
  • ベストアンサー率52% (322/612)
回答No.8

再び こんにちは >ただ、Aに存在しBには存在しないデータは、やはり >VLOOKUP関数(今、他の適当な関数が思い浮かびません。) >などで検索し、Bに追加しなければいけませんよね? それはB側からでは、VLOOKUP()などの関数式でも 難しいと思います(できない訳ではありませんが) 前回のフィルターオプションでは、Bシートの不要部分 (色なし部分)を探し出す作業ですが、Aシート上で Aシートのデータを抽出範囲として、Bシートを条件に する(前回とシートの立場が逆)と色塗りされない行 (抽出されない部分)がBシートに不足している部分です でも余分なものを消して不足部分を補うとAシート そのものになっちゃうのでは? それならBシートのデータを全て消してAシートの データをコピーしたのと同じでは?

M-ring
質問者

補足

こんばんは。 再び回答ありがとうございます。 >それはB側からでは、VLOOKUP()などの関数式でも 難しいと思います(できない訳ではありませんが) 言葉が足りなくて申し訳ありません。 「AのあるコードをBに探しにいって値を返してもらう」と言いたかったので、関数が入るのはA側です。この問題は多分大丈夫だと思うのですが…、 教えて頂いた方法で本番データ(AB両シートとも項目数40、行数約700)を処理していたら、途中で「EXCEL.EXE」というエラーが出てしまい勝手に終了してしまいました。 これは比較するデータが大きすぎたせいでしょうか?それともノートPCの処理能力や容量、メモリの問題でしょうか? 一応、かなり項目を絞って再度やってみたら結果は出たのですが、これから詳細をチェックするのでまだ…という感じなのですが。 それからこの教えて頂いた機能は、項目がそれぞれ全て同じとして、一部の項目、例えばC~F列を比較するという事は可能でしょうか?

回答No.7

>VLOOKUP関数というのは、例えば返す列目に数字を入れる箇所にSUM関数などは入れられないのでしょうか?  申し訳ないですが、しばらく質問の意味がつかめませんでした…。  ちょっと勘違いかもしれませんが、B~E列の各列の比較を論理和又は論理積で集計したいということですか?  もし、そうなら、「配列数式」を使うことになるかと思います。  仮に、BシートのF列に比較結果用の列を作るとすれば、F2に次のとおり入力します。 =OR($B2:$E2<>VLOOKUP($A2,Aシート全体,COLUMN($B2:$E2),FALSE)) …と入力し、ここでEnterの代わりに、Ctrl+Alt+Enterとします。  これをこのまま一番下のセルまでコピーしてください。  B~E列のうち、1つでもAシートと異なっていれば、TRUEと表示されるはずです。  これで、オートフィルタを使えば、抽出もできます。 >それから、「条件付き書式」で色をつけた場合、後でフィルタ機能などを使ってそれだけを抽出する事は可能でしょうか?  これは多分・・・、出来ないと思います。

M-ring
質問者

お礼

再度お礼が遅くなり申し訳ありません。 [#6]の方が教えてくれた方法でなんとか誤データをピックアップする事は出来たのですが、この方法だと比較するデータが大きすぎる場合エラーになってしまうので、比較される側(誤データ)をいくつかのシートに分けて処理する必要がありました。 私としては出来ればVLOOKUP関数と何か他の関数を利用して比較が出来ればと思い、toshihiko_ooishiさんの方法も試してみているのですがどうもうまくいきません。 VLOOKUPの後に$A2と数式には書かれていますが、これは$B2の間違いではないですか?このままでは$A2の値をキーにしてAシートを探しに行くという形になってしまいますので、それは当然存在する筈だと思うのですが…? それから通常、返して欲しい値が存在する列を入力する箇所に、COLUMN($B2:$E2)を持ってきていますが、これは一体なんの値を返してくるのでしょう? この関数は、ヘルプでは範囲の列番号を返すとありますが…。 ちなみに私はこの箇所にSUM関数を入れてみましたが、やっぱりエラーが出てしまいました。 返す値の列目だけを5→6→7→8→9と変え、5つのVLOOKUP関数の値を加算する方法でなんとかやれるみたいですが、こんなに式が長くなると何処で間違っているのか探すのがたいへんです。 もしお時間がありましたら再度ご教授願えればと思います。

M-ring
質問者

補足

すみません、以下のお礼に自分の勘違いがありました。 > VLOOKUPの後に$A2と数式には書かれていますが、これは$B2の間違いではないですか? の部分ですが、VLOOKUPの後の$A2はAシートではなくBシートのセル番地ですね。Aシートだと前にシート名が入りますものね。 とんだ勘違いで申し訳ありません。そもそも紛らわしいシート名を例として使ってしまった私の誤りです。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

こんにちは。 ちょっと手間な方法ですが、、 1.Aシート、Bシートとも、データの連結フィールド(列)を作る。   例えば、D列に =A2&B2&C2&D2 で、ab13467シャツ150023000 ってなデータになる。 2.Bシートの E列に AシートとBシートのD列(例はD2)を比較する MATCH関数を入れる。   =MATCH(D2,A!$D$2:$D$100,0) で #N/A が返る行はAシートにない。   A!$D$2:$D$100 は Aシートのデータ範囲 3.Bシートをソートし、F列(例はF3) に =IF(E3=E2,"重複","") の関数を入れる。   * 元の並びが必要なら、ソート前に Bシートにインデックス行を作っておく。

M-ring
質問者

お礼

お礼が遅くなり申し訳ありません。 papayukaさんは多分パニックに陥っても自分が知り得る情報で順序だてて物事を考えられる方なんですね。 「#6」さんの方法でとりあえず誤データの抽出作業は簡単に行えたのですが、ただこの方法だと比較するデータが大きすぎる場合エラーになってしまうので、誤シートの方をいくつかのシートに分けてから処理を行う必要があるという手間がありました。 関数だけで抽出するには?と思い、papayukaさんの方法も試してみました。MATCH関数がちょっとよくわからなかったので、VLOOKUP関数と文字列を比較するEXACT関数を使ってやりました。 結果は「#6」さんの方法と同じになったので検証OKです。 回答ありがどうございました。

回答No.4

 私も、VLOOKUP関数を使うことが妥当だと思います。  それと、「条件付き書式」を併用すれば、Bシートの商品名、単価、数量、価格に、Aシートと異なる値がセットされている場合、色をつけることが出来るかと思います。  #3の方の言うとおり、条件付き書式は他のシートは直接参照できませんが、名前をつけることで、参照可能になるようです。  Aシート全体を選択 →数式バーの左の「A1」が表示されている場所に「Aシート全体」(名前は任意で可)と入力し、Enter →BシートのB列からE列を選択 →[書式] →[条件付き書式] →「セルの値が」を「数式が」に変更 →右のテキストボックスに下記の式を入力し、書式を設定し、OK =B1<>VLOOKUP($A1,Aシート全体,COLUMN(),FALSE)  これでいいと思いますが、間違ってたらゴメンナサイ。

M-ring
質問者

補足

回答ありがとうございます。 私も、やはりVLOOKUP関数が妥当だと思い、先ほどからずっと検証していたのですが、焦っているせいかうまくいきません。 VLOOKUP関数というのは、例えば返す列目に数字を入れる箇所にSUM関数などは入れられないのでしょうか? おそらく数値の間違いが殆んどだと思われるので…。 それから、「条件付き書式」で色をつけた場合、後でフィルタ機能などを使ってそれだけを抽出する事は可能でしょうか?

  • lipton55
  • ベストアンサー率60% (32/53)
回答No.3

私も「条件付書式」がいいと思います。 ただ条件付書式は別のシートは参照できないと思いますので、BシートのデータをAシートのデータに並べるように貼り付けをしてからの方がよいと思います。 データの修正が終わったら、条件付書式を削除し任意の領域をコピーし、Bシートに貼り付ければよいかと思います。

M-ring
質問者

お礼

お礼が遅くなり申し訳ありません。 あまりにもデータが大きすぎるので一つのシートに両方を並べて作業をさせることは不可能でした。 でも「条件付書式」を利用することについては、なるほどそんな手もあるのかと新しい発見でした。 回答ありがとうございました。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.2

Bシートにエラーを表示したいとのことですが、Aシートに表示させた方が簡単だと思います。それでは不都合でしょうか? Aシートに例えば「照合」という列を作り、vlookup関数で、Aシートの商品コードをキーに、Bシートの商品コードを検索列に、Bシートの例えば数量を返値に設定して、ちゃんと値が返ってくればキーがBシートにも存在する、値が返らなければAにある商品コードがBには存在しないと言うことになります。 ただし、キー順で整列していることが条件ですが...

M-ring
質問者

お礼

お礼が遅くなり申し訳ありません。 > Bシートにエラーを表示したいとのことですが、Aシートに表示させた方が簡単だと思います。それでは不都合でしょうか? はい、不都合というかこれはAにあってBにない(未入力データの検索)には有効なのですが、逆にBにあって(余計なデータが入力されている)Aにないデータは探せないという結果になってしまいます。 皆様方のお陰でなんとか検証作業もあともう少しで終了といった感じです。 回答ありがとうございました。

  • tksoft
  • ベストアンサー率36% (99/273)
回答No.1

書式の「条件付書式」を使用するのはどうでしょう。 例えばBシートのA1に 「セルの値が」「次の値に等しくない」「=Aシート!A1」 のときセルの背景を赤にする とかいうのはいかがですか。

M-ring
質問者

補足

回答ありがとうございます。 私は「条件付書式」という機能を今まで利用した事がないのですが、もしかしてこの機能はAシートとBシートが同じように並んでいないと使えないですか…? 件数が一緒ではないのでいろいろ悩んでます。 今回、Aシートの商品コードのキーを手がかりにBシートに探しに行って、同じ商品コードがBシートのどこかの行に存在した場合、A・B双方のそれぞれのデータが一致するかを確認したいのですが…。

関連するQ&A

  • エクセル 抽出

    Sheet1に コード番号 商品名 数量 単価 12345    チョコ   1  50 67891    アイス   1  60 45612    アメ    1  70 と上記のようにデータがあるときにSheet2でコード番号だけ打ち込めば商品名・数量・単価を出せる関数等あれば教えてください。 宜しくお願い致します。

  • EXCELの2つのシートの照合処理マクロについて

    マクロが得意でなく下記の処理が可能かご教授いただければと お願いします。 ・シートAに自社の発注済みデータ ・シートBに発注先から送られてきた受注データがあります。 シートAの発注番号コードとシートBの受注番号コードが一致するので これを基にそれぞれのシートにある数量、単価、金額を照合し 一致しないレコードのみシートCにコピーさせる。 という流れなのですが、 ・それぞれのシートのコード、数量、単価、金額は別々の列にあります。 現在関数とオートフィルターで処理しているのですが効率が悪いため 改善するよう指示されて困っております。 よろしくお願いします。

  • EXCELで入力用シートをまとめる

    Excelで10名が同じ書式の入力用シートを各自別々にファイルで持ち、 使っています。 それを、別のシートで一つの表にまとめる方法があれば、どうぞ教えてください。 できれば、まとめたシートは当日分と毎日のデータを溜めていけるものを 作りたいと思っています。 統合やってみたのですが、単価、受注数量、得意先codeが合計数量で 出てしまいます。 例いとうSHEET1 種類 商品CODE 単価 受注数量 得意先CODE ああ ABCDEF  100    125        3440 例すずきSHEET1 種類 商品CODE 単価 受注数量 得意先CODE いい GHIJKLMN  500     99        3330 これを、下記のようにまとめたいのです。 例合計SHEET1 種類 商品CODE 単価 受注数量 得意先CODE ああ ABCDEF  100     125        3440 いい GHIJKLMN  500     99        3330

  • VLOOKUPとINDIRECTで別のEXCELファイルのシートを参照したい

    EXCEL2007を使用しています。 添付画像のように、例えば、B2のセルには =IFERROR(VLOOKUP(A2,INDIRECT($B$1&"!a:b"),2,FALSE),0) という関数があり、VLOOKUPとINDIRECTを使って同じEXCEL内の 別のシートを参照するようにしてあります。 ※シートをそれぞれ 0910,0911,0912という名前にして各年月毎に 商品コードと数量を入れてあります。 この商品コードと数量が入ったシートを数量.xlsxという別のEXCELファイルにして このMAINのEXCELシートにデータを持ってきたいのです。 何か方法はありますでしょうか?よろしくお願いします。

  • Excel関数で違った答えになってしまいます

    Excel関数で違った答えになってしまいます Excelで商品の管理をしているのですが、 関数を入れても答えが違ってしまいます。 [Sheet1]・・・コード入力シート (A1)(A2)・・・商品コード (B1)(B2)・・・数量 [Sheet2]・・・データベースシート (A列)・・・商品コード とあり、データベースの価格を 数量により変化させます。 例えば 商品コード(as400)の価格を 数量100個以上なら10円、100個未満だと15円 としたいのです。 作成した関数は IF(OR(AND('Sheet1'$A$1=A1,'Sheet1'$B$1>=100),AND('Sheet1'$A$2=A1,'Sheet1'$B$2>=100)),10,15) としました。 ただこれだと、[Sheet1]の1行目は正しく表示されるのですが 2行目になると、数量を1個にしても価格が10円になってしまいます。 どのようにすれば良いか悩んでいます。 よろしくお願いします。

  • エクセルで複数シートを一覧表にするには?

    教えてください。エクセルで複数シートを自動で別のシートに転記したいのですが、 やり方がわかりません。 各シートの空白部分を除いてデーターがある分だけを取り出して、金額に数式を入れて 合計金額を追加したいのですが・・・・・。 下記のような感じでできますか? 宜しくお願いいたします。    Sheet1     商品名  単価  数量        ****   000  000        ****    00   00   Sheet2     商品名  単価  数量        ****   000  000        ****    00   00   Sheet3     商品名  単価  数量        ****   000  000        ****    00   00 をSheet4に   シート名 商品名  単価  数量  金額   Sheet1  ****   000  000  0000(単価×数量)          ****    00   00  0000(単価×数量)                    合計金額  000   Sheet2 商品名  単価  数量  金額         ****   000  000  0000(単価×数量)         ****    00   00  0000(単価×数量)                   合計金額  000    Sheet3 商品名  単価  数量  金額         ****   000  000  0000(単価×数量)         ****    00   00  0000(単価×数量)                   合計金額  000

  • Excelでの複数シート間での検索

    2つのシートがあり、 シート1 商品コード 商品名  単価 100    A    50 200    B    70 300    C    80 シート2 商品コード 倉庫  在庫数 100   東京   10 200   東京    5 300   東京    2 200   大阪  100 300   大阪   70 となっています。 目的は、シート2の商品コードをキーとし、シート1の商品コードを検索し、単価を引っぱってきたいのです。 シート1に該当する商品コードがなかった場合は単価は0としたいです。 どのようにしたらよいか、アドバイスいただきたいのですが、よろしくお願いいたします。

  • ■エクセルで請求書作成

    みなさんお世話になります。 お知恵をお貸しいただければ幸いです。 エクセルにて売り上げの一覧がございます。 例) A1------B1-----C1----D1-----E1----- Aさん 商品A 数量 単価 支払い方法 Bさん 商品A 数量 単価 支払い方法 Cさん 商品A 数量 単価 支払い方法 Aさん 商品B 数量 単価 支払い方法 Cさん 商品B 数量 単価 支払い方法 という横へデータを入力した一覧です。 Aさん、Cさんが違う商品を2回に分けて購入。 よって、2行に入力してあるのですが・・・ これを月末でしめた時に、Aさんに対しての請求書で 請求書  Aさん 1月請求合計額 ●●円   明細   商品A 数量 単価 支払い方法   商品B 数量 単価 支払い方法 と請求書を作る方法はございませんでしょうか? 同時に、Aさんの入力場所にBさんの名前を入れるとBさんの請求書が完成し・・・ 可能ならAさん・・・Bさん・・Cさん・・Dさんと次々に請求書を自動で印刷する事もできる方法もございますでしょうか? VLOOKUP関数でも調べてやってみましたが、同じ商品が重複して2度出てきたり、Aさんでうまくできても、Bさんでおかしくなったりで、本日1日中費やしてしまいました。 =IF(A1="","",(A1,売上データ!$A$1:$E$5,2,FALSE)) として、請求書のエクセルページにA1へAさんの名前を入れると売上データの商品Aが表示されますが、Aさんは2品目購入なので、下段以降にセルをコピーすると同じデータが反映されてしまい・・ どうかお知恵をお借りできれば幸いです。

  • エクセルと検索関数について

    エクセルの関数を教えてください。 Sheet1にA社の商品がありA1に商品コード A2商品名 A3数量。 同じくB社Seet2にA1に商品コード A2商品名 A3数量。 A社にあってB社にない商品だけをSheet3に商品コードと商品名と数量を抽出したいのですが、 検索は商品コードでお願いします。 何回か挑戦したのですができません。 仕事で使いたいのでお手数ですがよろしくお願いします。

  • エクセルでシート間の比較をしたいのですが。。。

    Excel2000を使用しています。 2つのシート間で同一データの有無の比較がしたいのです。 仮に比較したいものをシートA・Bとします。 それぞれ項目として、大字・小字・地番があり、それが同じ時に同一データと判断します。 件数にすると4000~5000件ぐらいあり、関数でやってみたのですが、うまくいきません。 比較で結果としては、下記の3パターンがあります。 1)AとBに有る。 2)Aに有って、Bに無い。 3)Bに有って、Aに無い。 希望としては、新たなシートに 2)と 3)のデータのみ抽出して、そのデータが 2)なのか 3)なのかわかるようにしたいのです。宜しくお願いします。

専門家に質問してみよう