初心者のためのExcel エクセルマクロVBA入門:ファイルを開いてVBAで使う(Openメソッド)
今日はちょっと短め。というか似たようなことを過去にも書いたので。
VBAでエクセルファイルを開くとオブジェクト操作が可能
前回のブログでも言ってますけど、いわゆるブックをSelectメソッド使って選択しなくても、別に操作くらいできるわ。的なお話です。CSVの取り込みはやりましたけど、これやってないですよね。意外と良くあるのが複数のエクセルファイル間での操作です。発注書と注文書、在庫表と価格表、仕事ではたくさんのエクセルファイルが存在し、その間でのやり取りや値の比較なんかを例えばワーク用のエクセルファイルを使ってやったり、集計したり、色々しますよね。
これも例えば毎日やる作業をマクロで出来たら・・・素晴らしいと思いませんか?
でも複数のファイルをどうやって操作すれば・・・
( ゚д゚)?
ということに悩まされる人が多数いて、そしてSelectメソッド多用して自爆します。(笑)
ちゃんと理解すればちゃんとできるようになるんです。
ファイルを開くOpenメソッド
まずはサンプルコードですね。
Sub Sample() '開いたファイルのオブジェクトを格納する変数を作成 Dim workBk As Workbook ' 開いたファイルを格納する Set workBk = Workbooks.Open("C:\Test.xls") ' 開いたファイルのSheet1をコピーする workBk.Sheets("Sheet1").Copy End Sub
以前書いたサンプルコードです。このWorkBooksオブジェクトのOpenメソッドを使ってファイルを開いています。これを実行するとちゃんとC:\Test.xlsが開かれます。Openメソッドは開くファイル名が決まっている時に使います。そうでなくて、ユーザーにファイルを開かせたい場合は、GetOpenFilenameメソッドを使い、ファイルパスを取得したのち、Openメソッドでファイルを開きます。
この説明で何言ってるかわかるかな・・・
ファイルを開くとVBAはワークブックオブジェクトを返す
よく私もメソッドメソッドって言ってますが、これを和訳すると「関数」とほぼ同義です。つまり、何か入力したら何かを返すものです。Openメソッドもファイルパスという引数を与えるとファイルを開くという処理をして、その開いたファイルのワークブックオブジェクトを返してくれます。
それがサンプルコードの2つ目の処理のところです。
Set workBk = Workbooks.Open "C:\Test.xls"
これですね。ワークブックオブジェクトの変数にWorkBookオブジェクトをセットしています。こうすることで、開いたエクセルファイルのオブジェクトを変数にセットできました。大元であるブックオブジェクトを変数に格納できているのですから後はシートだろうがRangeだろうがセルだろうが、なんだろうが操作出来てしまいます。
例えば、開いたファイルのSheet1にあるセルA5の内容を今の元のファイルにコピーしたい場合は。またサンプル使いますが。。。
Sub Sample() '開いたファイルのオブジェクトを格納する変数を作成 Dim workBk As Workbook ' 開いたファイルを格納する Set workBk = Workbooks.Open("C:\Test.xls") ' 開いたファイルのSheet1をコピーする workBk.Sheets("Sheet1").Range("A5").Copy ThisWorkBook.Sheets("Sheet1").Range("A1") End Sub
とすれば、いいのです。別になんら難しいことはしていません。
ちゃんとオブジェクトを正しく指定しているだけ
です。翻訳もこれは簡単ですよね。ドットを「の」とか「を」に置き換えて、
「開いたファイルのSheet1のセルA5をコピーして 今のファイルのSheet1のA1に張り付ける」
と翻訳できますね。コードを見ればわかりますが一回もSelectメソッドは使っていません。Selectメソッドを利用しなくてもマクロはちゃんと書けるしその方が良いコードである。ということが理解できると思います。
この方法は覚えておくとVBAのツールの幅がぐっと広がるので、みなさんも使ってみてください。
今日はここまで!
かしこ