確認したいのですが、1行に並べるデータは、元データのL列~AP列にあるデータであり、A列~K列のデータやAQ列以降のデータは並べ替えた後の結果には表示しなくても宜しいのですね?
それと、元データにおいて、得意先と現場が共通の行は全て、R列に入力されている伝票番号が同じ番号となっていて、且つ、伝票番号は必ず数字のみとなっていて、「#29222」とか「A2922」の様に数字以外の文字が含まれているようなものは無い、と考えて宜しいのですね?
それでしたら、以下の様な方法は如何でしょうか。
今仮に、「EXCELに書き出した請求書データ」がSheet1上にあり、Sheet1の1行目は、「日付」、「得意先」、「担当番号」、「売上金額」、「得意先名」、「TEL」等々の各項目の名称が入力されていて、実際のデータは2行目以下に入力されているものとします。
又、並べ替えた結果をSheet2のA列~HI列に表示するものとします。
まず、適当な未使用のシート(ここでは仮にSheet3とします)のA2セルに次の関数を入力して下さい。
=IF(INDEX(Sheet1!$R:$R,ROW())="","",INDEX(Sheet1!$R:$R,ROW())&"#"&COUNTIF(Sheet1!$R$1:INDEX(Sheet1!$R:$R,ROW()),INDEX(Sheet1!$R:$R,ROW())))
次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に(元データの行数を上回るのに十分な行数となるまで)貼り付けて下さい。
次に、Sheet2のG1セルに「伝票番号」等のなんらかの文字列を入力して下さい。
次に、Sheet2のG2セルに次の関数を入力して下さい。
=IF(OR($G1="",COUNT(Sheet1!$R:$R)=0),"",IF(COUNTIF($G$1:$G1,MAX(Sheet1!$R:$R)),"",IF(ROWS($2:2)=1,MIN(Sheet1!$R:$R),SMALL(Sheet1!$R:$R,RANK($G1,Sheet1!$R:$R,1 )+COUNTIF(Sheet1!$R:$R,$G1)))))
次に、Sheet2のA2セルに次の関数を入力して下さい。
=IF(COUNTIF(Sheet3!$A:$A,$G2&"#"&INT((COLUMN()-COLUMN($A$1))/COLUMNS(Sheet1!$L:$AP))+1),INDEX(Sheet1!$L:$AP,MATCH($G2&"#"&INT((COLUMN()-COLUMN($A$1))/COLUMNS(Sheet1!$L:$AP))+1,Sheet3!$A:$A,0),MOD(COLUMN()-COLUMN($A$1),COLUMNS(Sheet1!$L:$AP))+1),"")
次に、Sheet2のA2セルをコピーして、Sheet2のB2~F2の範囲とSheet2のH2~HI2の範囲に貼り付けて下さい。
次に、Sheet2のA2~HI2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
これで、得意先と現場が共通なデータ毎に(実際は伝票番号が共通なデータ毎に)、1行ずつに並べ替えた表が、Sheet2に自動的に表示されます。
お礼
あっ、お礼の書く欄があったのですね。。。。。 初めて利用させてもらって、本当に助かりました。ありがとうございました。
補足
早くのご回答、本当にありがとうございます!!N列が一致するものを1行にまとめているとのヒントも頂き、とても役立ちました。実は、本来のEXCELがA列からデータがありますので、素人なのに「L」の所を「A」に変えさせて頂き、E列の伝票番号でくくると必ず物件ごとになる事が分かりましたので、「N」の所を「E」に変えさせて頂きました。それでもちゃんと物件ごとに1列にする事が出来ました。 ただ、素人が手を出してしまったので空白行が削除されませんでしたが、物件ごとに1行にする事が目標でしたので、すごく嬉しいです! 関数やマクロをいとも簡単にできるtom04様は、すごいと思いました。 何も分からないのに会社にやれと言われ、悩んでいたので色々助けて頂き、本当に本当に感謝しています。ありがとうございました。