- ベストアンサー
指定した月の売上データを取り出す方法
- Excel2003のSheet1には、商品データと売上データがあります。売上データには日付が入っており、指定した月のデータを取り出したい場合、関数を使用することができます。
- 売上データの項目は商品データと同じであり、売上日、商品名、数量などが含まれています。具体的には、A1に指定した月を入力すると、売上データの該当する月のデータが表示されます。
- この処理はピボットテーブルやマクロでも行うことができますが、関数を使用することで簡単に実現できます。Excel関数の一つであるVLOOKUP関数を使用することで、指定した月のデータを取り出すことができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
tom04さんの表を参考にさせていただいて、作業列案です。 ただし、売り上げデータの売上日は昇順に並んでいるとします A2セルに =COUNTIF(H2:H11,">="&DATE(2010,B1,1))-COUNTIF(H2:H11,">="&DATE(2010,B1+1,1)) 該当するデータ数を算出する A4セルに =IF(A2=0,"",IF(H2>=DATE(2010,B1,0),1,1+MATCH(DATE(2010,B1,0),H2:H11))) 表における何行目にあたるかを検索する A5セルに =IF(COUNT($A$4:A4)>=$A$2,"",A4+1) 下へオートフィル。該当個数に応じ+1 B4セルに =IF($A4="","",INDEX(G$2:G$11,$A4)) 右へ下へオートフィル。 オートフィルタオプションで2010/6/1 以上 AND 2010/6/30 以下でもいいような
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
長々と質問を書かなくても。良くある抜き出し問題で、抜き出し条件が月指定であるだけです。 私の過去回答したものは。Googleで「imogasi方式」で照会すれば出てきます。数も多いし、他の回答者の別の回答も載ってますので参考になるでしょう。#1のような回答パターンのも。 私の方法はわかりやすいように作業列を使います。 例データ Sheet1 A1:B11 A1は月の数を指定用セル 6 2010/5/1 a 2010/5/13 b 2010/5/25 c 2010/6/6 a 1 2010/6/18 d 2 2010/6/30 f 3 2010/7/12 w 2010/7/24 e 2010/8/5 a 2010/8/17 b C2に式 =IF(MONTH(A2)=$A$1,MAX($C$1:C1)+1,"")を入れて下方向に式を複写 結果上記C列 Sheet2に行って Sheet2のA2セルに =INDEX(Sheet1!$A$1:$B$11,MATCH(ROW()-1,Sheet1!$C$1:$C$11,0),COLUMN()) と入れて、右方向に式を複写 A2:B2の式を縦方向に式複写 結果 A列は日付書式にすること 2010/6/6 a 2010/6/18 d 2010/6/30 f #N/A #N/A #N/Aを出さないためにはIF関数でROW()-1がSheet1のC列のMAXを超えたときは、空白を返す 式を前部にかぶせると良い。 操作のフィルタ、VBAピヴォットなどでも出来る。 ーーー 参考 ピボットでは変則的なやり方だが 例データ 月列はMonth(B2)の関数でだしたもの 月 日付 氏名 属性 5 2010/5/1 a x 5 2010/5/13 b y 5 2010/5/25 c w 6 2010/6/6 a e 6 2010/6/18 d r 6 2010/6/30 f t 7 2010/7/12 w y 7 2010/7/24 e u 8 2010/8/5 a i 8 2010/8/17 b t レイアウトで 行ーー>月をD&D データーー>属性 データの個数 / 属性 一旦下記の表になる 月 合計 5 3 6 3 7 2 8 2 総計 10 この月のセルへ日付をD&D 合計が出てしまうので合計行の1つを選択して、右クリックー表示しない この付き日付のセルへ氏名をD&D 合計が出てしまうので右クリックー表示しない この氏名のセルへ属性をD&D 合計が出てしまうので右クリックー表示しない 其れで データの個数 / 属性 月 日付 氏名 属性 合計 5 2010/5/1 a x 1 2010/5/13 b y 1 2010/5/25 c w 1 6 2010/6/6 a e 1 2010/6/18 d r 1 2010/6/30 f t 1 7 2010/7/12 w y 1 2010/7/24 e u 1 8 2010/8/5 a i 1 2010/8/17 b t 1 総計 10 月の列の▼で5月以外のチェックをはずしたりすると(択ぶと)5月だけ(5月と6月だけ)など表示が出来る。
お礼
ご連絡が遅くなりまして申し訳ございません。 imogasi方式を調べて、勉強してみます。 アドバイスありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外していたらごめんなさい。 元データの配置が判らないので勝手に↓の画像のような感じで表を作ってみました。 参照元データは F~I列の2行目以降に配置しています。(1行目は見出しです) そして、日付はシリアル値で入っているものとします。 A4セルに =IF($A$1="","",IF(SUMPRODUCT((MONTH($G$2:$G$1000)=$A$1)*($G$2:$G$1000<>""))<ROW(A1),"",INDEX(F$2:F$1000,SMALL(IF(MONTH($G$2:$G$1000)=$A$1,ROW($A$1:$A$999)),ROW(A1))))) これは配列数式になってしまいますので、この画面から数式をコピー&ペーストしただけではエラーになると思います。 貼り付け後、F2キーを押す、または貼り付けセルをダブルクリック、または数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると画像のような感じになりますが、 日付列はシリアル値が表示されてしまいますので、オートフィルでコピー後にセルの表示形式を「日付」にしています。 これでA1セルに表示したい月の数値を入力すればそのデータが表示されるはずです。 尚、数式は元データの1000行目まで対応できるようにしていますが、 データ量によって範囲指定の領域はアレンジしてみてください。 以上、長々と書きましたが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m
お礼
ご連絡が遅くなりまして申し訳ございません。 tom04さんがアドバイスしてくださったとおりの事が したかったのです。こういう計算式になる事を知りました。 それにしても、さっと長い計算式が考えられるtom04さんが すごいです。アドバイスありがとうございました。
お礼
ご連絡が遅くなりまして申し訳ございません。 見覚えのある関数がいくつもあり、関数初心者でも、理解出来ました。 勇気を出して、質問してよかったです。アドバイスありがとうございます。