- 締切済み
エクセル_数式
以下の様な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 ・ ・ ・ ・ ・ ・ ・ ・ ・ のようなデータにエクセルで変換したいのですが、どうすれば良いでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データの表の中で「タイプ」と入力されているセルが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)
ならべかえを行ごとコピーして 何回か繰り返せば出来ます
- Bnbnbnta101
- ベストアンサー率7% (41/516)
Excelだけでは難しいですな。 vbも駆使すればできるでしょう。
お礼
ありがとうございます。 プログラム処理に頼らずに、Excelで頑張りたかったのですが、難しいのですね。
- ekurea123
- ベストアンサー率3% (2/63)
並べ替え機能でできますよ。
お礼
回答ありがとうございます。 例が悪くて恐縮ですが、「データを単に並び替えたい」というわけではなく、 質問の趣旨は、以下のものでした。 変換前のデータの各レコードを、ばらしてデータを変換したい。ばらし方は、例にあるように、 「『タイプA、人数4、スコア1000』のレコード 」は、 「『タイプA、人数1、スコア250』のレコード×4」へ 「『タイプC、人数1、スコア500』のレコード 」は、そのまま 「『タイプB、人数2、スコア2000』のレコード 」は、 「『タイプB、人数1、スコア1000』のレコード×2」へ ・・・と(3万回ほど)繰り返しばらして、 変換後のデータを作成したい。 質問に記載の例だと、スコアについて単に並び替えているように見えてしまいますね。 申し訳ございません。
お礼
回答ありがとうございます。 例が悪くて恐縮ですが、「データを単に並び替えたい」わけではありません。 No1の方へのお礼で、質問の趣旨を説明させていただきましたので、そちらを参照していただければと思います。