重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセル2010での表作成についての質問です。

 Sheet1に日毎に売れた商品の個数を入力し、合計の売上を出し月毎に管理しています。
この日毎のデータ売上個数を元に、
売上日報となるSheet2に日付を入力し、その日に売れた物の商品名、価格が表示されるよう、
関数を使って参照・抽出したく思います。

毎日商品が売れるわけではないので、何か売れた時だけ、その日の日報を作成し印刷したいのです。
 また、商品の数は約100種類、沢山売れる可能性も少ないので、
今ご質問させて頂いているSheet2に表示される売れた商品項目欄は40とし、
それ以上になった場合は売れた物を別日に回す形で対応したいと思っています。
 
 各セルは次のようになっています

〇月毎の売上管理表(Sheet1)
 
 日付 J2:AN2 (日付を入力し、日のみの表示形式にしています。)
商品名 D4:D68
 金額 E4:E68
 個数 J4:AN68

〇売上日報 (Sheet2)

 月の入力欄 D2
 日の入力欄 F2
 D2,F2から参照された商品名の表示欄 B15:B54
 D2,F2から参照された商品名の表示欄 J15:J54

質問は以上です。お力添え下さい。よろしくお願いいたします。

「エクセルでの質問です。売上管理表から、日」の質問画像

A 回答 (1件)

こんにちは



要領としての回答になりますが・・・
「日付指定された列の値で、0ではない行のタイトル列(=商品名)を詰めて抽出したい」
という意味と解釈しました。

添付図は簡略化したモデル的なものですが、セル範囲や位置が異なるだけで、構造的には同じだと想像します。(「質問文の添付図が見えないので、勝手な想像ですが…)
チェックの対象日が可変と思いますので、それをK1セルに入力するものとします。
(添付図の日付表示部分は全てシリアル値です)
抽出は、
 > D2,F2から参照された商品名の表示欄 B15:B54
 > D2,F2から参照された商品名の表示欄 J15:J54
とのことなので、表示位置は変わっても、内容は同じ「商品名」決め打ちで良いので、商品名をJ列に抽出する例にしてあります。
添付図では日付指定(=K1セル)に2/3を指定し、それに対応する2/3の列(=D列)を縦に見て、値が0より大きな行のA列(=商品名)をJ列に抽出しています。

抽出に作業列を用いる方法と用いない方法を以下に紹介しておきます。
(多分)前者の方がわかりやすいので、比較的容易に応用ができるのではないでしょうか?

◇方法1
添付図ではH列に作業列を設定しています。
(例として示すためなので、もっと右側でも非表示列でも別シートの列でもかまいません)
対象日(k1セル)に該当する列を検索して、その列の値の有無をチェックします。
添付図では、H2セルに
 =IF(OFFSET(A2,0,MATCH($K$1,$B$1:$F$1,0))>0,COUNT($H$1:H1)+1,"")
の式を入れ下方にフィルコピーしています。
この結果、対象列で空欄(or 0)でない行に、上から順に連番が振られます。

あとは作業列の値を1から順に検索して、その商品名(A列)を示せばよいので、
J4セルに
 =IFERROR(INDEX(A:A,MATCH(ROW(A1),H:H,0)),"")
の式を設定し、下方にフィルコピーすれば、添付図のようになります。
K1セルの日付を変えれば、それに応じた日の結果が表示されます。

◇方法2
同様の計算を、中間結果を作業列に表示することなく行う方法で、考え方はほぼ同様ですが、関数の配列内で計算を終了させてしまうものです。
日付を指定するセルは同様にK1セルと仮定します。
抽出するセル(J2セル)に、
=IFERROR(INDEX(A:A,SMALL(IF(OFFSET($A$2:$A$100,0,MATCH($K$1,$B$1:$F$1,0))>0,ROW($A$2:$A$100)),ROW(A1))),"")
の式を入力し、Ctrl+Shift+Enterで確定します。(←必須です)
確定後、下方にフィルコピーします。
「エクセルでの質問です。売上管理表から、日」の回答画像1
    • good
    • 0
この回答へのお礼

ベストアンサー、お礼が遅くなってしまい申し訳ありません。
また分かりやすくご回答いただき大変助かりました。
ありがとうございました!!

お礼日時:2019/01/28 14:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!