• 締切済み

MATCH関数 INDEX関数について教えてくださ

シート1には1日ごとの売上が入ってる年間の集計表が縦に数年分あります 2011年    1月        2月       …    りんご みかん    りんご  みかん 1日 100   110   1日 200   210              2日 100   110   2日 200   210              3日 100   110   3日 200   210                     月計 3000   3300     6000   6300 2012年    1月        2月         …   りんご みかん    りんご  みかん 1日 300   310   1日 400   410              2日 300   310   2日 400   410              3日 300   310   3日 400   410  月計 9000   9300     12000  12300 シート2には年単位での集計が縦にあります。 2011年    りんご みかん 1月 3000  3300 2月 6000  6300 3月 2012年    りんご  みかん 1月 9000  9300 2月 12000 12300  3月 シート1の月の合計をシート2の月単位に集計に反映させたくINDEX Match関数を試みたのですが上手く行きません… Excel初心者です。どなたか力添えになっていただけると助かります。 説明文がわかりにくかもしれませんが、どうぞよろしくお願いいたします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

非常に複雑な関数式となってしまいますので作業行を作って対応します。 シート1ではA1セルに2011年などの文字が、A2セルに1月の文字が、A4セルから下方には1日から31日までの文字がA34セルまでに入力されており、A36セルに月計の文字が入力されているとします。 B3セルにはりんご、C3セルにはみかん、などの文字列が横に入力され、その後に例えばG2セルに2月の文字列、H3セルから横にはりんごなどの文字列が入力されているとします。G4セルから下方には1日から日付が入力されているとします。 他の月についても上記と同様にします。 36行目に作業用の行を1行挿入します。月計はA37セルに移動します。 A36セルには次の式を入力して右横方向にドラッグコピーします。 =IF(COLUMN(A1)=1,OFFSET(A36,-35,0)&OFFSET(A36,-34,0),IF(OFFSET(A36,-33,0)<>"",LEFT(OFFSET(A36,0,-1),FIND("月",OFFSET(A36,0,-1)))&OFFSET(A36,-33,0),IF(OFFSET(A36,-34,0)<>"",OFFSET($A36,-35,0)&OFFSET(A36,-34,0),""))) 2012年のデータについても2011年と同じ行数を使ってデータが入力されているとします。例えばA41セルから下方に2012年のデータが入力されているとします。 月計の前に1行挿入して、その行のA列のセル(例えばA80)にはA36の式をコピーして貼り付けます。そのまま例えばA80セルが選択されている状態で「ホーム」タブの「検索と選択」から「置換」をクリックします。 検索する文字列にA36と入力して置換後の文字列にはA80と入力して「置換」をクリックします。 この操作で式が変わりますので、その式を右横方向にドラッグコピーします。 上のような作業行の挿入と式のコピー、式の変換の操作などを他の年度についても行います。 お望みの表ですがシート2に作成するとして例えばA1セルには2011年、B2セルにはみかんなど横方向の列に果物名を入力します。 A3セルから下方には1月からA14セルの12月までを入力します。 B3セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OFFSET(B3,-ROW(A1),0)="","",IFERROR(INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0)+1,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&OFFSET(B3,0,-COLUMN(A1))&OFFSET(B3,-ROW(A1),0),INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),1):INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),250),0)),"")) なお、エクセル2007より古いバージョンのエクセルでは次の式を入力します。 =IF(OFFSET(B3,-ROW(A1),0)="","",IF(ISERROR(INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0)+1,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&OFFSET(B3,0,-COLUMN(A1))&OFFSET(B3,-ROW(A1),0),INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),1):INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),250),0))),"",INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0)+1,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&OFFSET(B3,0,-COLUMN(A1))&OFFSET(B3,-ROW(A1),0),INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),1):INDEX(Sheet1!$A:$XX,MATCH(OFFSET(B3,-ROW(A2),-COLUMN(A1))&"1月",Sheet1!$A:$A,0),250),0)))) 2012年についても表を作るのでしたら例えばA16セルに2012年と入力して2011年の場合と同様に果物名や1月から12月までを配置します。その後にB3セルをコピーして例えばB18セルに貼り付け、その式の中のB3を置換操作によってB18に変え、右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

Rega1606
質問者

お礼

KURUMITO様 非常にお手間な回答ありがとうございますm(_ _)m 数式を入れてやってみます。

Rega1606
質問者

