• 締切済み

excel 2003 数値の1次元配置を2次元へ

質問します! 下表(1)のように並んでいる数字を,下表(2)のようにするにはどうすればいいですか? 宜しくお願いします!! <表の説明> 表(1)はある生徒の,ある季節の,ある科目のスコアを表すものとします。 A~Cは春,D~Fは夏,G~Iは秋とします。 A,D,Gは英語,B,E,Hは数学,C,F,Iは国語とします。 1,2,3,4,・・・は生徒それぞれ(出席番号とします)を表し,各生徒の春,夏,秋における英語,数学,国語のスコアが表(1)中に記載されています。 例えば,C3は出席番号3番の,春における国語のスコアとなります。 この表(1)を,生徒それぞれについて,春夏秋での英数国のグラフを作りたいのです。 そのために表(2)が必要と考えています。 すなわち,表(2)の「1,2,3」行は出席番号1番のデータを表しており,A列は英語,B列は数学,C列は国語で,1行目は春,2行目は夏,3行目は秋です。 続いて4,5,6行目は出席番号2番のデータ,7,8,9行目は出席番号3番のデータとなります。 例えば,C7は出席番号3番の,春における国語のスコアとなります。 このように,1行でまとめられていたデータを3行ごとに変換したいのです。 コピペで対応できるかもしれませんが,データの数が膨大なので,関数とかオートフィルを使って自動でできる方法を探しています。 <表(1)>   A B C D E F G H I 1  2 3 1 4 5 6 3 2 2 2  4 3 2 2 3 2 1 5 6 3  3 4 6 6 3 2 1 2 3 4     (以下同様) <表(2)>   A B C D E F G H I 1  2 3 1 2  4 5 6 3  3 2 2 4  4 3 2 5  2 3 2 6  1 5 6 7  3 4 6 8  6 3 2 9  1 2 3 10 (以下同様)

みんなの回答

noname#204879
noname#204879
回答No.5

表(1)が Sheet1 にあるとしたとき、表(1)を作成する別シート(例えば Sheet2)の 任意のセル(例えば A1)に次式を入力して、此れを右方に2列(セル C1 まで)ドラッグ&ペーストした後で、その3列1行の範囲(A1:C1)を下方にズズーッとドラッグ&ペーストすればよろしいかと。 =OFFSET(Sheet1!$A$1,(ROW(A1)-1)/3,COLUMN(A1)-1+MOD((ROW(A1)-1)*3,9)) ただし、OFFSET はキハツセイ関数だから使うべきでないと主張する人も散見されますが、私は「使うべきでない」とは思いません。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

OFFSET関数などで行列番号をしている方法は、ROW関数やCOLUMN関数で引数を調整するのが面倒ですね。 このようなケースでは、1周期分の文字列で数式を入力してこのセル範囲をオートフィルして最後に数式化するのが直感的な数式で対応することが可能です。 例えば、一番左上のセルに「#Sheet1!a1」と入力し、右方向に3つ、下方向に3つオートフィルし、それぞれのセルの数式を1行目の2つ目は「#Sheet1!b1」「#Sheet1!c1」、2行目は「#Sheet1!d1」「#Sheet1!f1」」「#Sheet1!g1」3行目は「#Sheet1!h1」」「#Sheet1!i1」」「#Sheet1!j1」と入力し、この9つのセルを下方向にオートフィルコピーします。 最後にCtrl+Hで置換ダイアログを出して、検索する文字列に「#」、置換後の文字列に「=」を入力して「すべて置換」します。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 表(1)をSheet1として、表(2)のSheet2のA1に以下の数式を設定、縦横にコピー =OFFSET(Sheet1!$B$1,INT((ROW(A1)-1)/3),MOD(ROW(A1)-1,3)*3+COLUMN(A1)-1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一例です。 データはA~C列の1行目からあるとします。 表示したいセルに =INDEX($A:$I,INT(ROW(A3)/3),MOD(ROW(A1)-1,3)*3+1+COLUMN(A1)-1) という数式を入れ、右へ3列・そのまま下へオートフィルでコピーではどうでしょうか? 尚、エラー処理していませんのでデータがなくなれば「0」が表示されます。 参考になれば良いのですが・・・m(__)m

  • issei0428
  • ベストアンサー率27% (6/22)
回答No.1

関数でやるのは少し難しいかとおもいます。 マクロを組むか、、、 ほかの方法ではだめでしょうか? 表1をCSVで吐き出して、秀丸(エディタソフト)でひらいて 2,3,1,4,5,6,3,2,2 記録と再生をつかって 2,3,1 4,5,6 3,2,2 にする (→→→→→ Backspace 改行)を記録する そして、再生を繰り返して、出来たファイルを 保存してエクセルで読み込めば表2になっている と思いますが。。。。 ちょっとちから技過ぎでしょうか。 ちなみに秀丸の記録の部分は一行単位ではなく 最初の記録の段階はでは大変ですが、何行か いっぺんに記録したほが再生したときに早く いくと思います。

sakinavir
質問者

お礼

ありがとうございます! ただ,データが5000ほどありますので・・・(^^;

関連するQ&A

専門家に質問してみよう