• 締切済み

2つのシートから合致するデータの抽出方法

Excelについて質問させて頂きます。 二つのシートにある表からA列B列が合致する行だけを表示させたいと思います。 例;A列→商品名、B列→商品コード、C列以降→在庫数など。 シート1には、現在も販売されているもの。 シート2には、過去の分も販売されていたもの。 があります。 どのような解決策がありますか? データベースには10000件以上のデータがあるので一つずつ照合していけません。 どなたかExcelの関数に詳しいかたがいらっしゃいましたらご教授頂けましたら幸いです。 宜しくお願い致します。

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんにちは、商品名、商品コードをキーにするなら、 シート1のセルA1を選択して、リボンのデータタブのフィルタで 詳細設定をクリックし、リスト範囲が表全体になっているはずなので、 検索条件範囲にシート2のA1からB列の最終行までを指定して、OKすればいいはずです。 もし別のシートに抽出する場合は別シートの1行目に項目名をコピーしておいてから 上記作業で抽出先をその項目部分にします。 マクロなら、 Sub test1()   Dim sh1 As Worksheet   Dim sh2 As Worksheet   Dim sh3 As Worksheet      Set sh1 = Worksheets("Sheet1")   Set sh2 = Worksheets("Sheet2")   Set sh3 = Worksheets("Sheet3")      sh3.UsedRange.ClearContents      sh1.Range("A1:C1").Copy sh3.Range("A1")   sh1.Columns("A:C").AdvancedFilter _     Action:=xlFilterCopy, _     CriteriaRange:=Intersect(sh2.Range("A:B"), sh2.Range("A1").CurrentRegion), _     CopyToRange:=sh3.Range("A1").CurrentRegion, _     Unique:=False End Sub こんな感じです。

macco-macco
質問者

お礼

ありがとうございました。 私自身も質問の、仕方とか、説明不足で、どの方法を行っても抽出出来なかったので今回はなくなく1個づつ絞りこみました。 これからも同じような作業が発生するので、私自身も調べてみます。 また再度、質問させて頂くかもしれませんが、その際はもっとより具体的に分かりやすく質問したいと思います。マクロの記述ありがとうございました。 マクロの世界は奥深そうですね。皆様どこで勉強されたのか知りたいです。尊敬します。

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

エクセル初心者の場合や、仕事でいそいでやるような時はCOUNTIF関数利用がおすすめ。既出回答のような関数式は、考えて、理解する暇がない人向け。 本当はVBAなどでプログラムを組んだ方がよいとは思う。 エクセルの操作機能では、ずばりの物はないし、フリーソフト見つかるかどうか疑問。 ーー Sheet1、Sheet2があって Sheet1のA,B,C列に 商品 商品コード カウント数 a1  1 1 a2 33 0 a3  3 0 a4  4 1 a5  2 1 a6  3 1 a7  56 0 a8 61 0 a9  20 1 a10  71 0 C列は関数 =COUNTIF(Sheet2!D2:D100,A2&"-"&B2) で出したもの 行数は1万程度らしいが説明例なので100までとした。 カウント数が1以上なら存在するし、0なら見当たらないということなので、IF関数を被せて任意の文字列でコメント的に出せる。 どちらを主にするか書いてないのは、質問として片手落ち。逆に考える式はわかるだろう。 こういう文字列を結合しての比較は、要注意であるが、取り急ぎ挙げてみる。質問者の場合で、うまく行くかチェックして。 ーー Sheet2のA,B、D列に(D列は作業列の役割) 商品 商品コード 結合 a1  1 a1-1 a2  23 a2-23 a31  3 a31-3 a4  4 a4-4 a5  2 a5-2 a6  3 a6-3 a7  55 a7-55 a8  60 a8-60 a9  20 a9-20 a10  70 a10-70 a11  71 a11-71 a12  80 a12-80 a13  95 a13-95 A31  3 A31-3 D列D2には=A2&"-" &B2と入れて出したもの。

macco-macco
質問者

補足

