• ベストアンサー

excel VBA ブック間コピーについて

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

  • ss696
  • お礼率94% (868/915)

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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 #必要に応じて「コピー元」と「貼り付け先」ブックをそれぞれ入れ替えて,ヤリタイ事を実現してください。 再掲: >コピーしたいセル範囲とか,どこに貼り付けたいとか  ↓  情報提供がありません。  ついでに,どのシートからどのシートにコピー貼り付けたいのかの情報も不足でした。

ss696
質問者

お礼

ありがとうございます。 自分本位になってしまい言うことをきかなかったこと、反省します。 大変失礼しました。 macro2 実行させていただきました。 初めて見る記述もあり驚くばかりです。 こんなに短い構文で可能なんですね。これでいけそうです。 セル高さ・幅を貼り付けはしないですが、何とかします。 ありがとうございました。

ss696
質問者

補足

独り言ですが、 結局セル全体のコピペがわからずw.worksheets(1).以降を以下のコードにするという不細工なものになってしまいました。   Cells.Select Selection.Copy Windows("貼り付け先.xls").Activate Range("A1").Select ActiveSheet.Paste このたびはありがとうございました。 まだまだ勉強が欠かせませんが、頑張ります。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ご覧になったどちらの回答も「値の転記」をしているので,書式のコピーはしていません。 ふつーにコピーし,貼り付けるマクロを書きます。 とりあえずヤリタイ事: >ブック間コピーについて 作成例: 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などを利用するマクロを工夫する ・コピーしたいセル範囲とか,どこのセルに貼り付けたいのかといった事もよく整理して,あなたの作りたかった「マクロの動作」をよく考えて整理する など,研究を進めてください。 また新しい「実はこういう事がしたかった」が明らかになってきたら,また別途新しいご相談を投稿してみて下さい。

ss696
質問者

お礼

ありがとうございます。 ブック間のコピーと申しましたが、質問のurlの質問者さんと同じくデータ元のブック名が変わるのを前提としてブック間のコピーの方法を探しておりましたので質問のurlにある回答が非常に近かったのです。 >実はこういうこと・・・ ここで書かせてもらっていいでしょうか。 開いてるのはコピー元ブックとペースト先ブックのみ。 データ元のブック名が変わってもコピー&ペーストができる。 書式を含めシート全体をすべてコピー&ペーストしたい。 よろしくお願いします。

  • camputer
  • ベストアンサー率64% (22/34)
回答No.1

 おはようございます。今リンク先をぱぱっと読んで試しにコーディングしてみましたので、 もし読み落としがあったらどうもすみません。。  ↓いわゆる 右クリック→「形式を選択して貼りつけ」→「すべて」 は、~.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

ss696
質問者

お礼

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

