- ベストアンサー
excel VBA ブック間コピーについて
evcel VBA初心者です。 ブック間コピーの方法を探っていて以下の質問にたどり着きNO.2 NO.3の回答を試してみましたが、値のみしかペーストされません。 書式を含めすべてコピペする方法を教えて下さい。 Range("**")を変えればいいというものなのでしょうか。 また、NO2の回答のコードの中で sFindbook の変数はどこで宣言しているのでしょうか。 http://okwave.jp/qa/q5261470.html
- みんなの回答 (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 #必要に応じて「コピー元」と「貼り付け先」ブックをそれぞれ入れ替えて,ヤリタイ事を実現してください。 再掲: >コピーしたいセル範囲とか,どこに貼り付けたいとか ↓ 情報提供がありません。 ついでに,どのシートからどのシートにコピー貼り付けたいのかの情報も不足でした。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
ご覧になったどちらの回答も「値の転記」をしているので,書式のコピーはしていません。 ふつーにコピーし,貼り付けるマクロを書きます。 とりあえずヤリタイ事: >ブック間コピーについて 作成例: 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などを利用するマクロを工夫する ・コピーしたいセル範囲とか,どこのセルに貼り付けたいのかといった事もよく整理して,あなたの作りたかった「マクロの動作」をよく考えて整理する など,研究を進めてください。 また新しい「実はこういう事がしたかった」が明らかになってきたら,また別途新しいご相談を投稿してみて下さい。
お礼
ありがとうございます。 ブック間のコピーと申しましたが、質問のurlの質問者さんと同じくデータ元のブック名が変わるのを前提としてブック間のコピーの方法を探しておりましたので質問のurlにある回答が非常に近かったのです。 >実はこういうこと・・・ ここで書かせてもらっていいでしょうか。 開いてるのはコピー元ブックとペースト先ブックのみ。 データ元のブック名が変わってもコピー&ペーストができる。 書式を含めシート全体をすべてコピー&ペーストしたい。 よろしくお願いします。
- camputer
- ベストアンサー率64% (22/34)
おはようございます。今リンク先をぱぱっと読んで試しにコーディングしてみましたので、 もし読み落としがあったらどうもすみません。。 ↓いわゆる 右クリック→「形式を選択して貼りつけ」→「すべて」 は、~.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&source=hp&q=vba%E3%80%80%E5%AE%A3%E8%A8%80%E3%81%97%E3%81%AA%E3%81%84&aq=f&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=16d79a0bb196309b&biw=1276&bih=849 VBAの勉強どうぞ頑張ってくださいb
お礼
ありがとうございます。 少し質問を間違えておりました。 書式も貼り付けたいと申しましたが、シート全部の値・書式ともに別のブックに貼り付けたいのです。 シートの左上を選択し行・列すべてを選択して別のブックに貼り付けたいのです。 よろしくお願いします。
お礼
ありがとうございます。 自分本位になってしまい言うことをきかなかったこと、反省します。 大変失礼しました。 macro2 実行させていただきました。 初めて見る記述もあり驚くばかりです。 こんなに短い構文で可能なんですね。これでいけそうです。 セル高さ・幅を貼り付けはしないですが、何とかします。 ありがとうございました。
補足
独り言ですが、 結局セル全体のコピペがわからずw.worksheets(1).以降を以下のコードにするという不細工なものになってしまいました。 Cells.Select Selection.Copy Windows("貼り付け先.xls").Activate Range("A1").Select ActiveSheet.Paste このたびはありがとうございました。 まだまだ勉強が欠かせませんが、頑張ります。