ありがとうございます。 マクロを組みたいのですが、やり方が判りません。 どこかで勉強できるサイトなどがあればうれしいです。 今は月曜までにとある支店のデータだけを抽出して提出しなければならなかったため、皆様の回答を参考にデータを抽出してみようと思いますが、 あと300以上の支店および、今後も同様な作業を行うことを考えるとマクロ作業が学べれば幸いです。 再度、質問させていいただくこともあるかもしれませんがその節はよろしくお願いいたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 今仮に、Sheet4のA列を作業列として使用して、"Sheet1の行にあるデータ"の中で、Sheet2の表にも「同じ商品名と商品コードの組み合わせ」があるものだけを抽出して、Sheet3に表示させるものとします。  まず、Sheet4のA2セルに次の関数を入力して下さい。 =IF(OR(INDEX(Sheet1!$A:$A,ROW())="",INDEX(Sheet1!$B:$B,ROW())=""),"",IF(COUNTIFS(Sheet2!$A:$A,INDEX(Sheet1!$A:$A,ROW()),Sheet2!$B:$B,INDEX(Sheet1!$B:$B,ROW())),COUNTIF(Sheet1!$A:$A,"<"&INDEX(Sheet1!$A:$A,ROW()))+COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()-1),INDEX(Sheet1!$A:$A,ROW())),""))  次に、Sheet4のA2セルをコピーして、同シートのA3以下に貼り付けて下さい。  次に、Sheet3のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet4!$A:$A),"",INDEX(Sheet1!$A:A,MATCH(SMALL(Sheet4!$A:$A,ROWS($2:2)),Sheet4!$A:$A,0),COLUMNS($A:A)))  次に、Sheet3のA2セルをコピーして、同じ行のA2セルよりも右側にあるセルに、必要な列数分だけ貼り付けて下さい。  次に、Sheet3の2行目をコピーして、同シートの4行目以下に貼り付けて下さい。  以上です。

macco-macco
質問者

お礼

ありがとうございます。 どういった仕組みになっているのか今現在は理解できていませんが、取り急ぎ月曜までにデータの抽出を行いたいので頑張って作業してみます。 また、再度質問させていただくかもしれませんがよろしくお願いいたします。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 関数でないとダメなのですか? A列B列が合致するという事ですが、商品コードだけでも判定出来るのですよね? どちらのシートの表で合致する行だけを表示するのですか? シート1なら、 セルA1から表が有るなら、そこを選択して、リボンのデータタブのフィルタで 詳細設定をクリックし、リスト範囲が表全体になっているはずなので、 検索条件範囲にシート2のB1からB列の最終行までを指定して、OKすればいいです。

macco-macco
質問者

お礼

ありがとうございました。

macco-macco
質問者

補足

ありがとうございます。 商品名にも商品コードも同一のものがあるため、二つでワンセットで検索したいのでフィルタだけで絞りこめなかったもので。

