【VBScript】Excelをひとつひとつ開いてなにかしらの処理を自動化する方法


はじめに

業務中に発生した以下のような要望をVBScriptを用いて解決できたので、その方法をご紹介します。(Windows限定)
●大量にあるExcelをひとつずつ開いてデータを取得したい!
●大量にあるExcelをひとつずつ開いて修正したい!
●大量にあるExcelをひとつずつ開いて...etc

※本記事ではExcelをひとつひとつ開いて、特定のセルにコマンドライン引数で与えたデータを挿入するところまでをご紹介します。

私と同じく1日中Excelとにらめっこしている方の手助けになればと思います。

完成図

1.ファイル作成

VBScriptを書くためにvbs形式でファイルを作成します。
今回は"test.vbs"というファイルを作成します。

次にvbsファイルを連続実行するためにbatファイルを作成します。
今回は"test_run.bat"というファイルを作成します。

流れとしてはbatファイルからVBScriptを繰り返し実行していきます。

2.VBScriptを書いていく

先ほど作成した"test.vbs"をエディタで下記のように修正します。

test.vbs
Dim excel_obj
Dim workbook
Dim worksheet

'Excelの機能を利用するために必要
Set excel_obj = CreateObject("Excel.Application")

'Excelを可視化
excel_obj.Visible = True

'開きたいExcelファイルを指定(絶対パス)
Set workbook = excel_obj.Workbooks.Open(WScript.Arguments(0))

'シートを指定(名前Or番号で指定)
Set worksheet = workbook.Sheets(1)

'シート(1)の"A1"セルに値を入れる
worksheet.Range("A1").Value = WScript.Arguments(1)

'上書き保存
workbook.Save

'ワークブックを閉じる
workbook.Close

'Excelを閉じる
excel_obj.Quit

3.batファイルを書いていく

"test_run.bat"をエディタで開きます。

タブ区切りで、"test.vbsのパス" "開きたいExcelのパス" "セルに入れたい値"を指定します。
下記のフォルダ構成ならば

こんなかんじです。

test_run.bat
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_01.xlsx   test_01
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_02.xlsx   test_02
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_03.xlsx   test_03
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_04.xlsx   test_04
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_05.xlsx   test_05
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_06.xlsx   test_06
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_07.xlsx   test_07
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_08.xlsx   test_08
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_09.xlsx   test_09
C:\Qiita_Test\test.vbs  C:\Qiita_Test\abc_10.xlsx   test_10

4.実行

"test_run.bat"をダブルクリックして実行します。
実行するとコマンドプロンプトが起動し、順次Excelが立ち上がり、処理が実行されます。
コマンドプロンプトが閉じたら、すべての処理が終わった合図です。
実施後にExcelを確認すると、値がきちんと挿入されていることが分かると思います。

おわりに

今回ご紹介した内容は必要最低限の処理のみとなります。
これを応用すれば基本的なデータの取得、加工などができるようになると思います。
この記事がだれかのお役に立てばいいなと思います。