EXCEL複数シートでの商品データを振り分けする方法

このQ&Aのポイント
  • エクセル関数を使用して、複数シートを対象に商品名によってデータを振り分けする方法について教えてください。
  • 複数シートに検索対象を広げることができずに困っています。ご助力をお願いします。
  • IF関数を複数使用してもエラーが発生してしまいます。もっと良い方法はありますか?
回答を見る
  • ベストアンサー

EXCEL複数シートでの商品データを振り分けしたい

【目的】エクセル関数を使用して、複数シートを対象に商品名によってデータを振り分けしたいです。 複数シートに検索対象を広げる事が出来ずにとても困っています。お力を貸してください。 過去に商品データの振り分け質問がありましたので、そちらを参考に作成させていただきました。 http://okwave.jp/qa/q7843035.html 上記URLの質問では一つのシートに対し、商品データの振り分けをされる形でしたが、 これを複数シートを対象に商品データの振り分けがしたいのです。 IFを複数使用し、複数シートを指定してもエラーでうまく動きません。 =IF($A3="","",VLOOKUP($A3,Sheet1!$A:$D,MATCH(B$2,Sheet1!$A$1:$D$1,0),FALSE)) &IF($A3="","",VLOOKUP($A3,Sheet2!$A:$D,MATCH(B$2,Sheet2!$A$1:$D$1,0),FALSE)) 何かよい方法はありませんでしょうか? 何卒よろしくお願い致します。m(_ _)m

  • MAS-B
  • お礼率100% (4/4)

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

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

 無理に複数のシート状のデータを直接振り分け様とするのではなく、複数のシート状にあるデータを、一旦、1枚のシート上に纏めてしまってから、その全てのデータが纏められているシートに対して、質問者様が御質問文で挙げておられる過去の質問の方法を適用されれば良い訳です。  今仮に、Sheet1、Sheet2、Sheet3の3枚のシートの各々において、A列には商品名が、B列には商品コードが、C列には金額が、それぞれ入力されていて、それら3枚のシートの何れも1行目には「商品名」等の項目名が入力されていて、実際のデータは2行目以下に並んでいるものとします。  又、B列に入力されている商品コードは、Sheet1~Sheet3を通して同じものが複数の箇所に入力されている事は無い(例えば、Sheet1のB2に入力されている商品コードは、Sheet1のB3以下に同じものが入力されている事が無いのは無論の事、Sheet2やSheet3の中にも同じコードが入力されている事は無い)ものとします。  まず、未使用のシートを1枚用意して、そのシートのシート名を例えば「作業用」(鉤括弧は不要)と設定して下さい。  次に、作業用シートの A1セルに   商品名 B1セルに   商品コード C1セルに   金額 F1セルに   シート名 G1セルに   1 と入力して下さい。  次に、作業用シートのG2セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/COUNTIF(INDIRECT("'"&INDEX($F:$F,ROW())&"'!A:A"),"商品名")),MATCH("*?",INDIRECT("'"&INDEX($F:$F,ROW())&"'!A:A"),-1)-MATCH("商品名",INDIRECT("'"&INDEX($F:$F,ROW())&"'!A:A"),0),"")  次に、作業用シートのE2セルに次の関数を入力して下さい。 =IF((0&$G1)+0>0,SUM($G$1:$G1),"")  次に、作業用シートのE2~G2の範囲をコピーして、同じ列の3行目以下に、元データの枚数文と同じ行数だけ貼り付けて下さい。(将来的に元データのシートの枚数が増える事もあり得る場合には、貼り付ける行をもっと多くしておいても構いません)  次に、作業用シートのH1セルに次の関数を入力して下さい。 =SUM($G:$G)-1  次に、作業用シートのA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>$H$1,"",IF(INDEX(INDIRECT("'"&VLOOKUP(ROWS($2:2),$E:$F,2)&"'!A:C"),MATCH("商品名",INDIRECT("'"&VLOOKUP(ROWS($2:2),$E:$F,2)&"'!A:A"),0)+ROWS($2:2)-LOOKUP(ROWS($2:2),$E:$E)+1,COLUMNS($A:A))="","",INDEX(INDIRECT("'"&VLOOKUP(ROWS($2:2),$E:$F,2)&"'!A:C"),MATCH("商品名",INDIRECT("'"&VLOOKUP(ROWS($2:2),$E:$F,2)&"'!A:A"),0)+ROWS($2:2)-LOOKUP(ROWS($2:2),$E:$E)+1,COLUMNS($A:A))))  次に、作業用シートのA2セルをコピーして、作業用シートのB2~C2の範囲に貼り付けて下さい。  次に、作業用シートのA2~C2の範囲をコピーして、同じ列の3行目以下に(全てのデータを表示させるのに十分な行数になる様に)貼り付けて下さい。  次に、作業用シートの F2セルに   Sheet1 F3セルに   Sheet2 F4セルに   Sheet3 という具合に、元データが入力されている各シートのシート名を入力して下さい。  これで作業用シートのA列~C列に全てのデータが纏めて表示されますから、後は質問者様が参考にしておられる「エクセルで商品を振り分ける方法ありますか?」という質問に対する回答に書かれている方法の、「Sheet1」という箇所を全て(関数の中のものも含めて)「作業用」に置き換えるだけで、商品データの振り分けを行う事が出来る筈です。

