• 締切済み

エクセル_数式

以下の様な3万行ほどあるデータ タイプ 人数 スコア A    4  1000 C    1  500 B    2  2000 ・    ・  ・ ・    ・  ・ ・    ・  ・ を、 タイプ 人数 スコア A    1  250 A    1  250 A    1  250 A    1  250 C    1  500 B    1  1000 B    1  1000 ・    ・  ・ ・    ・  ・ ・    ・  ・ のようなデータにエクセルで変換したいのですが、どうすれば良いでしょうか。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 今仮に、元データの表の中で「タイプ」と入力されているセルがSheet1のA1セルであり、Sheet3のA列を作業列として使用して、Sheet2のA列~C列に変換後の表を表示させるものとします。  まず、Sheet3のA1セルに数値の0を入力して下さい。  次に、Sheet3のA2セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,COUNT(A$1:A1),""))  次に、Sheet3のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。  次に、Sheet2のA1セルに次の関数を入力して下さい。 =Sheet1!$A$1  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>SUM(Sheet1!$B:$B),"",IF(COUNTIF(A$1:A1,A1)<SUMIF(Sheet1!$A:$A,A1,Sheet1!$B:$B),A1,INDEX(Sheet1!$A:$A,MATCH(INDEX(Sheet3!$A:$A,MATCH(A1,Sheet1!$A:$A,0))+1,Sheet3!$A:$A))))  次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF($A2="","",1)  次に、Sheet2のC2セルに次の関数を入力して下さい。 =IF($A2="","",SUMIF(Sheet1!$A:$A,$A2,Sheet1!$C:$C)/SUMIF(Sheet1!$A:$A,$A2,Sheet1!$B:$B))  次に、Sheet2のA2~C2の範囲をコピーして、Sheet2のA列~C列の3行目以下に貼り付けて下さい。  これで、変換後の表がSheet2のA列~C列に表示されます。

  • dduster
  • ベストアンサー率13% (33/253)
回答No.3

ならべかえを行ごとコピーして 何回か繰り返せば出来ます

aaadddfff
質問者

お礼

回答ありがとうございます。 例が悪くて恐縮ですが、「データを単に並び替えたい」わけではありません。 No1の方へのお礼で、質問の趣旨を説明させていただきましたので、そちらを参照していただければと思います。

回答No.2

Excelだけでは難しいですな。 vbも駆使すればできるでしょう。

aaadddfff
質問者

お礼

ありがとうございます。 プログラム処理に頼らずに、Excelで頑張りたかったのですが、難しいのですね。

回答No.1

並べ替え機能でできますよ。

aaadddfff
質問者

お礼

回答ありがとうございます。 例が悪くて恐縮ですが、「データを単に並び替えたい」というわけではなく、 質問の趣旨は、以下のものでした。 変換前のデータの各レコードを、ばらしてデータを変換したい。ばらし方は、例にあるように、 「『タイプA、人数4、スコア1000』のレコード 」は、 「『タイプA、人数1、スコア250』のレコード×4」へ 「『タイプC、人数1、スコア500』のレコード 」は、そのまま 「『タイプB、人数2、スコア2000』のレコード 」は、 「『タイプB、人数1、スコア1000』のレコード×2」へ ・・・と(3万回ほど)繰り返しばらして、 変換後のデータを作成したい。 質問に記載の例だと、スコアについて単に並び替えているように見えてしまいますね。 申し訳ございません。

関連するQ&A