- ベストアンサー
VBAで別ファイルのデーター操作
VBAで別ファイルのデーター操作 すみません、教えて頂きたいのですが、VBAが記述されているファイルとは別にファイルが2つあり、そのファイル間で例えば値をコピーしたり貼りつけたり出来るのでしょうか?(VBAが記述されているファイルで操作したいのですが)出来るのなら、簡単な記述からでも挑戦したいと思っています。なので、もしよければ記述の仕方を少し教えて頂けたらと思います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「マクロが記述されているファイルとは別のファイルをどういう風に定義するか。」という問題だと思います。 また、「マクロをどういう手順で実行するか。」という問題でもあります。 単純明快な手順を書きます。 (1)まず、PC上に開いている全てのファイルを閉じます。 (2)「マクロが記述されているファイル。」を開きます。このファイルがWorkbooks(1)です。 1番目に開いたファイルという意味です。 (3)マクロにて、別のファイルAAAを1個開きます。このファイルがWorkbooks(2)です。 2番目に開いたファイルという意味です。 別のファイルAAAを開くマクロは、Workbooks.Open Filename:="C:\XXX\YYY\ZZZ\AAA.xls" (4)マクロにて、別のファイルBBBを1個開きます。このファイルがWorkbooks(3)です。 3番目に開いたファイルという意味です。 (5)Workbooks(2)のSheets(1)にアクセスしたい場合(Sheets(1)は、開いたファイルの左から1番目のシートという意味です。)のマクロは、 Workbooks(2).Activate Sheets(1).Select (6)このマクロに続いて、貴方がしたいことを記述します。(例えばRange("A1").Copy) (7)これを、Workbooks(3)のSheets(2)にアクセスし、Range("B1:C1")に貼り付けるとすると、 Workbooks(3).Activate Sheets(2).Select Range("B1:C1").Select ActiveSheet.Pasteとします。 (8)Workbooks(3)を変更保存(上書)して閉じるとすれば、 Workbooks(3).Save Workbooks(3).Close False (9)Workbooks(2)を変更せずに閉じるとすれば、 Workbooks(2).Close False (10)付け足し Close False の記述は、「変更しますか」というメッセージを表示しないための措置 False を記述しなければ、「変更しますか」というメッセージが表示されます。 また、閉じる命令をWorkbooks(3)から先に記述したのは、 Workbooks(2)を先に閉じると、Workbooks(3)がWorkbooks(2)になってしまうからです。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
本来、あまり以下のような書き方はしませんが、分かりやすいように書いてみました。 実際は、もう少し省略してしまうことが多いでのです。 rng の所は、Range("A1:B10")とすれば、範囲をコピーすることが可能です。 'できるだけ標準モジュールに登録するのがよいです。 Sub TestMacro1() Dim wb0 As Workbook 'オリジナル Dim wb1 As Workbook Dim wb2 As Workbook Dim rng As Range '設定 Set wb0 = ThisWorkbook 'マクロを置いてあるブック Set wb1 = Workbooks("MyBook1.xls") 'ひとつのブック Set wb2 = Workbooks("MyBook2.xls") '別のブック 'マクロの置いてあるブックのシート1のA1 を設定 Set rng = wb0.Worksheets("Sheet1").Range("A1") 以下、それそれの場所にコピーする rng.Copy wb1.Worksheets("Sheet1").Range("B1") rng.Copy wb2.Worksheets("Sheet1").Range("B1") End Sub 'このマクロの問題点は、開いていないブックにはエラーが発生します。
お礼
Wendy02様 有難うございます。参考になりました。いろいろ試したいと思います。
- kmetu
- ベストアンサー率41% (562/1346)
> はい、標準モジュールの中を確認しました。また、記述しているファイル内での操作は、記述されます。 ファイルの開きかたでお互いを認識しないことがあります。 VBEの画面で見たときに3つのファイルを認識していない状態だと思います。 お互いを認識しないファイルの開き方のパターンは良くわかりませんが、何がしかのアプリから開いたら認識しないことは経験しました。 自分でフォルダからクリックして開いたらお互い認識するとは思うのですが、色々開き方を試してみてください。 マクロの記録をするファイルのマクロでファイルを開くと認識するはずです。
お礼
kmetu様 有難うございます。記録する事が出来ました。参考になりました。
- kmetu
- ベストアンサー率41% (562/1346)
> 早速、実行しましたが、何も記述されませんでした 標準モジュールの中を確認して出来てなかったのでしょうか?
補足
はい、標準モジュールの中を確認しました。また、記述しているファイル内での操作は、記述されます。
- kmetu
- ベストアンサー率41% (562/1346)
3つのファイルを開いておき、VBAを記述したいファイルのマクロの記録を実行して、別のファイル間でコピーや貼り付けをし、それで出来上がったマクロを参考にしてください。
お礼
kmetu様 有難うございます。その事をすっかり失念しておりました。
補足
kmetu様 早速、実行しましたが、何も記述されませんでした。これって、出来ないということでしょうか?
お礼
YON56様 本当に有難うございます。補足を記入しましたが別で質問を立てようと思います。本当に有難うございました。
補足
YON56様 有難うございます。とても分かりやすく、そしてうまくできました。本当に感謝しております。 すみませんが、もう一つだけ教えて頂けませんでしょうか? ActiveSheet.Paste とするところを、値だけ入力する記述を教えて頂けませんでしょうか。 そのまま、PasteSpecial xlPasteValuesをつけてもうまくいかないので、お願いします。