VBSで業務効率化!初心者でも簡単にできる自動化スクリプト集【最新事例10選】

業務効率化に自動化の力を借りるなら、まずは手軽にできるVBS(Visual Basic Script)から始めるのがおすすめです。
VBSはWindowsに標準搭載されているため、追加ソフトをインストールせずにすぐにスクリプトを書き、実行できます。
以下では「初心者でも簡単に実装・実行できる」ことを重視し、最新の業務シーンに役立つ10の自動化スクリプトを紹介します。
各スクリプトの目的、使い方、サンプルコードの解説を踏まえて、実務に活かせるヒントを掴んでください。


1. 定期的に実行するメール送信スクリプト

業務に必要な定期レポートやフォローアップメールを自動で送ることで、手入力ミスを減らし、時間を節約できます。

' send_report.vbs
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0) ' 0=メールアイテム

objMail.To = "recipient@example.com"
objMail.Subject = "毎日の業務レポート"
objMail.Body = "以下は今日の業務レポートです。"

objMail.Send
  • ポイント
    • Outlookが起動していなくてもバックグラウンドでメールを送信。
    • スケジューラー(タスクスケジューラ)に登録すれば、毎日・毎時間実行可能。
    • 添付ファイルを追加する場合は objMail.Attachments.Add "C:\Reports\report.xlsx" を使用。

2. フォルダー内ファイルの自動バックアップ

定期的に変更されるフォルダのスナップショットを別場所へコピーすることで、データ損失のリスクを低減。

' backup_folder.vbs
strSource = "C:\BusinessDocs"
strDest   = "D:\Backup\BusinessDocs_"
strDate   = Replace(Replace(Replace(Date, "/", ""), ":", ""), " ", "_")
strDest = strDest & strDate

Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(strDest) Then
    objFSO.CreateFolder(strDest)
End If

Set folder = objFSO.GetFolder(strSource)
For Each file In folder.Files
    objFSO.CopyFile file.Path, strDest & "\" & file.Name, True
Next
  • ポイント
    • Replace を使い日付をフォルダ名に。
    • バックアップ先フォルダーが無ければ自動作成。
    • スケジューラーで1日1回、月1回など実行頻度を設定。

3. テキストファイルから CSV へ変換

データ入力や集計で手動で行っていたテキスト→CSV変換をスクリプト化し、Excel作業を省略。

' text_to_csv.vbs
strSource = "C:\Data\input.txt"
strDest   = "C:\Data\output.csv"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set fileIn  = objFSO.OpenTextFile(strSource, 1)
Set fileOut = objFSO.CreateTextFile(strDest, True)

Do Until fileIn.AtEndOfStream
    line = fileIn.ReadLine
    ' 例: 1 tab で区切られた列をカンマに変換
    line = Replace(line, vbTab, ",")
    fileOut.WriteLine line
Loop

fileIn.Close
fileOut.Close
  • ポイント
    • vbTab でタブ区切りを扱う例。要件に合わせて正規表現 (RegExp) を利用する場合もある。
    • 出力後にExcelで開くと自動でCSVとして読み込まれる。
    • ファイルパスをパラメータ化すれば、複数テキストの一括変換も可能。

4. 画面キャプチャとログ記録

会議や作業手順書作成時に、一定間隔で画面のスナップショットを撮ってファイル名に日時を付け保存。

' screenshot.vbs
Set objShell = CreateObject("WScript.Shell")
Set objFSO   = CreateObject("Scripting.FileSystemObject")

strFolder = "C:\Screenshots"
If Not objFSO.FolderExists(strFolder) Then
    objFSO.CreateFolder(strFolder)
End If

strDate = Replace(Replace(Replace(Now, "/", ""), ":", ""), " ", "_")
strFile = strFolder & "\Screen_" & strDate & ".png"

