- ベストアンサー
エクセルの貼り付け方
山田太郎 18才 172cm 中村花子 20才 160cm のように例えば3行ごとにひとまとめのデータをクリップボードにコピーしてあるものを A B C 1 山田太郎 18才 172cm 2 中村花子 20才 160cm のようなデータになるよう貼り付けたいのですが、簡単にする方法はないものでしょうか。(これは例で、ひとまとめが3行とは限りません) また、逆にこのようなエクセルシートから最初のようにA1 B1 C1 A2 B2 B3の順に各データが改行で連続しているものに戻す方法も知りたいのです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例えば、Sheet1に 山田太郎 18才 172cm 中村花子 20才 160cm ・・・ Sheet2のA1に =OFFSET(Sheet1!$A$1,(ROW()-1)*3+COLUMN()-1,0) 右へ3つコピィ、下へコピィ Sheet3のA1に =OFFSET(Sheet2!$A$1,INT(ROW()/3),MOD(ROW()-1,3)) 下へコピィしてみてください。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>ごとにひとまとめのデータをクリップボードにコピーしてあるものを ・・・ と複雑にクリップボードの質問しているが、コピーする前のデータがシートのセルにあるでしょう。 そこからデータを組み替えれば仕舞いではないですか。 ーー 別シート(Sheet2)にデータ構成を変えて作りたいなら Sheet2にA1に来るのはSheet1の何合目のデータが来るべきか、計算する。関数を入れたセルの行は、関数ROW()で取れる。 A1は1 B1は2、C1は3行 A2は4、B2は5、c2は6 ・・ これは学校でやったすうれつに近い考えで (row()-1)*3+1、で(row()-1)*3+2,(row()-1)*3+3 で取れる。 これを関数で実現するのは、INDEX関数を使う。 例データ Sheet1のA列 1 2 3 4 5 6 7 Sheet2の A1 =INDEX(Sheet1!$A$1:$A$1000,(ROW()-1)*3+1,1) B1 =INDEX(Sheet1!$A$1:$A$1000,(ROW()-1)*3+2,1) C1 =INDEX(Sheet1!$A$1:$A$1000,(ROW()-1)*3+3,1) と入れてA1:C1の式を下方向に式を複写。 結果 1 2 3 4 5 6 7 0 ーーー なおコピー貼り付けではこんな器用なことは出来ない。 VBAなら考え方はもっと簡単だが。
補足
そういう質問にしても良かったですね。実はあるconfigファイルからコピーしたデータだったので、引きずられて、そういう質問になってしまいました。 ところで、既に#2さんの回答をいただいていてそちらの方が作業が楽(1つ数式を入れて、残りはそのコピーだけ)のように思いますが、imogasiさんの方が良いという点はあるのでしょうか。とくに1組のデータの数が多い(横方向が多い)場合は大変だと思うのですが。
コピー・貼り付けでは無理です。いったんそのままで貼り付けて、下のような式を入力し、名前のあるところにコピーしていく。 その後、全体をコピー・形式を選択して貼り付け・値ではりつけ、余分な行を削除。 A B C 山田太郎 =A2 =A3 18才 172cm 中村花子 =A5 =A6 20才 160cm
お礼
ありがとうございました。#2の方のアイディアより簡単ですね。でも、データの数だけ貼り付ける必要がありますね。何千行もある私のデータの場合には#2の方のやり方が向いているように感じます。データが少ない場合は、Kozirou54さんの方法が簡単でいいですね。
- umach
- ベストアンサー率35% (600/1691)
補足
早速のご回答ありがとうございました。お教えくださった方法は行と列を入れ替える方法ですね。そうでなく a b c d e f を a b c d e f のように貼り付ける方法が知りたいのです。列はいくつにするかは指定する必要があると思います。上の例では3です。2だと a b c d e f のようにすることになります。
お礼
ありがとうございました。コンパクトですっきりしていますね。やっぱりこんな風にするしかないんですね。 ところで、Sheet3では最後のデータが欠落します。つまり2名のデータで試すと、160cmが0になってしまいます。