補足

KURUMITO様 Excelは2003を使用しています。 新たにブックを作って教えて頂いた関数を入れてみました。 B3には商品名[りんご]C3には[みかん]を入れ B4からB34までに1の数字を入れてC4からC34には2を入れてA36には上記のシート1の関数を入れて右横にコピーしました。 A36には2011年1月と参照されB36 C36には#WALUE!のエラーが出てしまします 何度も関数は確認したので入れ間違いはないと思うのですが何か間違って入力しているのでしょうか シート2の関数をコピーして貼り付けしたのですがうまくいきません。 合わせてご教授お願いいたします

回答No.3

項目の見出し等、シートの構成の条件: Sheet1: 1年度はブランク含めて35行(最初の合計値は行34の位置) 年(A列)と月(B列~)は同じ行1(以下年度でサイクリック)にする 品名は次の行に Sheet2: 1年度はブランク含めて15行(合計値はシート内でSUM) 年(行1)と月は同じA列にする 品名は行1(年と同じ)に Sheet2の数式: B2: =INDEX(OFFSET(Sheet1!$B$1:$AJ$1,INT((ROW()-1)/15)*35+33,0),MATCH($A2,Sheet1!$B$1:$AJ$1,0)) C2: =INDEX(OFFSET(Sheet1!$B$1:$AJ$1,INT((ROW()-1)/15)*35+33,0),MATCH($A2,Sheet1!$B$1:$AJ$1,0)+1) B2,C2まとめて下にコピー 次の年分についてもコピーできる

Rega1606
質問者

お礼

JazzCorp様 ありがとうございます。 教えて頂いた関数を入れてやってみます。   

  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.2

参考にしてください

参考URL:
http://pc.nikkeibp.co.jp/article/knowhow/20110628/1032668/
  • prius770c
  • ベストアンサー率35% (91/258)
回答No.1

どのような運用なのかわかりませんが、単純にシート2の表はシート1の該当するセルを参照させるだけでよいような気がしますが・・・。 【参考となるページ】 http://www.excel-jiten.net/formula/ref_other_sheets.html これで、別シートにある値を参照させる事は出来ます。 参照セルが移動してしまうなどの条件で保守上の問題がない限り無理にmatchやindex関数を 用いなくてもよいのではないでしょうか?

Rega1606
質問者

補足

prius770cさん 早速の回答ありがとうございます。説明文が不足していたと思いますので付け加えさせてもらいます。シート1の商品名ですが30品目程あります。 参照ですがシート1の商品の数があり一年分となるとちょと大変かなと… シート2の1月分にシート1の1月 月計を参照させた後にコピーを下にすると参照先の一つ下のセルを参照してしまいます。