関連するQ&A

  • Excel 複数の項目合致するデータを抽出したい

    是非、よろしくお願いいたします。 以下の状況です。 sheet1には A、B、C、Dという4列があります。データは1000行くらいです。 sheet2には A、B、C、Eという4列があります。データは2000行くらいです。 この状況で、sheet1のD列の右に新しい列を作り、 「sheet1の(例えば)A1、B1、C1と合致する行のsheet2のE列データ」を、 sheet2のABC列範囲を検索して抽出したいのです。 項目が一つであればvlookup関数でできるものを「複数項目に合致」のため上手くいきません。 この3列のデータを結合して一つにしてみましたが、結合後のデータが16桁以上のため末尾が「0」になってしまい、正確に検索できません。 何か上記を可能にする方法はないでしょうか? よろしくお願いいたします。

  • マクロでVLOOKUPを使用した複数シートのデータを一覧シートへ

    VLOOKUP関数を使用してシートを跨いでデータを一覧へもってくることができないようなので、 マクロを使用して以下のような作業をしたいです。 【Sheet1】:データベース(1)    A列  B列 1行 0001  あ 2行 0003  う 【Sheet2】:データベース(2)    A列  B列 1行 0002  い 2行 0004  え 3行 0005  お というデータから 【Sheet3】:一覧    A列  B列 1行 0001  あ 2行 0002  い 3行 0003  う 4行 0004  え 5行 0005  お を作成したい。 データベース(1)(2)は各々で全て手入力をし、 一覧のA列は予め入力しておき、B列の情報だけを一覧シートにもってくるという内容です。 (実際はセル数もシート数ももっと多いです) Application.WorksheetFunction.VLookup()を使うのかな? とは過去の質問から、なんとなく想像はつくのですが 素人なもので、例文を見てもよくわかりません・・・。 ご教授いただけると大変助かります。 よろしくお願い致します。

  • EXCEL VBAで行う複数の検索条件に合致する行の個数のカウント方法について

    すいません EXCEL VBAで教えていただきたいことがあります。    A列  B列 1行:野菜  秋物 2行:果物  秋物 3行:穀物  夏物 4行:野菜  夏物 5行:野菜  春物 6行:穀物 秋物 7行:果物  夏物 8行:野菜  秋物 ・・・以下300行まで続く というデータがあるとして、A列が「野菜」、B列が「秋物」に合致する 行の合計個数をカウントするのはどうしたらよろしいんでしょうか。 関数だとデータベース関数を使えば何とかできそうな感じなのですが VBAだと、どうもいいアイデアが浮かびません。よろしくお願いいたします。

  • 複数のエクセルシートのデータで条件に合致するものの合計をしたいのですが

    こんにちは! エクセルで苦戦していますのでどなたかお助けください。 シート1のA列(数値)についてシート2のA列(数値)でシート1のA列に合致するものでシート2のB列の表示(IF貼り付け分)が"正"であればシート3のA列(数値)に合致するものでシート3のB列の数値(SUMIF貼り付け分)をシート1のB列に表示する、ということをやりたいのですが。エクセル初心者で苦戦中です。よろしくお願いいたします。 シート1    シート2     シート3 A  B    A  B     A  B 1       1  正     1  10 2       2        2  20 3       3  正     3  30

  • OpenofficeCalcでのシート振り分け

    open office.Calc(Mac)にて商品の在庫表を制作しており、 全商品をリスト化したsheet1、 販売済なものをリスト化したsheet2、 販売がまだなものをリスト化したsheet3 を制作したいと考えております。 ひとつの商品につき1行を使用しており、 列Aに販売済の物には「済」、販売がまだのものには「未」の文字を入れ、 列Aに「済」と入っている行はsheet2、 列Aに「未」と入っている行はsheet3へ自動で参照するようにしたいと思っております。 (「済」は「1」、未は「2」など、数字などでも構いません。振り分けられれば問題御座いません。) 恥ずかしながら関数などの知識はほぼ御座いません、 こういったものを作成することは可能でしょうか。 また、これをExcelで制作する場合も同様に可能でしょうか。 ご教授頂きたく、お願い申し上げます。

  • エクセル 2枚のシートの違いを抽出したい

    目を通していただきありがとうございます。 エクセルは全く詳しくないため、質問させていただきます。 sheet1とsheet2に各2000行ほどの表があります。 sheet1 A列(商品) B列(産地) C列(定価) D列(特価) E列(数量)  みかん    愛媛     100      80       500  みかん    静岡     120      85       400  オレンジ  アメリカ     150      90       100   sheet2 A列(商品) B列(産地) C列(定価) D列(特価) E列(数量)  みかん    愛媛     100      80       300  オレンジ  アメリカ     150     100       100  いちご     福岡     300     150       100  みかん    静岡     120      70       400 それぞれ「1行目のみかん」はA~D列まで同じ値で、E列のみの違いですので、 抽出の必要はありません。 sheet2の3行目のいちごはsheet1にはありませんので、これも抽出の必要はありません。 sheet1の2行目とsheet2の4行目のみかん、 sheet1の3行目とsheet2の2行目のオレンジ、はD列(特価)の違いがあります。 この<D列のみ違いがある>ものを行単位でsheet3に抽出したいのですが、 何か良い方法(関数等)がありましたら、教えていただけないでしょうか? なお、表題に「エクセル」と書きましたが、実際はKingsoftのSpreadsheets 2012を使用しています。 基本的な関数でしたらそのまま使えるようですので、エクセルとして書かせていただきました。 よろしくお願いいたします。     

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • 左文字が合致したらセルに入力

    シートAのB列に数字を記入しておりその左セルにシートBの左文字と合致した文字をExcel関数を遣って入力できたのですが同じ左文字4、6番は入できず空白欄に埋め込みたいのですがどなたかExcel関数の解る方よろしくお願いします。

  • 3つのシートから適合する項目を抽出したい

    エクセル関数にて何かいい方法があればお教えください。 シート名"商品名A"、シート名"商品名B"シート名"商品名C"と3つのシートがあります。 それぞれのシートにはA列からW列まで統一した項目が入っているのですが、 商品Aを購入した顧客が商品Bや商品Cを購入した場合で、今まではそれぞれの商品の顧客番号を基準にVlookupでAとBとCを照らし合わせ、 A/B/C、A/B、A/C、B/C、Aのみ、Bのみ、Cのみの購入と分けて更に、担当IDをCOUNTIFを使って集計していました。 現状だと何回も同じ作業を繰り返していてとても面倒なんです。 もっと効率の良い関数式はありますでしょうか? 最終的には別のシートの列にそれぞれの商品購入項目(A/B/C、A/B・・・)を、行に営業IDを入れて集計をしたいと思っております。 またはマクロを組んだ方が良いのでしょうか?マクロはまだ初心者で余り自信が無いのですが。。。 どなたかお知恵を拝借頂けないでしょうか。よろしくお願いいたします。

  • データの抽出

    再びエクセルの質問をします。 エクセルでデータベースを作っています。 データベースの合計金額を別シート(日報シート)に反映させたいのですがどんな関数を使えばいいのか分かりません。 データベースシートのB5~B204までには「現場名」が入力されていて、C5~AJ5までは費目別に合計金額が入力されています。C3~AJ3には費目(運搬費・施工図費・工事管理費など)が入力されています。 日報シートのA1~A26には費目が入力されていて、別シート(予算シート)のA1に現場名が入力されたら日報シートのB列に費目別に合計金額を反映させる関数を入力したいのですが・・・なにか良い関数がありましたらよろしくおねがいします。分かりづらい文章ですいません;;

専門家に質問してみよう