この記事のザックリした内容
- Excel VBAを知っている方が対象
- xlsmファイルを使わないで実現方法を知りたい方向け
- personal.xlsb を使います

こんにちは。ナガオカ(@boot_kt)です。
Excelを使う時、こんなことができたらいいのになぁ、なんて思うことありませんか?
- エクセルのファイルを開く
ファイルの開き方は手動でもなんでもOK
xlsファイルでも、xlsxファイルでも、xlsmファイルでも、なんでもOK
WindowsならbatやPowerShell等、Mac/Linuxならshell等で自動化してもOK
- 一定枚数のファイルが開いたら、自動的になんらかの処理をしたい
- 処理が終わったらファイル閉じたい
- ➊ 番へ戻る
今回はこれを実現する方法を解説します。
参考にしたURL
まずはソースコード
ソースコードを見るほうが早いと思うので先に書きます。
VBAを分かる人であれば、これだけ見れば分かりますよね。
Option Explicit
' ApplicationオブジェクトはExcelそのものを示すオブジェクト
Private WithEvents xlApp As Application
Private Sub Workbook_Open()
' PERSONAL.xlsbが開く時(つまりExcelが起動する時)にApplicationオブジェクトを取得
Set xlApp = Application
End Sub
' Excelがワークブック(エクセル用ファイルのこと)を開く度にこのプロシージャが呼ばれる
Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
' PERSONAL.xlsbが開いたときの処理はWorkbook_Open()プロシージャでやってるので、
' ここでは即終了とする
If Wb Is thiswookbook Then
Exit Sub
End If
' 今回は、3つめのファイルを開いた時点でModule1にあるHogeHogeプロシージャをコールする
' Excel.Workbooks.CountにはPERSONAL.xlsbが含まれるよ
If Excel.Workbooks.Count = 4 Then
' 関数をコールする
Call HogeHoge
End If
End Sub
Option Explicit
Public Sub HogeHoge()
' ここに処理を書く
Dim val As Long
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wb3 As Workbook
Dim preFix As String
For Each Wb In Excel.Workbooks
' ファイル名かなにかでワークブックのオブジェクトを取得
' ここに書いているの適当なのであまり参考にしないでね
If val = 1 Then
Set wb1 = Wb
ElseIf val = 2 Then
Set wb2 = Wb
ElseIf val = 3 Then
Set wb3 = Wb
End If
Next
' 何か処理する
' .....
' .....
' .....
' ファイル閉じる
wb1.SaveAs (ActiveWorkbook.Path & "\" & preFix & wb1.Name)
wb1.Close (False)
wb2.Close (True)
wb3.Close (False)
End Sub
解説
解説と言っても特に無いんだけど、ファイルを3個開いたら勝手にHogeHoge()プロシージャが呼ばれて処理されるようになってます。
この書き方のポイント(メリット/デメリット)は以下の通り。
メリット
- xlsmファイルが不要
VBAマクロはPERSONAL.xlsbに書いているので、マクロを有効にしますか?というダイアログが出ない - ワークブックが開いた数をトリガーにして処理を実行できる
- ファイルを開く処理をbatやshell等で自動化しておけば、ファイルを開いた瞬間に処理を実行できる
デメリット
- PERSONAL.xlsbに処理を書くので、ブック固有やシート固有の処理は書けない
参考書籍
ExcelVBAに関してはこの本1冊で充分。
ExcelVBAを使うための説明はすべて書かれていますのでオススメです!
ちょっと分厚いので読破するのはしんどいですけどね(笑)
もうちょい簡単な方が良ければ、
ちなみに、これは僕がこれから買いたいと思っている本
評判良さそうなので、興味がある方は読んでみてください
まとめ

これは僕が実際に仕事で使った手法です。
ファイルを開くためのbatをこんな風に書きました。
start C:\・・・・\aaa.xlsx start C:\・・・・\bbb.xlsx start C:\・・・・\ccc.xlsx TIMEOUT /T 5 start C:\・・・・\ddd.xlsx start C:\・・・・\eee.xlsx start C:\・・・・\fff.xlsx TIMEOUT /T 5 start C:\・・・・\ggg.xlsx start C:\・・・・\hhh.xlsx start C:\・・・・\iii.xlsx TIMEOUT /T 5
Excelファイルが3つ開かれる → 処理が自動で動く → 処理される → 自動で閉じられる → 5秒待つ → (最初に戻る)
とまぁ、こんな感じになります。
興味ある方はぜひ試してみてください。
なかなか便利ですよ。
Boot Tech Programming School のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!
