- ベストアンサー
エクセルで特殊な表の最大値を求める方法
- 商品名と販売情報が記載された特殊な表において、各商品の一番売れた日とその売り上げ量を求めたいです。
- 表には一万行以上のデータがあり、同じ日に販売された商品の売り上げ量を足す必要があります。
- エクセル初心者なので、どのような方法で問題を解決すればよいか教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
データの量が多い場合には配列数式などは使わずに作業列を作ってでもできるだけ簡単な式を使って作業を進めることです。 元の表はお示しのように商品名で整理されているものとします。 A1セルからC1セルにお示しの項目名が有りデータは2行目から下方に並んでいるとします。 作業列D2セルには次の式を入力します。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(D$1:D1)+1,D1)) 作業列E2セルには次の式を入力します。 =A2&B2 作業列F2セルには次の式を入力します。 =IF(OR(E2="",COUNTIF(E$2:E2,E2)>1),"",D2*10^5+SUMIF(E:E,E2,C:C)) 作業列G2セルには次の式を入力します。 =IF(F2="","",IF(MAX(INDEX(F:F,MATCH(D2,D:D,0)):INDEX(F:F,MATCH(D2,D:D,0)+COUNTIF(D:D,D2)-1))=F2,F2,"")) そこでD2セルからG2セルを範囲として選択し、その後に右クリックでコピーをします。 名前ボックスにはD2と表示されていますがそこでD2:D10000のように書きかえます。セル範囲が選択状態になりますので右クリックで「貼り付けをします。これで上の式が10000行までコピーされ貼り付けられることになります。 その後にお求めの表ですが例えばI1セルに商品名、J1セルに1日最高売上数と文字列を入力します。 I2セルには次の式を入力します。 =IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0))) J2セルには次の式を入力します。 =IF(I2="","",MOD(SMALL(G:G,ROW(A1)),100000)) 最後にI2セルとJ2セルを選択してから右下隅のフィルハンドルを下方にドラッグします。 お求めの表が完成します。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
無理をすれば関数でも出来なくはありませんが, >実際には一万行くらいはあります というシチュエーションでは,関数で試みるのは全く現実的ではありません。 推奨手順: ABC列を選んでピボットテーブルレポートを作成する(添付図参照) 商品「あ」の最大値は =MAX(B:B) 商品「い」の最大値は =MAX(C:C) のように,それぞれ得られる。 #ご利用のエクセルのバージョンが不明なので,「ピボットテーブルレポートの作り方」の具体的な手順は省略します。 Excel2003までをご利用ならデータメニューから,またExcel2007以降をご利用なら挿入タブから作成します。 なお,Excel2007以降をご利用なら, 1.データタブの「重複の削除」を使い,「A列商品,B列日付」の一意のリストを作成する 2.SUMIFS関数を使って「商品,日付」の中間集計表を作成する 3.ピボットテーブルレポートなどを使い,最大値を抽出する といったアプローチもあります。 #といった具合にご利用のエクセルのバージョンに応じて,出来ることや具体的な操作の段取りが変わります。 ご質問に当たっては,ご利用のソフト名は当然として,ご利用のソフトのバージョンまでしっかり明記して投稿するように憶えておいてください。