- ベストアンサー
EXCEL VBAで複数行のコピー(バックグランド)
EXCELのVBAで質問します。 複数行をコピーしてPasteを行う方法がわかりません。 フォアグランドでは正しく実行できるのですが、バックグランドで実行した場合は、1行しかPasteできません。 お分かりの方いらっしゃれば教えてください。 コードは以下のとおりです。 Sheets(\"DATA\").Select Range(\"A3:W26\").Select Selection.Copy Range(\"A4\").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です。 PasteSpecialでは重なった範囲はエラーになるようです。 Transpose:=TrueするためにはPasteSpecialしているのだと思うのですが、一度では無理なので作業シートにコピーすれば可能だと思います。 作業シートをSheet3とする場合 Sheets("DATA").Range("A3:W26").Copy Sheets("Sheet3").Range("A3") Sheets("Sheet3").Range("A3:W26").Copy Sheets("DATA").Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 元データに数式などがあって、値がおかしくなる場合 Sheets("DATA").Range("A3:W26").Copy Sheets("Sheet3").Range("A3").PasteSpecial Paste:=xlPasteValues Sheets("Sheet3").Range("A3:W26").Copy Sheets("DATA").Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
その他の回答 (3)
- hotosys
- ベストアンサー率67% (97/143)
selectionは「アクティブ ウィンドウで現在選択されているオブジェクト」なので、バックグランドではどうでしょうか。 と言う事で、こんなのではどうでしょうか。 Sheets("DATA").Range("A3:W26").Copy Sheets("DATA").Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
- van111
- ベストアンサー率14% (1/7)
1.確かに回答者No1さんの言われているとおり、Rangeに¥をつける必要はないと思いますが・・ 2.あと、コピーする場所と貼り付ける場所がかぶるのですがいいのでしょうか? 上記二点が主な原因で処理が出来ないと思います。 質問どおりに答えを出すことができない為、貼り付けRange("A27")すると、下記のようになります。 Sub test1() Sheets("DATA").Select Range("A3:w26").Copy Range("A27").PasteSpecial Paste:=xlPasteValues, Transpose:=True End Sub
お礼
van111さん、ご回答ありがとうございます。 1.RANGEの\は必要ありませんでした。ご指摘ありがとうございます。 2.コピーする側と貼り付ける場所を、かぶらせてコピーする必要がありました。 つまり時間が経過と共にA3の行が下にさがって行く必要がありました。 コピーする際に被っていても、フォアグランドでは、コピーできてバックグランドでできないのが不自然でした。 ご回答ありがとうございます。いろいろ試してみます。
- imogasi
- ベストアンサー率27% (4737/17069)
Sheets(\"DATA\").Select Range(\"A3:W26\").Select Range(\"A4\").Select のような¥をつけた書き方が何を意味するか、小生の勉強不足(?)でわからない。 しかし(質問とはコピー範囲を変えているが。質問においては、実際データと違ってセル範囲などA列第1行よりの簡単な例で説明をすべきと思う、配慮をすべきと思うが) Sub test03() Sheets("Sheet1").Range("A3:D5").Copy Range("A10").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True End Sub で目的は達せられるのではないか。 CopyのDestination:=の代わり(使えないので)にRange("A10").Selectを持ってきたもの。 参考 http://www.happy2-island.com/excelsmile/smile03/capter01106.shtml
お礼
ご回答ありがとうございます。 ¥マークですが、別のテキストエディタにコピーしたときについてしまったもので、無視してください。混乱させてもうしわけありません。 3行目(A3からW3)から26行目(A24からW26)までを4行目から27行目までにコピーを数秒おきに繰り返し行う必要がありました。 imogasiのコードの中の Range("A10").Selectを Range("A4").Selectにした場合、フォアグランドでは正しく動作しますが、バックグランドでは1行しかコピーできませんでした。 もう少しいろいろ、試してみたいと思います。 ご回答ありがとうございました。
お礼
hotosysさん、 回答ありがとうございます。 他の作業用シートにコピーしても、値がおかしくなりました。 それで、2番目の方法(元データに数式などがあって、値がおかしくなる場合)で試しても正しく動作しませんでした。 重なる範囲のペーストの使用をあきらめます。 ご教授いただき大変ありがとうございました。