プロが教えるわが家の防犯対策術!

evcel VBA初心者です。
ブック間コピーの方法を探っていて以下の質問にたどり着きNO.2 NO.3の回答を試してみましたが、値のみしかペーストされません。
書式を含めすべてコピペする方法を教えて下さい。
Range("**")を変えればいいというものなのでしょうか。


また、NO2の回答のコードの中で sFindbook の変数はどこで宣言しているのでしょうか。


http://oshiete.goo.ne.jp/qa/5261470.html

A 回答 (3件)

>ここで書かせてもらっていいでしょうか。



いいえ。今のご質問が聞きたいことを全然示せていない事を,ご自分でも理解されたのでしょ?
でしたら,ちゃんとキチンとヤリタイ事を整理して,ご相談を投稿し直してくださいとお話ししたワケです。
ヒトの言うことは聞かずに自分の話ばっかり聞いて聞いてって,どうですか?
こちらは,ちゃんとアナタのご質問に対してキチンと回答していますよ。



再掲:
>「どこ(どのブック)から」「どこへ」コピーしたかったのかよく整理して,
 ↓
>開いてるのはコピー元ブックとペースト先ブックのみ。

マクロは?いったいどこに持たせているのですか?
どっちのブックが「コピー元」で,どっちのブックが「貼り付け先」だと,どうしたらエクセルに(=そのマクロを考える回答者に)判断が付くのですか?

また実は3冊目ブックで「個人用マクロブック」が裏で開いてたりは,絶対にありませんか。

sub macro2()
 dim w as workbook
 for each w in workbooks
 if w.name <> thisworkbook.name and not strconv(w.name, vblowercase) like "personal.*" then
 w.worksheets(1).usedrange.copy destination:=thisworkbook.worksheets(1).range("A1")
 end if
 next
end sub

#必要に応じて「コピー元」と「貼り付け先」ブックをそれぞれ入れ替えて,ヤリタイ事を実現してください。


再掲:
>コピーしたいセル範囲とか,どこに貼り付けたいとか
 ↓
 情報提供がありません。
 ついでに,どのシートからどのシートにコピー貼り付けたいのかの情報も不足でした。

この回答への補足

独り言ですが、
結局セル全体のコピペがわからずw.worksheets(1).以降を以下のコードにするという不細工なものになってしまいました。

  Cells.Select
Selection.Copy
Windows("貼り付け先.xls").Activate
Range("A1").Select
ActiveSheet.Paste

このたびはありがとうございました。
まだまだ勉強が欠かせませんが、頑張ります。

補足日時:2011/07/10 13:18
    • good
    • 0
この回答へのお礼

ありがとうございます。
自分本位になってしまい言うことをきかなかったこと、反省します。
大変失礼しました。


macro2 実行させていただきました。
初めて見る記述もあり驚くばかりです。
こんなに短い構文で可能なんですね。これでいけそうです。
セル高さ・幅を貼り付けはしないですが、何とかします。

ありがとうございました。

お礼日時:2011/07/08 00:54

ご覧になったどちらの回答も「値の転記」をしているので,書式のコピーはしていません。


ふつーにコピーし,貼り付けるマクロを書きます。


とりあえずヤリタイ事:
>ブック間コピーについて

作成例:
Book1.xlsとBook2.xlsが既に開いてある。

sub macro1()
workbooks("Book1.xls").worksheets("Sheet1").range("A1").copy _
 destination:=workbooks("Book2.xls").worksheets("Sheet2").range("A1")
end sub


#あとは応用
勿論実際には,ご覧になった回答で利用されているように
・「どこ(どのブック)から」「どこへ」コピーしたかったのかよく整理して,必要に応じてthisworkbookなどを利用するマクロを工夫する
・コピーしたいセル範囲とか,どこのセルに貼り付けたいのかといった事もよく整理して,あなたの作りたかった「マクロの動作」をよく考えて整理する
など,研究を進めてください。

また新しい「実はこういう事がしたかった」が明らかになってきたら,また別途新しいご相談を投稿してみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ブック間のコピーと申しましたが、質問のurlの質問者さんと同じくデータ元のブック名が変わるのを前提としてブック間のコピーの方法を探しておりましたので質問のurlにある回答が非常に近かったのです。

>実はこういうこと・・・
ここで書かせてもらっていいでしょうか。

開いてるのはコピー元ブックとペースト先ブックのみ。
データ元のブック名が変わってもコピー&ペーストができる。
書式を含めシート全体をすべてコピー&ペーストしたい。

よろしくお願いします。

お礼日時:2011/07/07 19:40

 おはようございます。

今リンク先をぱぱっと読んで試しにコーディングしてみましたので、
もし読み落としがあったらどうもすみません。。 

↓いわゆる
右クリック→「形式を選択して貼りつけ」→「すべて」
は、~.PasteSpecial Paste:=xlAll  を使います。
(時間があまりないので、勝手ながら前のQ&Aのご回答に書き足させていただきます。
その方が続きになるので理解もしやすいと思われますし。。)

Sub Sample()
Dim wbk As Workbook

'自ブック以外なければ終了
If Workbooks.Count = 1 Then
MsgBox ("ブックBなし")
End
End If

'自ブック(ブックA)以外のブックを探す。
sFindbook = ""
For Each wbk In Workbooks '開いているBook分ループを回す
If wbk.Name <> ThisWorkbook.Name Then '自ブック(ブックA)は除外
sFindbook = wbk.Name '自ブック以外のブック名取得
Exit For 'ブックが1つ見つかったらループを抜ける
End If
Next wbk

'Workbooks(sFindbook).Activate '見つけたブックをアクティブに
'発見ブックのアクティブシートの特定セル(D10)の値を自ブックの1シート目の特定セル(E12)にコピー
'ThisWorkbook.Sheets(1).Range("E12") = Workbooks(sFindbook).Sheets(2).Cells(10, 4)
Workbooks(sFindbook).Sheets(2).Cells(10, 4).Copy
ThisWorkbook.Sheets(1).Range("E12").PasteSpecial Paste:=xlAll

End Sub

これ以外のペースト書式については
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv209.html
に綺麗にまとめてくださっているので、よかったら参考にしてみてください。

あと
>どこで宣言しているのでしょうか
についてですが、VBAでは宣言が強制されていませんので、(構文上の)エラーにはなりません。
ただ↓でも書かれているように、(慣れていないと)自分の得たい結果が
得られない事もありますので、メリット・デメリット両面があります。
http://www.google.co.jp/#sclient=psy&hl=ja&sourc …

 VBAの勉強どうぞ頑張ってくださいb
    • good
    • 0
この回答へのお礼

ありがとうございます。

少し質問を間違えておりました。
書式も貼り付けたいと申しましたが、シート全部の値・書式ともに別のブックに貼り付けたいのです。
シートの左上を選択し行・列すべてを選択して別のブックに貼り付けたいのです。

よろしくお願いします。

お礼日時:2011/07/07 19:32

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