関連するQ&A

  • エクセルのVBAで、異なるブック間でのコピー&ペースト

    こんばんは。 エクセルのVBAで、異なるブック間でのコピー&ペーストに関しての質問です。 現在アクティブになっているシートのB4セルをコピーして、 現在開いているシートのブックとは異なる特定の ブック(”Book1")の特定のシート(”Sheet1”)のC5セルに貼り付けたい場合、 ●●●の部分に何と表現すればよいか教えてください。 Range("B4").Copy Destination:=●●● よろしくお願いいたします。

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

  • excel等のコピーやブック等の基本知りたいです

    コピーやブック等の概念等ががわかりません わかりやすい書籍、ホームページ等をご紹介いただければ幸いです 以下、コピー(ブックの概念等その他も)の概念がわからず困った時の例です マクロを記録してコピーしようとしました 隣のシートに表をコピーをして、ある式を任意のセルにペースト、計算を行う というもので、違うbookにこのマクロをペーストすると、マクロを記録した時に作ったシートに再計算がされるだけ また、違うbookに形式を選んでペーストを行おうとしても、数式や値ではなく、ビットマップやワークシートになってしまう 等です。VBAの勉強をすれば解決するのではないかと勉強を始めようと思っていますが、コピーの概念($の使い方なども)など勉強したいです。 詳しい書籍、ホームページを紹介していただければ幸いです。

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • 異なるブック間でのセル範囲のコピー/VBA

    異なるブック間でクリップボードを経由せず直接コピーしたいため 下記のマクロを記述していますが、実行エラーが発生します。 どうしてでしょうか。 ThisWorkbook.Worksheets(3).Range(Cells(3, 1), Cells(3 + a, 1)).Value = Workbooks("excel.xls").Worksheets(1).Range(Cells(11, 3), Cells(11 + a, 3)).Value (補足) (1)VBA実行中のThisWorkbook、excel.xlsは別のブック ですが、同じフォルダにあります。 (2)aは数値が入る変数です。

  • エクセルVBA ブック間のコピー

    選択したテキストファイルをエクセルで開いたコピーし、 もう一つ開いたエクセルファイルにペーストするというマクロをVBAで 作成していますが、つまずいてしまいました。 ----------------------------------- Dim wb1 As String Dim wb2 As String Sub Opentxt() wb1 = Application.GetOpenFilename("テキストファイル,*.txt") If wb1 <> "False" Then Workbooks.OpenText Filename:=wb1, DataType:=xlDelimited, comma:=True End If End Sub Sub Copy() Dim LastRow As Long wb2 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If wb2 <> "False" Then Workbooks.Open wb2 LastRow = wb2.Sheets("一覧表").Range("A" & Rows.Count). End(xlUp).Row wb2.Sheets("一覧表").Range("A5:A" & lastRow).Copy _ wb1.Sheets("Sheet1).Range("B33") End If End Sub ----------------------------------- Opentxtの方は問題ないですが、Copyの方を実行すると wb1とwb2で引っかかって「コンパイルエラー/ 修飾子が不正です」と 表示されて、エラーになってしまいます。 この場合変数の型などがおかしいのでしょうか? excel2007を使用しています。 よろしくお願いします。

  • VBA コピー&ペースト

    次の作業をVBAでマクロを組みたいのですが、どのような構文にすればよいでしょうか。VBA初心者のため、お知恵を拝借させてください。 [目的] 1.ブックA(コピー先)に設定したハイパーリンク先のブックB(コピー元)へジャンプ 2.ブックBへジャンプ後、特定のセルの値をコピー 3.コピーした値をブックAの特定セルへペースト 4. 1.~3.の作業をリピート 対象は、上の作業が未完(ブックAのペースト先のセルがブランク)のもの [詳細] ・ブックB(リンク先)の保存先はサーバー ・リンク先はブックBの特定のシート ・ブックAで設定したハイパーリンクのセルの値がリンク先のシート名 ・ブックBは複数、リンク先のシートも複数(ハイパーリンクごとにリンク先が異なる) ・ブックBにはマクロが設定、開くたびにマクロ有効無効のメッセージ(Excel2003のため) ・コピペする項目は3つ ・ブックA,Bともに開いた状態で、2.~4.のリピートというマクロでも構いません。 以上ですが、他に情報が必要でしたらお申しつけください。 よろしくお願いいたします。

  • VBAのペースト

    VBAのペーストについてです。 ある変数に値が入っていて、その変数を用いて別シートに貼り付けをしたいと思っているのですが、構文がわからなくて困っています!どなたか教えていただけませんでしょうか? お願いします。 Dim shopname as String 型宣言 shopname = Cells(3,21).value shopname変数へ代入 ....             shopnameに入っている値を3行目のB列に挿入したい...

  • 複数ブックを纏めて1ブックの1シートずつにコピー

    仕事で大量の処理をしなければならず、マクロ化を考えています。 どなたかご教示頂けないでしょうか。 大変困っています助けて下さい。 既定ブック(9シート1,2,3,4,5,6,7,8,9と名前をつけています。レイアウトは全て同じです。)をコピーした後に複数のブック(1シートのみです。既定ブックとほぼレイアウトは一緒です。)を指定し、一部分コピーをし、既定ブックに1シートごとペーストし、(担当者により複数ファイル数は異なります)名前付けてブックを保存後閉じるという作業をマクロ化したいと思っています。 500ファイルを担当者別にコピー&ペーストしなければならないので、是非ご教示頂けないでしょうか。何卒お願い致します。 なお、ペースト箇所は以下になります。(全てセルの結合をしております。) 【貼付箇所】 コピー元:Range("G6:P13").Select    → コピー先:Range("G6:P13").Select  コピー元:Range("V5:AD11").Select   → コピー先:Range("V5:AD11").Select 【値貼付箇所】 コピー元:Range("AA23:AD27").Select  → コピー先:Range("AG26:AG30").Select コピー元:Range("G23:Z27").Select    → コピー先:Range("AH26:AH30").Select

  • エクセルの複数のブックを1つにしたい

    こんにちは。 エクセルの複数のブックを1つのブックにまとめたいのです。(シートをコピーしたい) コピー&ペーストでできますが、エクセルの機能で他にはないですか?外部データの取り込みで実行したら書式まではインポートできませんでした。 VBAでもできましたが、他の(もっと簡単でエクセルの普通の機能を使って)やり方はないでしょうか? よろしくお願いします。

専門家に質問してみよう