' 画面キャプチャは ImageMagick など外部ツールを呼び出す例
objShell.Run "magick import -window root """ & strFile & """", 0, True
  • ポイント
    • Windows標準だけで完全自動化する場合は WshShellSendKeys "{PRTSC}" でコピーして貼り付ける手法もあるが、画像処理ソフトを併用すると品質を担保。
    • スケジューラーに「30分ごと」「1日1回」などを設定。
    • ストレージ容量が増えるので、古いファイルは別フォルダーへ移動しておくと安全。

5. 連絡事項の自動掲示ファイル更新

社内掲示板などに掲載する通知ファイルを、事前に決めたテンプレートと変数で生成する。

' bulletin_update.vbs
Set objFSO = CreateObject("Scripting.FileSystemObject")
strTemplate = "C:\Templates\bulletin_template.txt"
strDest     = "C:\Bulletin\notice.txt"

Set fileT = objFSO.OpenTextFile(strTemplate, 1)
strContent = fileT.ReadAll
fileT.Close

' 変数置換
strContent = Replace(strContent, "{{DATE}}", FormatDateTime(Now, vbShortDate))
strContent = Replace(strContent, "{{TIME}}", FormatDateTime(Now, vbShortTime))
strContent = Replace(strContent, "{{MESSAGE}}", "本日10時に全体会議を実施します。")

Set fileD = objFSO.OpenTextFile(strDest, 2, True)
fileD.Write strContent
fileD.Close
  • ポイント
    • テンプレートには {{VARIABLE}} 形式でプレースホルダーを置く。
    • 変数はスクリプト内で定義済みか、外部テキストファイルから読み込むと柔軟。
    • ネットワーク共有ドライブに配置すれば、社内の誰でも最新の掲示を見ることができる。

6. Windows タスクスケジューラのログ取得

定期ジョブの実行結果や失敗ログを自動で取得し、メールで通知。

' task_log.vbs
Set objShell = CreateObject("WScript.Shell")
Set objFSO   = CreateObject("Scripting.FileSystemObject")
logFilePath = "C:\TaskLogs\last_run.log"

' スケジューラのログ取得(例:イベントログから)
Set objExec = objShell.Exec("powershell -Command \"Get-EventLog -LogName System -Newest 10 | Out-File -FilePath 'C:\\TaskLogs\\last_run.log'\"")
  • ポイント
    • PowerShellを呼び出して複雑なイベント取得を行う。
    • スクリプトの最後にメール送信ロジックを組み込めば、失敗したタスクを即座に把握可能。
    • 定期実行を設定しておけば、運用監視の作業負担が大幅に削減。

7. Excel データ自動入力・更新

大量のデータを別システムから取得し、Excel に書き込むことで手作業を排除。

' update_excel.vbs
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
Set wb = objExcel.Workbooks.Open("C:\Data\SalesReport.xlsx")
Set ws = wb.Worksheets("Sheet1")

' 例: 配列でデータをセット
arrData = Array(Array("2023-10", 1200), Array("2023-11", 1450), Array("2023-12", 1310))

For i = 0 To UBound(arrData)
    ws.Cells(i + 2, 1).Value = arrData(i)(0)
    ws.Cells(i + 2, 2).Value = arrData(i)(1)
Next

wb.Save
wb.Close
objExcel.Quit
  • ポイント
    • VBA と同様のオブジェクトモデルを VBS で使える。
    • CSV や API から取得したデータを arrData に格納して一括書き込み。
    • スケジューラに設定すれば、売上データが毎日更新され、業務担当者は最新レポートを即時確認できる。

8. フォントと紙サイズを自動で設定してPDF化

社内資料を PDF で配布する際に、フォントサイズやページレイアウトを統一するためのスクリプト。

' pdf_convert.vbs
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
Set doc = objWord.Documents.Open("C:\Docs\report.docx")

' フォント設定
Set rng = doc.Content
rng.Font.Name = "Calibri"
rng.Font.Size = 10

' 用紙サイズ設定(A4)
doc.PageSetup.PaperSize = 9 ' wdPaperA4

' PDF化
strPDF = "C:\Docs\report.pdf"
doc.SaveAs2 strPDF, 17 ' 17 = wdFormatPDF

doc.Close False
objWord.Quit
  • ポイント
    • Word のオブジェクトモデルを使い、文書全体のフォント・サイズを変更。
    • SaveAs2 でPDF形式で保存すると、業務の見た目が統一され、印刷や添付メールにも最適。
    • 定型フォーマットに合わせて、テンプレート文書を保存し、各データを差し込みだけで PDF 作成が可能。

9. ネットワーク共有フォルダのアクセス権自動設定

新しくプロジェクトフォルダーを作成した際に、必要なユーザーに対して自動でアクセス権を付与。

' set_acl.vbs
strFolder = "D:\Projects\ProjectA"
strUser   = "DOMAIN\Alice"
strRights = "FULL"

Set objFSO   = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)

Set objSecurity = objFolder.SecurableObject
Set objRule = objSecurity.CreateAccessRule(strUser, objSecurity.FILE_WRITE, objSecurity.ACCESS_TYPE_ALLOW, objSecurity.ACE_OBJECT_TYPE_ACL)

objSecurity.SetAccessRule(objRule)
  • ポイント
    • VBS だけで ACL(アクセス制御リスト)を操作可能。
    • 新規プロジェクト起動時にスクリプトを実行すれば、毎回管理者手動操作の手間を省ける。
    • 複数ユーザーを一括で設定したい場合は配列で CreateAccessRule をループ。

10. 業務日報の自動作成と送信

毎朝業務開始時に必要事項を入力せずに、過去ログから日報を自動で作成しメールで配布。

' auto_daily_report.vbs
Set objShell = CreateObject("WScript.Shell")
Set objFSO   = CreateObject("Scripting.FileSystemObject")

' 過去ログ取得(例:Windowsイベント)
Set objExec = objShell.Exec("powershell -Command \"Get-EventLog -LogName Application -After (Get-Date).AddDays(-1) | ConvertTo-Json\"")
json = objExec.StdOut.ReadAll()

' 簡易JSONパース(VBS でのパースは手間がかかるため、外部スクリプトや PowerShell に委譲)
Set objJSON = CreateObject("Scripting.Dictionary")
Set objJSON = ParseJson(json) ' 実際には外部サーバーで処理した結果を読み込む想定

outFile = "C:\Reports\DailyReport_" & FormatDateTime(Now, vbShortDate) & ".txt"
Set fileOut = objFSO.CreateTextFile(outFile, True)

For Each log In objJSON
    fileOut.WriteLine log("Time") & ": " & log("Message")
Next

fileOut.Close

' メール送信(前述の send_report.vbs と同様の構造で送信)
  • ポイント
    • PowerShell の ConvertTo-Json で高速に JSON を取得し、VBS 側で簡易的に処理。
    • 本例は簡易化しているので、実際にはスクリプトを 2 本に分けるか、PowerShell で完結させる方が安全。
    • 生成した日報を自動でメール送信すれば、上司への報告作業をほぼ省力化。

まとめ

VBS は「軽量・汎用性・Windows 標準搭載」という特徴を持ち、初心者でも比較的短時間で業務自動化に応用できます。
上記 10 例は、メール送信、バックアップ、テキスト変換、画面キャプチャ、掲示板更新、ログ取得、Excel・Word の自動操作、ACL 付与、日報作成など、実務に直結する場面を網羅しています。
作業負担の減少だけでなく、ヒューマンエラーの抑制や作業工程の統一にもつながるため、ぜひ試してみてください。

スクリプトを作成・導入する際は、事前にテスト環境で検証し、権限設定やエラーハンドリングをきちんと行うことが成功の鍵です。
手順を踏みながら、徐々に自身の業務フローに合わせてカスタマイズしていくと、VBS の可能性を最大限に引き出せます。

コメント

タイトルとURLをコピーしました