dポイントプレゼントキャンペーン実施中!

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

宜しくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

hotosysさん、
回答ありがとうございます。
他の作業用シートにコピーしても、値がおかしくなりました。
それで、2番目の方法(元データに数式などがあって、値がおかしくなる場合)で試しても正しく動作しませんでした。

重なる範囲のペーストの使用をあきらめます。
ご教授いただき大変ありがとうございました。

お礼日時:2009/08/10 01:01

selectionは「アクティブ ウィンドウで現在選択されているオブジェクト」なので、バックグランドではどうでしょうか。


と言う事で、こんなのではどうでしょうか。
Sheets("DATA").Range("A3:W26").Copy
Sheets("DATA").Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    • good
    • 0

1.確かに回答者No1さんの言われているとおり、Rangeに¥をつける必要はないと思いますが・・


2.あと、コピーする場所と貼り付ける場所がかぶるのですがいいのでしょうか?

上記二点が主な原因で処理が出来ないと思います。
質問どおりに答えを出すことができない為、貼り付けRange("A27")すると、下記のようになります。

Sub test1()
Sheets("DATA").Select
Range("A3:w26").Copy
Range("A27").PasteSpecial Paste:=xlPasteValues, Transpose:=True
End Sub
    • good
    • 0
この回答へのお礼

van111さん、ご回答ありがとうございます。
1.RANGEの\は必要ありませんでした。ご指摘ありがとうございます。
2.コピーする側と貼り付ける場所を、かぶらせてコピーする必要がありました。
つまり時間が経過と共にA3の行が下にさがって行く必要がありました。
コピーする際に被っていても、フォアグランドでは、コピーできてバックグランドでできないのが不自然でした。
ご回答ありがとうございます。いろいろ試してみます。

お礼日時:2009/08/09 01:29

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/ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
¥マークですが、別のテキストエディタにコピーしたときについてしまったもので、無視してください。混乱させてもうしわけありません。

3行目(A3からW3)から26行目(A24からW26)までを4行目から27行目までにコピーを数秒おきに繰り返し行う必要がありました。

imogasiのコードの中の
Range("A10").Selectを
Range("A4").Selectにした場合、フォアグランドでは正しく動作しますが、バックグランドでは1行しかコピーできませんでした。

もう少しいろいろ、試してみたいと思います。
ご回答ありがとうございました。

お礼日時:2009/08/09 01:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!