この記事のザックリした内容
- 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 のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!