質問: エクセル関数2 シート(1) a b c d 作業列 コード 顧客名 金額 3 300001 a 10,000 3 300002 b 15,000 3 300003 c 20,000 3 300004 d 25,000 3 300005 e 30,000 4 400001 f 35,000 4 400002 g 40,000 4 400003 h 45,000 4 400004 i 50,000 4 400005 j 55,000 シート(2) a b c d e f 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でvlookup関数を使い..シート2の10,000のセルの場合、 vlookup(c$2,sheet1!$a$3,$d$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。
回答: 既回答者は早く質問の意味が判ったようだが、私は苦労した。列などはokwave画面で崩れていることもわかり難い。質問の書き方に実例+説明文の説明文が無いためわかり難いと思う。 私は推定も入ってやや一般化してみた。 ーーー 私の表現なら 「コード」列の30万、40万などの先頭桁が変わるごとに、別場所に、30万、40万などの列を分けて、縦方向にに30万台、40万台だけの明細行の金額を並べたい。 ーー 例データ a列 b列 c列 d列 番号金額300 300001a10,000300 300002b15,000301 300003c20,000302 400001f35,000400 400002g40,000401 400003h45,000402 400004i50,000403 400005j55,000404 500001ー1,000500 510003ー3,000501 510005ー5,000502 530006ー15,000503 550007ー16,000504 570008ー17,000505 590009ー18,000506 590010ー19,000507 590011ー20,000508 元の作業列(a列)は使わず、上記では削除、d列に作業用データを使った。 b列は本質問に関係ないと考慮してない。 d1の300はスタートの値として必要。 上記は例えば30万台が2桁以上の数あってもokのように考えた。 d列d2セルの式は =if(left(a2,1)=left(a1,1),d1+1,left(a2,1)*100) 下方向に式を複写。 結果上記の通り。 便宜上、第21行目からa21:c32 359 10000350001000 15000400003000 20000450005000 5000015000 5500016000 17000 18000 19000 20000 ーーー a21行に=sumproduct(($a2:$a18>(column()+2)*100000)*($a2:$a18<(column()+3)*100000)*1) と入れてc21まで式を複写。結果は上記。 a22に式 =if(row()-21>a$21,"",index($a$2:$c$19,match((column()+2)*100+row()-22,$d$2:$d$19),3)) と入れて、a32まで式を複写、a22:a32の式をc22:c32に複写。 結果 上記の通り。 ーー もし上記で質問の主旨が合っているなら、この質問は関数の問題としてパズル的に難しい部類でしょう。 vbaなどを使えばこんなにごちゃごちゃすることは無い。関数は並べ替え、抜き出しなどは不得手なテーマです。作業列を使うことを許されたが、聡でないとまたぐっと難しくなろう。