質問: excelで売上データから請求明細書を作成したい 過去の質問を検索しましたが、解決できなかったので質問させていただきます。 現在excel2007で、お客様との取引を、vbaで作ったフォームに入力するとデータシートに書き込まれるようにしています。 データの内容は、売上日付、得意先、運搬元、運搬先、車種、ナンバー、金額、備考・・・等の計19項目で、それが1レコードとなります。売上明細です。 そこから、得意先名・日付の期間指定でデータを絞り込み、そのデータの何項目かを別シートに作ってある請求明細書の各項目欄に反映させて、それを請求明細として印刷したいのですが・・・ ちょっとした売上ソフトのようになってしまうのですが、こういったことはexcelで可能なのでしょうか?vbaはかじった程度で知識が浅く、可能か不可能かも判断できません。 可能だとしたら、どのような手順を踏めばよいのでしょう、どなたかお知恵を貸していただけないでしょうか、よろしくお願いします。
回答: このケースならvbaで対応するよりも、関数だけで処理するほうが簡単かもしれません。 元データがsheet1で、日付がa列、得意先がb列にあり、請求書シートのa2セルに抽出したい得意先名、b2セルに開始日、c2セルに終了日が入っている場合、条件に該当するc列のデータを抽出したいなら以下の式を入力して、ctrl+shift+enterで確定して配列数式にして、下方向にオートフィルします。 =index(sheet1!c:c,small(if((sheet1!$b$2:$b$1000=$a$2)*(sheet1!$a$2:$a$1000>=$b$2)*(sheet1!$a$2:$a$1000<=$c$2),row($a$2:$a$1000),1000),row(a1))) 上記のl数式では、該当データがないと「0」と表示されますので、この「0」を非表示にするには、excelのオプションで「ゼロ値のセルにゼロを表示する」のチェックを外してください。 なお、抽出する値が文字列の場合は、数式の最後に「&""」を付けることで対応することもできます。