関連するQ&A

  • エクセルの関数について

    エクセルの関数について 【Sheet1】 B列・・・J列 売上日  商品名 9/12   りんご 9/12   みかん 9/12   りんご 9/14   りんご という売上表があったとして、Sheet2にJ列の項目ごとに売上日を表示できる数式を教えていただきたいです。こんな↓イメージです。 【Sheet2】 A列・・B列・・・C列・・・・ 商品名 売上日1 売上日2・・・売上日31 りんご 9/12  9/14 【Sheet1】の売上表は、売上が立つごとに入力していく表なので、 一日に同じ商品名(J列)が何度もでてきますが、同一売上日は、1回だけの表示にしたいです。 売上表は月でしめるので、毎日売れたとして、売上日は最大31日です。 【Sheet1】の売上表は、パソコンの苦手なパートの方が作成しているので、いじりたくありません。 当方あまりパソコンが得意ではないため、説明が分かりにくくて申し訳ないのですが、よろしくお願いします。

  • ExcelでIndexとMatch関数が使いこなせない

    すみません、カテゴリを間違えてまして、再度投稿いたします。 有給管理表をExcelで作成しています。 シート1に社員のデータ表を入力してあり、 シート2には有給が発生する社員へ有給の残日数や 付与日に関するお知らせの案内状をB5サイズで作っています。 シート1のデータを拾って、シート2の案内状へ反映させる際、 付与日や残日数などはVlookupで参照できるのですが、 社員番号は退職した社員がいるため番号が飛んでいて うまくできません。 IndexやMatch関数を使えばなんとかなりそうだと思い やってみましたが、VALUE!が表示されてしまいます。 どなたかうまくいく関数を教えて頂けますでしょうか? シート1のデータ例  A列   B列   C列   D列    E列 社員番号  氏名  入社日  付与日   付与日数 100001   くま  2007/4/1  2007/10/1  10 100003   たぬき 2007/5/1  2007/11/1  10 100005   うさぎ 2007/5/10 2007/5/10  10  100010   きつね 2007/6/1  2007/12/1  10 シート2(例)ページ1    B列   C列 B1 社員番号  100001←ここに式を入れたい B2 社員氏名  くま  さん(vlookupでC1を拾ってくる) B4 あなたの有給付与日は  2007/10/1 です。付与日数は 10 日です・・・・・・。 シート2 ページ2 B30 社員番号  100003 (←ページ1の次の該当者を拾いたい) B31 社員氏名  たぬき  さん B33 あなたの有給付与日は 2007/11/1 です。 付与日数は 10 日です・・・・・・。 このような感じです。社員番号が飛んでいても下の行を拾っていくような関数はありますでしょうか?(Index、Match関数以外でも結構です)

  • Excelindex関数

    よろししくお願いします。sしheet1に 店名 月 品名 単価 A-1 1月 柿 100 A-1 1月 りんご 200 A-1 1月 みかん 300 A-1 2月 りんご 400 A-1 3月 バナナ 500 A-2 1月 みかん 600 A-2 2月 りんご 700 A-2 3月 バナナ 800 A-3 1月 りんご 900 A-3 2月 りんご 1000 A-3 3月 りんご 1100 というsheetがあり、sheet2には りんご 1月 2月 3 A-1 A-2 A-3 というsheetがあります。 そこで、単を引っ張ってきたいのですが、色々と勉強して index関数とmatch関数を使いたいのです が、サイト見る限り式が書いてありますが、関数を入力するボックスの入力が少しわかりにくいので、お手数ですが教えて頂く時、これから私が試したこと書きますので訂正お願いします。 (1)sheet2のB2にIFA2=¨¨、¨¨ (2)IF関数の偽の場合の所にIFError関数 の値にinx関数を入力して、調べたい場所のD行を絶対参照で (3)indexの行番号にmatch関数を入力して (4)検査値をsheet2の$A2&B$1&$A1$と入力して (5)検査範囲はsheet1の$A:$A&$B:$B&$C:$Cと入力して (6)照合の所は0と入力して (7)IFErrorのエラーの場合の値も0にしてやってオートフィルしたのですが全て0になります。 index関数とIF関数とIFError関数を開くと計算結果200と書いてあるのに、表示されません。今困ってるので詳しい方お願いします

  • HLOOKUP関数で連続したセルの検索について

    エクセル2000を使ってます。 HLOOKUPについて教えて下さい。 例えば、SHEET.1に     リンゴ みかん  1月1日  1   1   1月1日  2   3   1月2日  3   1   1月3日  4   2    ・  ・  ・ 12月31日 1   2 とした場合で、 SHEET.2のB1のセルに「みかん」と入力した場合、SHEET.1のみかんの列を全部複写するようにしたいのです。 とりあえずSHEET.2のB2のセルに =HLOOKUP(B1,'Sheet1'$2:$5000,2,0)と入力し、 B3のセルに =HLOOKUP(B1,'Sheet1'$2:$5000,3,0)と返す行を一つずつ増やしてたのですが、行があまりにも多くて時間が掛かるので簡単に出来る方法があれば教えて下さい。 また、他にもっと簡単な関数とかがあれば教えて下さい。 よろしくお願いします。

  • 条件を満たす場合のみ計算、満たさない場合はそのまま

    Excel2010です。 Sheet2にデータを貼り付けSheet1で集計を行うファイルを作成しています。 Sheet1の集計表は 項目|6/1|6/2|6/3|6/4|6/5|・・・ 林檎|001|000|000|000|003|・・・ 蜜柑|000|001|000|001|000|・・・ 巨峰|000|001|000|000|000|・・・ Sheet2のデータは 2011/06/01|林檎| 2011/06/02|蜜柑| 2011/06/02|巨峰| 2011/06/04|蜜柑| 2011/06/05|林檎| 2011/06/05|林檎| 2011/06/05|林檎| 上記のような状態になっています。 集計自体は関数を入れれば簡単にできるのですが、 今回やりたいのは、 Sheet2にある日付だけ再計算し、 Sheet2に無い日付に関しては値をそのままにしておく。 という関数またはVBAです。 理由はいくつかあるのですが、 ■全データを貼り付けると重いのでできるだけ1日(当日)分にしたい ■当日分にしてしまうと集計し忘れた日の処理が大変 の2点が主な理由です。 これができれば集計が必要な日のデータだけ吐き出してSheet2に貼り付ければ 必要な集計が行える形になります。 何か良い方法はありますでしょうか。よろしくお願いいたします。

  • Excelで困ってます。

    会社で売上表を作って集計をしていますが、どうもうまくいきません。 どなたかお教えいただけないでしょうか? 売上表はこんな感じです。 A列に売上げ商品の一覧があります。 (例えば、りんご・みかん・メロン・りんご・桃・・・みたいな感じで100個ぐらい) もちろん同じ商品の重複もございます。 別シートに特定の商品リストがあります。 (例えば、りんご・みかんみたいな) 集計としましては、その日の売上商品の中で、別シートのリスト(上記の場合はりんごとみかん)と同じ商品だけを抽出し、その商品の隣の列(たとえばこの場合はB列)に「○」と表示させたいのです。 特に合計数を集計したいわけではありません。ただ○をつけたいだけです。 B1に試した関数は =IF(A1=シート2!$A$1:$A$2,"○","") です。 (この場合、シート2のA1からA2に特定商品のリストがあるとします) この関数だとエラーが出てしまいます。 マクロなどを使わずに、関数で解決できないでしょうか? よろしくお願いいたします。

  • エクセルの関数を教えてください。

    エクセルの関数について教えてください。 条件を満たした数を合計させる関数を教えてください。 たとえば果物屋さんで下記のような売上個数の表があったとします。        A       B     C     D 01行  4月01日  青森産  りんご   1個 02行  4月01日  秋田産  りんご   5個 03行  4月01日  新潟産  りんご   4個 04行  4月01日  青森産  みかん   3個 05行  4月01日  秋田産  レモン   4個 06行  4月01日  青森産  レモン   2個 07行  4月02日  青森産  レモン   1個 08行  4月02日  青森産  みかん   8個 09行  4月02日  秋田産  みかん   7個 10行  4月02日  秋田産  りんご   3個       ・       ・       ・       ・ 31行  4月31日  秋田産  りんご   2個 といった一ヶ月の売り上げ個数リストがあったとして 教えてほしい関数は、上記の中から ”青森産” の ”りんご” が 1日~31日 の間に 売れた数の合計を求める関数が知りたいのですがそんな関数はありますか? =SUMIF(C1:C31,"りんご",D1:D31)として『りんご』のみの合計の出し方はわかるのですが 『りんご』に『青森産』などといった複数の条件をつけた際の合計の方法がわかりません。 また、フィルター機能で青森産、りんごと絞り込んだ後での合計ではなく あくまで、関数で求める方法を教えていただけませんでしょうか?

  • エクセル関数についての質問です

    エクセル初心者です。 会社に送られてくる注文書を社内用に表に書き直したいのですが、どのよおううにすればいいのでしょうか。 たとえば、注文書に 1月1日  りんご  3個              1月2日  みかん 2個              1月3日  バナナ 5本 と書いてあるのを          1月1日  1月2日  1月3日     りんご   3     みかん         2     バナナ               5 というような表にしたいのですが、 できますでしょうか。     

  • エクセルの関数について

    エクセルの関数について困っております。 関数については、詳しくありません。お力をおかし下さい。 添付にある図の、sheet1 のリンゴ ミカン ブドウ を sheet2 の別のセルに、リンゴ.ミカン.ブドウと入力した際、その下に記入してある11111111111111 の数字を、同じように反映する為には、sheet2 のリンゴ等の文字の下には、どの様な関数を入れればよいですか? 関数でそこまで出来るのでしょうか? よろしくお願いします。  

  • エクセルの集計について質問です。

    いつもお世話になっております。 集計を使用しないで関数やマクロを使用して計算することは可能でしょうか? こういったリストを 名称 1日 2日 3日… りんご 1  0  3 りんご 0  0  1 みかん 1  1  4 なし   0  0  2 みかん 1  0  0 こんな感じに集計したいのです。 名称 1日 2日 3日… りんご 1  0   4 みかん 2  1   4 なし   0  0   2 順番とかは特に拘っておりません。 宜しくお願い致します。

専門家に質問してみよう