初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門:複数のエクセルファイルを操作する

また、心機一転改めて初めて行きたいと思います。今後ともみなさんよろしくお願いします。
もし良くわからないところとか、疑問があったら遠慮なくツイッターでDMでもブログにコメントでも書いてくださいませ。

複数ファイルにわたるマクロを作ってみよう


さて、今回は複数のエクセルファイルを操作してみましょう。よくあるパターンです。操作したいファイルが1つということはほとんどなくて、発注ファイルから在庫ファイルへ転記。とかその逆とか請求書ファイルから元帳ファイルへなんて普通によくあるパターンのやつや!


ということで、やってみよう。


ファイルを操作するのならWorkBookオブジェクト


エクセルは複数のオブジェクトで構成されているということはもう何回も言ってますが、ファイルそのものはWorkBookオブジェクトを使って操作します。オブジェクトさえ指定できれば、操作するのはお茶の子さいさいです。

オブジェクトを正しく指定すること!これがマクロマスター!

WorkBookオブジェクトの指定(作成)方法


ざっくりいうと、2つくらい方法があります。1つはOpenメソッドで開いたときの戻り値で取得する方法、もう1つはゼロから作る方法。後者は簡単で、ファイルを新規で作るイメージ。前者はもともとあるファイルを操作したいときに使います。実践では元からあるファイルを操作することの方が多いと思うので、この方法メインで解説。

マクロファイルはどっちに作る?


さて、ここでちょっと問題なのですがAというファイルとBというファイルがあって、どっちにマクロを作るのか?ということです。これも考え方は2つあって、最初に操作するファイルにマクロを作る。というのと、まったく別のCというファイルにマクロを作ってそこからAとBを操作する方法とあります。
今回はAに作るパターンで考えてみたいと思います。非常に簡単なサンプルですが、ファイルAから、ファイルBを開き、開いたBのファイルのセルにファイルAの情報を、ファイルBのセルへ入力するようなマクロを作ってみたいと思います。

必要な知識は、、、


絶対パス相対パス詳しい解説はここ
・ファイルを開くメソッドOpenメソッド詳しい解説はここ

このあたりですね。

プログラムを作る手順


後はいつも通りいきましょう。マクロ(プログラム)を作るには、、、

  • 最初と最後書いて
  • やりたいことを日本語で書いて
  • 必要な変数を用意して
  • 日本語をVBAに翻訳する


ですね。1つ1つやっていきます。

プロシージャの最初と最後を書く。


では最初と最後を書きましょう。

''''''''''''''''''''''''''''''''''''''''''''''''''''
'ファイルBを開いて、Aのセルの内容をBに入力する
'
''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Sample()


End Sub

はい、おしまい。プロシージャの最初と最後です。ここではSampleプロシージャを作成しています。そして、その上にコメントでこのプロシージャが一体何をするのか?ということをコメントに書いています。

やりたいことを日本語で書く


次にやりたいことを日本語で書きます。もちろんコメントで。簡単に書くと・・・

  • ファイルBを開く
  • ファイルAの内容をファイルBのセルに入力する

ですよね?なのでこれをそのまま書きます。

''''''''''''''''''''''''''''''''''''''''''''''''''''
'ファイルBを開いて、Aのセルの内容をBに入力する
'
''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Sample()
 
    'ファイルBを開く
    
    'ファイルAの内容をファイルBのセルに入力する

End Sub


はい、これでおしまい。

必要な変数を用意する


この処理で必要な変数を用意します。とりあえず、絶対必要な変数は

  • ファイルBを操作するためのWorkBookオブジェクトを格納する変数


です。この時点で必要な変数がどれか?が分からない場合は、行き当たりばったりになりますが、とりあえず、この時点で思いつくものだけを用意すればOKです。

''''''''''''''''''''''''''''''''''''''''''''''''''''
'ファイルBを開いて、Aのセルの内容をBに入力する
'
''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Sample()
    
    'WorkBookオブジェクト格納用変数
    Dim objWbk As Workbook
 
    'ファイルBを開く
    
    'ファイルAの内容をファイルBのセルに入力する
    

End Sub

日本語をVBAに翻訳する


後は日本語をVBAに翻訳して書くだけです。

''''''''''''''''''''''''''''''''''''''''''''''''''''
'ファイルBを開いて、Aのセルの内容をBに入力する
'
''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Sample()
    
    'WorkBookオブジェクト格納用変数
    Dim objWbk As Workbook
 
    'ファイルBを開く
    Set objWbk = Workbooks.Open("C:\File_B.xlsx")
    
    'ファイルAの内容をファイルBのセルに入力する
    objWbk.Sheets("Sheet1").Range("A5").Value = Sheet1.Cells(5, 1).Value
    

End Sub


はい、おしまい。

Openメソッドは開いたブックのオブジェクトを戻り値として返す


ここでのポイントはOpenメソッドで開いたファイルのオブジェクトを格納しているところです。Setステートメント使いましょう。これで開いたファイルのオブジェクトを操作する準備が整ったも同然ですね。後はちゃんとシートなり、セルなりを指定してあげればいいのです。こんなに簡単なことはないですね。


今日はここまで!

次回はエラー処理をクラス化して一般的に使えるようにしてみたいと思います。
ちょっと難しいです。