MAS-B
質問者

お礼

今回参考にさせていただいた方から再度回答を頂けるとは思ってもいませんでした。 本当にご丁寧にありがとうございます。 やはり考え方の問題なのだということがはっきりとわかりました。 現在既にデータがぎっしりと入っている複数シートの管理表を渡され、既存のデータをさらに 複数カテゴリに分けてほしいとの依頼があり、今回の質問に至りました。 さっそく実行させていただいた結果、しっかりと動作確認と考え方を把握させていただきました。 これだけのサンプル・方法があれば、後は応用してできると思います。 最後に本当にご丁寧にありがとうございました。m(_ _)mm(_ _)mm(_ _)m

関連するQ&A

  • 複数のEXCELファイルより結果検索(VLOOKUP)

    はじめましてご教授お願いいたします。 現在エクセル関数Vlookupを使用しているのですが 外部の複数エクセルファイルよりデータを抽出するには どうすればよろしいのでしょうか? エクセルファイルA,B,C,Dがあるのですが ファイルAには結果表示用のシートがあります B,C,Dにはそれぞれデータが同じように配置されおります。 ファイルAのシート2セルA1に以下のような関数を記述しております =IF(ISBLANK(A2),"",IF(VLOOKUP(A2,Sheet1!$A$2:$K$60000,2,FALSE)=0,"",VLOOKUP(A2,Sheet1!$A$2:$K$60000,2,FALSE))) 上記関数[Sheet1!A2:K60000]の部分に別ファイルB,C,Dの データ(範囲は同じ)も検索できるようにしたいのですが どのような関数で可能なのでしょうか? ご教授よろしくお願いいたします。

  • 2つの条件からシート2に抽出

    シート1 A1は手入力D4手入力、H2は=D2&C2 担当者と週で検索して抽出する式を教えて下さい。何度もすみません。 上手く出来なくて1行しか抽出しないんです。 上記の表から1週目だったら、1週目の担当者のデータをシート2の表に抽出 週2だったら2週目の担当者データを抽出 A1・D1は手入力 A3は=IF(COUNTIF(Sheet1!D$2:D$1000,B$1)=0,"",MATCH($B$1&$D$1,Sheet1!$H$2:$H$1000,0)) 上記の様にシート2に表示したいんです。 細かく教えて下さい。何度やっても1行目のデータしか抽出しないんです。 A3=IF(COUNTIF(Sheet1!D$2:D$1000,B$1)=0,"",MATCH($B$1&$D$1,Sheet1!$H$2:$H$1000,0)) B3=IF($A3="","",IF(VLOOKUP($A3,Sheet1!$A$2:$H$1000,COLUMN(B1),0)="","",VLOOKUP($A3,Sheet1!$A$2:$H$1000,COLUMN(B1),0))) A4の2行目以降1になってしまって同じ物しか出ないんです。 Aの番号の抽出方法の式を教えて下さい。

  • 複数のシートに跨ってVLOOKUPするには?

    複数のシートに跨っているデータをVLOOKUPで参照しようとしています。 1つめのシートには コード番号 シート名 の2つのカラムがあり、コード番号ごとに どのシートを参照すればよいかわかるようになっています。 参照されるほうのシートには コード番号 値 の2つのカラムがあります。 このシートが数十存在しますが、1つのシートにまとめることは出来ません。 1つ目のシート上で、 =VLOOKUP(A1,CONCATENATE(B1,"!A:B"),2,false) などと試してみたのですが、うまくいかないようです。 何か良い方法はないでしょうか。

  • Excel関数 複数シートをまたがって検索する方法

    タイトルの通りなのですが 例えばSheet1とSheet2とSheet3のA列の どこかにある、検索値を Sheet4で検索する方法って ありますか? VLOOKUPで =IF(ISERROR(VLOOKUP(Sheet4!A1,Sheet1!A:A,1,FALSE)),VLOOKUP・・・と、 エラーの場合は、他のSheetを検索という方法なら わかったのですが・・・

  • 関数の中のシート名【複数】を置換を使って置換るには

    タイトルの件、質問します。 下記1の関数があります。 この中にあるシート名を下記2のとおり、置換を使って 書き換えたいと考えています。 実践しましたが、うまくできませんでした。 方法は、手入力以外であれば、置換機能ではなくてもOKです。 ご存知の方、いらっしゃいましたら、宜しくお願いします。 【下記2】 Sheet1 を 1000 に書き変えたい Sheet2 を 2000 に書き変えたい Sheet3 を 3000 に書き変えたい ※1000、2000、3000とは、シートの名前です。 【下記1】 =IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet1!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet1!A:C,2,FALSE)) &IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet2!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet2!A:C,2,FALSE)) &IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet3!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet3!A:C,2,FALSE)) ※本関数は、教えてgoo回答者様に、ご教授いただきました。

  • 2つのSheetの数値を検索したい

    エクセルで2つのSheetのデータの個数を検索させたいのですが、 エラー値は空白にしたいので、 =IF(ISNA(VLOOKUP(B2,Sheet2!$A$2:$B$2607,2,FALSE)),"",VLOOKUP(B2,Sheet2!$A$2:$B$2607,2,FALSE)) という式を作ってうまくいったのですが、 この式に新たに同じsheet1の範囲(A2:B300)を追加したいのですが、 うまくいきません。 このB300はB400、B500というように日々増えていきます。 どのような式にすればいいでしょうか。

  • VLOOKUPのエラーについて

    教えて下さい。 =IF(ISERROR(VLOOKUP($B3,Sheet2!$A$2:$D$35,4,FALSE)),"",VLOOKUP($B3,Sheet2!$A$2:$D$35,4,FALSE))+IF(ISERROR(VLOOKUP($B3,Sheet3!$A$2:$C$50,3,FALSE)),"",VLOOKUP($B3,Sheet3!$A$2:$C$50,3,FALSE)) という数式を使っています。 最初のIF文(Shee2)については有効なのですが、それならと、欲張って他のシートも参照できるように、+の後にIF文(Sheet3)を追加したら#VALUE!が表示されます。 何がいけないのでしょうか?

  • データー表から別のシートに転記

    いつもお世話になります。 WINDOWS7 EXCELL2010 です。 データーを記入したシート「入力」から会社別のシート「請求書」に転記したい。 シート「入力」 1月~12月迄、C /G列を除くA~F列には手入力しています。 C2 =IF(B2="","",VLOOKUP(B2,顧客管理,2,FALSE)) & " " G2 =IF(F2="","",E2*F2) シート「請求書」 月初~月末 の月毎に請求内容を「入力」シートより参照図のように転記したい。 参照図でいうと 10月のみにまとめたい。 この請求書は 例えば A1 に 「0030」と入力すると A1 0030 A2 郵便番号 =" "&IF(A1="","",TEXT(VLOOKUP(A1,顧客管理,4,FALSE),"〒000-0000")) & "" A3 会社名 荒川商店 =" "&IF(A1="","",VLOOKUP(A1,顧客管理,3,FALSE)) & "" 当然のことながら A1 に 0041 と入力すると 「春日南九(株)」の請求書に早変わりし、 D15 E15 F15 G15  10/20 JF 250 4  という具合になればありがたいです。 御指導のほどよろしくお願いします。

  • エクセルのVLOOKUPの複数参照について

    エクセルのVLOOKUPの複数参照について シート2(kokunai)に A列 B列 1000 シャープ 1010 ソニー 3050 パナソニック とあります。 シート3(yunyuu)に A列 B列 2000 IBM 2001 HP とあります。 シート1のC列に打ち込んだ数字を元にD列にメーカー名を表示したいのです。 D列に IF(C1="","",IF(ISERROR(VLOOKUP(C1,kokunai,1,0))="FALSE",VLOOKUP(C1,kokunai,2,0),VLOOKUP(C1,yunyuu,2,0))) と数式を打ちましたが、エラーが帰って来ます。 どうすれば良いでしょうか?

  • エクセル 複数シートの値のみコピーで

    こんにちは いつもお世話になっています。 先日、選択した複数のシートを新しいブックに値だけコピーするマクロをこちらで教えていただきました。(関数が入ったシートなのでタブの右クリックからの新規ブックへのコピーでは関数がコピーされてしまうので) 今回、このマクロで失敗するシートがあったので原因を教えてください。 値だけコピーするマクロは以下です。 Sub 値コピー() Dim WS As Worksheet ActiveWindow.SelectedSheets.Copy For Each WS In ActiveWorkbook.Worksheets With WS.Cells .Copy .PasteSpecial Paste:=xlPasteValues End With Next Application.CutCopyMode = False End Sub 失敗するシートにはつぎの関数があります。 A1セルに=REPLACE(CELL("filename",A1),1,FIND(".xlsx]",CELL("filename",A1))+LEN(".xlsx]")-1,) B3セルに=IF(COUNTIF(Sheet2!$1:$1,$A$1),IF(ROWS($3:3)>COUNTIF(OFFSET(Sheet1!$J:$J,,MATCH($A$1&"クラス",Sheet1!$J$1:$N$1,0)-1),B$2),"",COUNTIFS(OFFSET(Sheet1!$C:$C,,MATCH($A$1,Sheet1!$C$1:$G$1,0)-1),">"&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0)),OFFSET(Sheet1!$J:$J,,MATCH($A$1&"クラス",Sheet1!$J$1:$N$1,0)-1),B$2)+1&"位 "&INDEX(Sheet1!$B:$B,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0))&" "&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0))&"点"),"") 別シートのデータから条件に合うものを引き出す関数です。 これらの関数もおしえていただいたもので、まだ理解できていませんので、説明不十分で申し訳ありません。 これらの関数があるシートではなぜ上記のマクロが失敗するのでしょうか。 もちろん、シートのデータを選択、コピーして新規ブックに値のみコピーはできます。 上記のような関数があるシートでも複数選択シートでの値のみコピーができるマクロを教えていただけないでしょうか。 情報不足がありましたら、教えてください。 よろしくお願いします。 エクセル2007

専門家に質問してみよう