その他項目多数が有ってそれらをどの様に取り扱って行くかわ別の問題としてここでは説明します。
シート1ではA1セルからD1セルまでに項目名の売上月から原価が、各データは2行目から下方にあるとします。
ところで検索のための条件ですがシート2でそれらの条件を入力します。
シート2のA1セルには販売月ー開始の項目名を入れB1セルに2010/4のように入力します。
A2セルには販売月ー終了と項目名を入れB2セルに2010/4のように入力します。
A3セルには商品名1と入力し、B3セルには魚などと入力します。
A4セルには商品名2と入力し、B4セルには肉などと入力します。
A5セルには販売価格と入力し、B5セルではリストの形で1000、2000,5000、空白などが選べるようにします。
A6セルには原価と入力し、B6セルではリストの形で500,1000、空白が選べるようにします。
そこでこれらの条件を受けてシート1では作業列を設けシート1の例えばJ2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(AND(A2>=Sheet2!B$1,A2<=Sheet2!B$2),IF(AND(Sheet2!B$5<>"",Sheet2!B$6<>""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),C2=Sheet2!B$5,D2=Sheet2!B$6),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5<>"",Sheet2!B$6=""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),C2=Sheet2!B$5),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5="",Sheet2!B$6<>""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),D2=Sheet2!B$6),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5="",Sheet2!B$6=""),IF(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),A2*10000+COUNTIF(A$2:A2,A2),""),"")))),"")
このほかにシート1のK2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(K$1:K1)+1,INDEX(K$1:K1,MATCH(B2,B$1:B1,0))))
シート1のL2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(K2="","",A2*10000+K2)
そこでシート2の条件B1からB6のデータを満足する抽出のデータをシート2の9行目から下方に表示させるとしてシート2のA8セルには売上月、B8セルには商品名、C8セルには販売価格、D8セルには原価(円)と項目名を入力し、A9セルには次の式を入力した後でD9セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(ROW(A1)>COUNT(Sheet1!$J:$J),"",IF(INDEX(Sheet1!$A:$I,MATCH(SMALL(Sheet1!$J:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1))=0,"",INDEX(Sheet1!$A:$I,MATCH(SMALL(Sheet1!$J:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1))))
なお、A9セルから下方のセルを選択して右クリックし、「セルの書式設定」から「表示形式」の「ユーザー定義」で yyyy/m と入力します。
なお、シート3を作成するために必要な作業列としてシート2のJ9セルには次の式を入力して下方にオートフィルドラッグします。
=A9&B9&C9
シート3は定型フォームでA1セルに売上月、B1セルに商品名、C1セルに数量、D1セルに原価計の項目名を入力します。
A2セルには次の式を入力したのちにB2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(ROW(A1)>COUNT(Sheet1!$L:$L),"",INDEX(Sheet1!$A:$C,MATCH(SMALL(Sheet1!$L:$L,ROW(A1)),Sheet1!$L:$L,0),COLUMN(A1)))
C列およびD列にデータを入力するために作業列としてシート3のJ2セルには次の式を入力して下方にオートフィルドラッグします。
=A2&B2&C2
その後にC2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(J2="","",IF(AND(COUNTIF(J$2:J2,J2)=1,COUNTIF(Sheet2!$J:$J,J2)>0),COUNTIF(Sheet2!$J:$J,J2),""))
D2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(D2="","",SUMIF(Sheet2!J$9:J$10000,J2,Sheet2!D$9:D$10000))
それぞれのシートで作業列が目障りでしたらその列を選択して右クリックし、「非表示」を選択すればよいでしょう。
お礼
VBで考えているのですが、もし自分で無理な場合は、アドバイスいただいた方法でやろうと思います。とても早くご解答いただきありがとうございます。まだ思案中でございます。