- ベストアンサー
マクロで複数のファイルを開き、値のみをコピー&貼り付けしたい
- マクロを使用して、特定のファイル内のデータを別のファイルに値のみでコピー&貼り付けする方法について教えてください。
- 特定のファイル(Workbooks(2))のデータをコピーし、別のファイル(Workbooks(3))に値のみで貼り付ける方法を教えてください。
- CopyメソッドとPasteSpecialメソッドを使用して、マクロで値のみをコピー&貼り付けする方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>ブックを開く、(Workbooks.Open)の部分ではブックは、開くのですが、ここで言うと >Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copyの部分で >エラーになってしまいます。 この場合、ブックは開いても、こうするとエラーが発生する場合は、シート名が違っています。 言い換えると、指定するものは、そのブックのそのシートというひとつかない、ほかに指定できないような方法を取るということが、間違いを起こさなくなるわけです。 Sheets(1) と、Worksheets(1) と、Worksheets("Sheet1") は、同じようにありながら、最後のWorksheets("Sheet1")は、より間違いが少ないわけです。 なお、「明示的」というのは、プログラミング用語特有の言葉で、英語で、explicit (形容詞)の訳語として当てられた言葉です。一般的な日本語では少しおかしな言葉ですが、あえて使っています。 武藤玄氏のExcel事典 ワークシートの参照をマスターしよう!
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
どうやら、私の書いてきたことは、ほとんど理解されていないようですね。 VBAには、VBAの約束事があります。最初は出来さえすればそれで良い、ということから、なるべくエラーを起こさないコードと進化していくことで上達していくわけです。 例えば、InputBox 関数と、InputBox メソッドをどちらを使うとかは、こういうことは、ある程度、VBAを知っている人なら、どちらかは分かるものです。また、Sheets とWorksheets の違い、Windows とWorkbooks の違いも、自ずと、どちらを使うべきか、だんだんに見えてきます。 まず、ちゃんとしたVBAの教本を手に入れて、それで勉強してください。基本が大事です。掲示板では、玉石混交ですから、どれが正しいか分からない、こんな人の言っていることが信用できない、というなら、大手の出版の有名や著者の書籍でしか吸収できません。Webサイトを紹介している人もいますが、私のみた限りでは、もともと、人に教えるつもりなどないもの、凝ったテクニックや、初歩的な間違いをしているもの、もともと、Microsoft の基本的なVBAの仕様書(プログラマーズガイド)を一度も読んだこともない人のサイトなど、期待はずれのものが多いです。 VBAでは、入門編から、初級編(VBAは、初級編でほとんどお終いです)と段階的にコードは違います。しかし、理解しやすいことが、必ずしも、正しいものとは限りません。私は、初心者に合わせてコードを手抜きするようなことはしたくありません。 さて、前回の続きですが、Workbooks(1),Workbooks(2) ...というのは、特定のブックを指すわけではないし、開いた順番でしかありませんから、必ず、最初に、どのブックを開くという決まりがなければならないし、最初に開けたブックのIndex が、Workbooks(1)と1となるとは限らないのです。そんな初級マクロが実務上は使えないのです。実験的なものでしか成功しません。 とはいっても、多くの人は、失敗を経験しなければ覚えないと思いますが……。 そのためには、多くのコード(Sub ~ End Sub, Function ~ End Functionとして実行する)を書かなければなりません。 Excelのアプリケーションを起動して、最初に、マニュアルで開いたファイルがWorkbooks(1)という考えを持っているとしたら、それ自体を改めなくてはなりません。 VBAで大事なことは、「明示的」ということです。明示的というのは、はっきりと、どれがどれかと決めておくことです。 Sub TestMacro2() Dim wb1 As Workbook Dim wb2 As Workbook '設定(このように明示的に決めるというのが基本です) Set wb1 = Workbooks.Open("MyBook1.xls") 'ひとつのブック Set wb2 = Workbooks.Open("MyBook2.xls") '別のブック 'ブック1からブック2のB1;C1の値だけを値コピーする* wb2.Worksheets("Sheet1").Range("B1:C1").Value = _ wb1.Worksheets("Sheet1").Range("B1:B1").Value Set wb1 = Nothing Set wb2 = Nothing End Sub '//** Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copy Workbooks("MyBook2.xls").ActiveSheet.Range("B1").PasteSpecial xlPasteValues Application.CutCopyMode = False このような方法もあります。 VBAでは、Select やActivate 自体を、必要な場面というのはそれほど多くはありません。
お礼
Wendy02様 有難うございます。一応、「出来る大事典」という本で、セルの操作の項目までは、ほぼ本のコード丸写しで勉強してきましたが、自分で何かしようとしたときに何もできません。なので、自分のやりたい事を前提に勉強していこうとして試行錯誤しております。 >VBAで大事なことは、「明示的」ということです。明示的というのは、はっきりと、どれがどれかと決めておくことです。 有難うございます。言われる事がとても、理解できました。 ただ、私も本を見ながら明示的にやってみたのですがうまくいかないのでとても悩んでいます。 ブックを開く、(Workbooks.Open)の部分ではブックは、開くのですが、ここで言うと Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copyの部分で エラーになってしまいます。 しかし、以前教えて頂いたWorkbooks(1),Workbooks(2)の方法で記述を変えると動作しました。 明示のしかたの何がいけないのか?今も、試行錯誤しております。 必ず明示して実行できるように頑張ってみます。 また、お世話になると思いますがこれからもどうか宜しくお願いします。
- jcctaira
- ベストアンサー率58% (119/204)
あまりコピーにこだわらなければ7命令が、以下の1命令で値コピーは完了します。 Workbooks(3).Sheets(2).Range("B1:C1").Value = Workbooks(2).Sheets(1).Range("A1").Value
お礼
jcctaira様 有難うございます。参考になりました。
- mar00
- ベストアンサー率36% (158/430)
Selection.PasteSpecial Paste:=xlPasteValues で出来ると思います。
お礼
mar00様 有難うございます。できました。
お礼
Wendy02様 有難うございます。返信が遅れましてすみません。いろいろ調べたり、試したりしてましたら時間が経ってしまいました。今回は、本当に勉強になりました。 また、Wendy02さんの言われたとうり一つ一つ確実にやっていくと無事、今回やりたかった事が出来ました。本当に感謝しております。 有難うございます。