はじめに
こんにちは。筆者は、本来Javaを勉強している身ですが、少し(かなり?)脇道にそれて、今回はVBScriptをつかって業務を(ちょっとだけ)効率化してくれるスクリプトを作ってみました。業務で必要な作業だったので、どうせなら作業を自動化することで、簡単に手早く済ませられないかなあと思い、勉強がてらスクリプトをつくってみました。良ければ使ってみてください。ただし、動作は検証していますが、使用する際は、(勝手ながら)自己責任でお願いします。もしも使用上、不具合があれば報告していただけると幸いです。あと、よろしければ、読者様各自でご自身の用途や目的に合わせた改変や改良をしてみてください。
スクリプトの概要
このスクリプトは、Excelのシートに特定の値を連続して入力していくという作業を補助する
目的で作りました。実際のこの作業をしてみると、いちいち画面上でシート上の連続するセルを選択していく操作・手間が面倒になります。
そこで、この操作・手間を省くスクリプトを作ろうということに至ったわけです。至極、簡単なスクリプトで用途も限られますが、少しでも、読者様の手助けになればと思います。コードもシンプルなので、安全性に不安がある方もそうでない方も一度コードをお読みになった上でお使いください。
スクリプトの全コード
'変数を宣言なく使用するのを防止する。
Option Explicit
'変数を宣言する。
Dim excl_obj
Dim sht_obj
Dim rng
Dim rng_obj
Dim rw
Dim clm
Dim vl
'実行開始時に、その旨を伝えるメッセージを表示する。
MsgBox("このスクリプトは Excelのシート編集を補助します")
'Excelと対応するアプリケーションのオジェクトを作成する。
Set excl_obj = CreateObject("Excel.Application")
'Excelの起動に失敗したか確認し、
'失敗していれば、その旨を伝えるメッセージを表示し、
'さらに、本スクリプトの実行を終了する。
If excl_obj Is Nothing Then
MsgBox("Excelの起動に失敗しました")
WScript.Quit()
End If
'※以下は、Excelの起動に成功したとしての処理。
'Excelの画面(ウインドウ)を表示する。
excl_obj.Visible = True
'新たにExcelのブックを追加・作成し、
'その中のあらかじめ作成されているシートを、
'操作するためのオブジェクトを取得する。
'※シートのアクティベートもする。
excl_obj.Application.Workbooks.Add()
Set sht_obj = excl_obj.Application.Worksheets(1)
sht_obj.Activate
'ユーザーに、編集したいシート上の範囲を指定してもらい、
'※例えば、「A1:A2」といったセル範囲を指定する形式で。
'指定されたシート上の範囲を保持するオブジェクトを取得する。
rng = InputBox("編集したいシート上の範囲を入力してください", "入力")
Set rng_obj = sht_obj.Range(rng)
'指定されたシート上の範囲で、左から右へ、かつ、上から下へといった具合に、
'シート上の各セルについて、ユーザーに値の入力を求め、その値を入力していく。
'空の入力がなされたら、ループ処理を中断し、本スクリプトの実行を終了する。
For rw = 1 To rng_obj.Rows.Count
For clm = 1 To rng_obj.Columns.Count
vl = InputBox("セルに格納したい値を入力してください", "入力")
If (vl = "") Then
MsgBox("シート編集を中断します")
WScript.Quit()
End If
sht_obj.Cells(((rng_obj.Row + rw) - 1), ((rng_obj.Column + clm) - 1) ).Value = vl
sht_obj.Cells(((rng_obj.Row + rw) - 1), ((rng_obj.Column + clm) - 1) ).Select
Next
Next
'指定されたシート上の範囲全体について、値を入力する処理が完了したら、
'最後に、その旨を伝えるメッセージを表示し、本スクリプトの実行を終了する。
MsgBox("シート編集が完了しました")
WScript.Quit()
おわりに
すでにVBScriptは、PowerShellに取って代わられた古い技術ですが、手元にVBscriptの(古い)本があったので、せっかくなので、自分の手と頭を動かして実際の業務を少しでも効率化するためのスクリプトを書いてみようと思いました。少しでも、読者様のお役に立てれば幸いです。また懲りずにVBScriptでなにかつくってみようとも思っています。それではまた。