- ベストアンサー
エクセルの行挿入とコピー
よろしくお願いいたします。 A B C D 1 123 123 123 123 2 444 555 666 777 3 890 890 890 890 4 000 000 000 000 上のようなエクセルの表(Excel2003)があるとします。 この表の1行目と2行目の間に、1行目のデータを9行コピーするための方法を教えてください。 実行後は1~10行目は全く同じデータ、11~20行目に2行目のデータがあり、同じように末尾行まで繰り返すということです。 自分でも色々と検討してみましたが、なかなかうまくいきません。 行挿入だけであればできるのですが、コピーまで同時に実行する必要があります。 元の表は3000行ほどあるため、とてもじゃありませんが手動では実行できませんので、マクロで末尾行(Excel2003の65000行)まで自動実行する方法を教えていただきたいのです。 すみませんがよろしくお願いいたします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
コピーした行を9行挿入と言う動作を、下から上へ向かって行うと簡単です。 Sub Sample() nLast = Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 For i = nLast To 1 Step -1 '最終行から1行目までループ Rows(i & ":" & i).Copy '1行コピー Rows((i + 1) & ":" & (i + 9)).Insert '9行追加貼り付け Next i End Sub なお、上記マクロはあくまでサンプルですので、変数宣言やエラー処理は行っていません。
その他の回答 (8)
- KURUMITO
- ベストアンサー率42% (1835/4283)
解答No8です。 表示形式はおそらく列によって決まっているのだと思います。列を選択した上で右クリックして「セルの書式設定」の「表示形式」で日付や時刻など統一すればできますね。コピー操作で表示形式までコピーさせることは特別な場合は別として通常は行っておりません。
- KURUMITO
- ベストアンサー率42% (1835/4283)
解答No2です。 私も試験してみましたが全く問題がありません。シート1の1行につきシート2では10行にコピーされて表示されます。 この方法はマクロなどで行をコピーしては行に間に貼り付けていく操作よりははるかに効率的です。 操作を確実に行っているでしょうか シート2ではA1セルに式を入力してからA1セルの右下隅の■部分にカーソルを置き左クリックしてポインタの形が+になったところでD1セルまでオードラッグします。これでA1セルに入力した式がD1セルまで一部変形した形で貼り付けられます。 その後にA1セルからD1セルを範囲として選択してから「コピー」します。 その後に名前ボックスではA1と表示されていることでしょうが、A1:D4000と書き換えて、Enterキーを押します。A1セルからD40000までのセルが選択状態になりますので、最後にCtrlキーを押しながらVキーを押します。 最後の操作はコピーした式を貼り付ける操作に該当します。 これで、10行毎にシート1の1行がコピーされたと同じ状態の表が完成します。 =IF(INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)/10,0),1)=0,"",INDEX(Sheet1!$A:$D,ROUNDUP(ROW(A1)/10,0),COLUMN(A1))) その後にA1セルからD1セルを範囲として選択し「コピー」します。 名前ボックスではA1のみが表示されていますがA1:D40000などと入力し、Enterキーを押します。指定した範囲が選択状態になりますので、Ctrlキーを押しながらVキーを押します。これで40000行までに一気に式を貼り付けたことになります。お望みの表が完成します。 まっさらのシートを使って試験してみてはどうでしょう。
補足
再度の回答ありがとうございます。お手間かけます。 失礼しました。元データが3000行(A~G列)なので、範囲指定を「A1:G3000」としていました。範囲指定すべきは完成させる表の大きさ(3万行、A1:G30000)だったのですね。納得です。 これでコピーの操作そのものは出来たのですが、表には標準形式の数値以外に、文字や日付、表示形式指定のセルが散在します。 それらのセルが「#REF!」と表示されたり、日付が小数点表示に変わったりします。 確かにマクロよりは動作は速いのですが、マクロでは表示形式等も同時にコピーされるため、後の修正が非常に楽です。 教えていただいた式の関数を変更することで、数字・文字の分別なく表示形式通りにコピーすることも可能なのでしょうか?
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No2です。 努力をして回答しているのです。感覚で返事を書かれては困りますね。 一度提案の通りにやってみることです。 提案が間違っているとは思いません。
補足
すみません、折角の回答ですが感覚論ではなく実際に実行してみた結果です。 (この回答をいただいて、念のため再度実際に行ってもみました) 結果、先の補足通り、シート2にはシート1の1行目の内容が3000行コピーされたのみです。 いただいた回答に対するご努力を否定するものではありません。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでも出来るが、そんなこと手数をかけないで下記でどうですか。 テスト済み。 例データをA,B、C列とする X Y Z 2 3 ・・ (1)第1行A-C列をコピーして (2)A2:C11を範囲指定(A2をクリックし、SHIFTキーを押してC11をクリック) (3)右クリックー「コピーしたセルの挿入」 を選ぶ。 「下方向にシフト」-OK 何かした拍子に(3)が出ない時は、もう一度CTRL+Cをやってください。
補足
すみません、実際に行ってみましたが、「1行目の内容を10行コピー挿入する」ことはできました。 希望しているのは、「1行目と2行目の間に1行目の内容を9行分コピー挿入、2行目と3行目の間に2行目の内容を9行分コピー挿入・・・と延々繰り返し、3000行の元データを3万行にする(1~10行目が元データの1行目、11~20行目が元データの2行目・・・というように、同じ行を9行ずつ差し込むという操作)」ですので、おっしゃる方法では各行ごとにこの操作を3000回繰り返さなければならないことになってしまいます。 私の理解不足なのでしょうか?それともエクセルのバージョンによるもの・・・?
- 有田 賢治(@ARIKEN43)
- ベストアンサー率50% (563/1116)
hama-tさん 今晩は! >行挿入だけであればできるのですが、コピーまで同時に実行する必要 >があります。元の表は3000行ほどあるため、とてもじゃありませんが >手動では実行できませんので、マクロで末尾行(Excel2003の65000 >行)まで自動実行する方法を教えていただきたいのです。 挿入とコピーのやり方も判らず、マクロを教えて下さい? 単なる丸投げですね。プログラムなんて凡て教えて呉れるサイトの回答者さんは多分居ませんよ。プログラムを作るのはそれなりの覚悟と知識が必要になります。説明も充分でなく聞けば出来ると思う事が問題ですね。とてもじゃありませんが・・・これは自分の問題でしょう。 ■Excel(エクセル) VBA入門:マクロの自動記録と実行↓ http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_01.html 内容:マクロの自動記録・マクロの実行・フォームのボタンに登録する・ ツールバーに登録する等が図解されていますので参考に。 ■5.11 コピーした行や列の挿入↓ http://www.happy2-island.com/excelsmile/smile03/capter00511.shtml 内容:使用例1/1行をコピーし、別な場所へ挿入する場合→ちなみに、???の部分はRangeやColumnsやRowsやSelectionなど、行や列を表すオブジェクトです。詳しくは、5.1 セルや行列を扱うための基本をどうぞ。 ■5.1 セルや行列を扱うための基本↓ http://www.happy2-island.com/excelsmile/smile03/capter00501.shtml 内容:値を入れたり罫線を引いたり背景色を変えたりコピーしたり貼付けたりなど、セルや行列を扱うときの基本です。 セルを扱う場合はRange.???またはCells.???を使い、列を扱う場合はRange.???またはColumns.???、行を扱う場合はRange.???またはRows.???を使います。 ???の部分はプロパティやメソッドで、プロパティには罫線や背景色や他いろいろ、メソッドにはコピーや貼り付けや他いろいろです。 勉強するには良いサイトですので参考にしてマクロを覚えて自身の身につけて下さい。
- gyouda1114
- ベストアンサー率37% (499/1320)
回答番号:No.1 質問をよく読んでませんでした。 取り消してください。
- KURUMITO
- ベストアンサー率42% (1835/4283)
いっその事シート1にデータがあるとして、シート2に希望の表を作ることでしょう。 シート2では次のようにすればよいでしょう。 A1セルに次の式を入力し、D1セルまでオートフィルドラッグします。 =IF(INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)/10,0),1)=0,"",INDEX(Sheet1!$A:$D,ROUNDUP(ROW(A1)/10,0),COLUMN(A1))) その後にA1セルからD1セルを範囲として選択し「コピー」します。 名前ボックスではA1のみが表示されていますがA1:D40000などと入力し、Enterキーを押します。指定した範囲が選択状態になりますので、Ctrlキーを押しながらVキーを押します。これで40000行までに一気に式を貼り付けたことになります。お望みの表が完成します。
補足
回答ありがとうございます。 これってシート1の1行目の内容を必要行数(3000行)一度に貼り付けするときには有効な手段ですが、質問の主旨は「1行目の内容を1行目と2行目の間に9行分コピー挿入、2行目の内容を元表の2行目と3行目の間(コピー後は11行目~20行目)に9行コピー挿入・・・」と延々繰り返すということです。 完成した表は同じ行が10行ずつ繰り返す3万行のシートになるということですが、回答の内容ではそうならないように思うのですが。 私の質問の仕方がまずかったのでしょうね。
- gyouda1114
- ベストアンサー率37% (499/1320)
行番号1をクリック → 右クリック →コピー 行番号2~10をドラッグして選択 → 右クリック → コピーしたセルの挿入
お礼
回答ありがとうございます。 希望通りの表が作成できました。一発解決で大感激です。 本当に助かりました。