- 締切済み
excelで複数列にまたがる値を一列に並び変える方法
多分基本的な操作で済むとは思うのですが、調べてもよく解らなかったので質問させて頂きます。 excelの表を、 100 400 700 1000 200 500 800 1100 300 600 900 1200 の様になっているのを、 100 200 300 400 500 ... の様に、一列に並べかえたいです。 毎回コピーペーストでやっていますが、100列近くになると流石にしんどいので……。 マクロや関数などの知識はありません。もしそういう知識が必要でしたら、学習用のサイトなども併せてご紹介いただきたいです。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>マクロや関数などの知識はありません。 質問するには、関数の最小限の知識が必要で、それらを勉強してから、この公の質問コーナーを利用すべきだ。 回答を出されて、理解する力や質問者の実際データにあわせて、修正する力などあるのかな。 式は別として、内容は小学校高学年(難関中学受験者レベルなら考えかたは理解・導出できるだろう)にクイズでやらせては、と思う内容。そんな点をどう考えたら良いか、まず考えたのかな。 エクセルの関数の面では中級の課題で、難しいうちかも知れない。 ーーー 下記(1)(2)で考え方を説明してみる。 (1)完成結果のN行目には元のデータの何行目が来るか。 元データは、1行に4列だから、4で割った商で良さそうだと判るだろう。 しかし1を4で割ると商は0だが実際は1行目。+1すれば良いようだ。しかし4の場合商は1で+1すると2になってしまう。 それで1つ、ずらすために、現在行番号数よりー1した数で考える。 これで 元データ -1したデータを、4で割った商に+1 1 1 2 1 3 1 4 1 5 2 ・・ となる。 (2)次にどの列からとってくるべきか? 4で割った余りと関係しそうだ。4で割った余りは 1 1 2 2 3 3 4 0 5 1 とうまく行かない。元の値からー1して 元の値 -1 4で割った余り 1 0 0 2 1 1 3 2 2 4 3 3 5 4 0 6 5 1 これで上記最右に+1すれば良いらしいと判る。 ーー ここからがエクセル関数の出番。 自身のセルの行番号はROW()で取れる。()内は引数で、ROW関数には引数なし。 割り算の商はINT(・・) ・・・は引数。 割り算の余りはMOD(・・) それと、セル範囲(=元データ)のn行目、m行目のデータを採ってくるのは=INDEX(範囲,n,m) これでやっと道具立てがそろう。 同じシートの空き列に出す、で我慢するとして、 F列に式 =INDEX($A$1:$D$100,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1) を入れて下方向に式を複写 結果 100 400 700 1000 200 500 800 1100 300 ・・・ のようになる。
- 135ok
- ベストアンサー率34% (26/75)
No.2です。 まったく違う回答をしてしまいました。 次の式に変更ください。 =INDEX($A$1:$D$3,MOD(ROW(A1)-1,3)+1,INT((ROW(A1)-1)/3)+1)
- 135ok
- ベストアンサー率34% (26/75)
A1からD3にデータがあるとして =INDEX($A$1:$D$3,INT((ROW(A1)-1)/4)+1,MOD(ROW(A1)-1,4)+1) *下にコピー
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えばお示しの表がシート1のA1セルからD3セルに入っているとして、シート2のA列にそれを表示させるとしたら次の式をA1セルに入力して下方にオートフィルドラッグすればよいでしょう。 =IF(ROW(A1)>COUNT(Sheet1!A:D),"",INDEX(Sheet1!$A:$D,MOD(ROW(A1)-1,3)+1,MOD(ROUNDUP(ROW(A1)/3,0)-1,4)+1))