アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の様な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
・    ・  ・
・    ・  ・
・    ・  ・
のようなデータにエクセルで変換したいのですが、どうすれば良いでしょうか。

A 回答 (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列に表示されます。
「エクセル_数式」の回答画像4
    • good
    • 0

ならべかえを行ごとコピーして


何回か繰り返せば出来ます
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/28 17:55

Excelだけでは難しいですな。


vbも駆使すればできるでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/28 17:42

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

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
例が悪くて恐縮ですが、「データを単に並び替えたい」というわけではなく、
質問の趣旨は、以下のものでした。

変換前のデータの各レコードを、ばらしてデータを変換したい。ばらし方は、例にあるように、
「『タイプA、人数4、スコア1000』のレコード 」は、
「『タイプA、人数1、スコア250』のレコード×4」へ
「『タイプC、人数1、スコア500』のレコード 」は、そのまま
「『タイプB、人数2、スコア2000』のレコード 」は、
「『タイプB、人数1、スコア1000』のレコード×2」へ
・・・と(3万回ほど)繰り返しばらして、
変換後のデータを作成したい。

質問に記載の例だと、スコアについて単に並び替えているように見えてしまいますね。
申し訳ございません。

お礼日時:2013/12/28 17:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!