Help us understand the problem. What is going on with this article?

VBScriptで業務を効率化するスクリプトを作ってみた(至極、単純で簡単なスクリプト)②

More than 1 year has passed since last update.

はじめに

こんにちは。前回に引き続き、VBScriptで業務に役立つ(かもしれない)スクリプトを作ってみたので、投稿させていただきます。良ければ使ってみてください。また前回と同様のお約束で、スクリプトの実行に関しては自己責任でお願いします。そのため、実行の前にコードに目を通しておくことをお勧めします。

スクリプトの概要

このスクリプトは、特定の会計年度につき、自動的に、各月ごとに名前を振って、空のフォルダを作成してくれるものとなっています。
ちなみに、各月の名前は、「平成元年度」であれば、「H1.4(1989.4)」~「H2.3(1990.3)」といった具合に、和暦と西暦の両方を持つ名前となります。※「平成31年度」「令和元年度」については、「平成31年4月」=「H31.4(2019.4)」から始まるようになっています。※本スクリプトでは「平成31年度」と「令和元年度」を同じ年度とみなしています。

スクリプトの全コード

'変数を宣言なく使用するのを防止する。
Option Explicit

'変数を宣言する。
Dim er
Dim yr
Dim ad_yr
Dim i
Dim obj_fso
Dim str_curr_pth
Dim str_tgt_pth


'実行開始時に、その旨を伝えるメッセージを表示する。
MsgBox("このスクリプトは 会計年度の月ごとのフォルダーを作成します")

'ユーザーに、作成されるフォルダの名前に含まれる元号を指定してもらう。
'空の入力であれば、本スクリプトの実行を終了する。
er = InputBox("元号をアルファベットで入力してください", "入力")
If (er = "") Then
  MsgBox("フォルダの作成を中断します")
  WScript.Quit()
End If

'指定された値が正しいかチェックをする。
'無効な値であれば、本スクリプトの実行を終了する。
'※本スクリプトでは、「平成」か「令和」についてのみ有効。
If ((er <> "h") And (er <> "r") And (er <> "H") And (er <> "R")) Then
  MsgBox("元号は「平成[h][H]」か「令和[r][R]」としてください")
  MsgBox("フォルダの作成を中断します")
  WScript.Quit()
End If

'ユーザーにフォルダの名前に含まれる年度を指定してもらう。
'空の入力であれば、本スクリプトの実行を終了する。
yr =  InputBox("年度を入力してください", "入力")
If (yr = "") Then
  MsgBox("フォルダの作成を中断します")
  WScript.Quit()
End If

'ユーザーから指定された年度が[0]ならば、
'その旨を伝えるメッセージを表示し、本スクリプトの実行を終了する。
If (yr <= 0)Then
  MsgBox("年度は「[0]より大きな値」としてください")
  MsgBox("フォルダの作成を中断します")
  WScript.Quit()
End If

'指定された元号が[h][H]、かつ、年度が[31]より大きいならば、
'その旨を伝えるメッセージを表示し、本スクリプトの実行を終了する。
If (((er = "h") Or (er = "H")) And (yr > 31))Then
  MsgBox("「平成」の年度は「[31]以下の値」としてください")
  MsgBox("フォルダの作成を中断します")
  WScript.Quit()
End If

'ユーザーから指定された値を基に西暦の年度を計算する。
'※元号が「平成」と指定された場合の処理。
If ((er = "h") Or (er = "H")) Then
  ad_yr = yr + (1989 - 1)
End If

'ユーザーから指定された値を基に西暦の年度を計算する。
'※元号が「令和」と指定された場合の処理。
If ((er = "r") Or (er = "R")) Then
  ad_yr = yr + (2019 - 1)
End If


'フォルダを作成するのに必要なオブジェクトを取得する。※FSOのこと
'フォルダが作成される場所は、本スクリプトのあるフォルダとする。
Set obj_fso = createObject("Scripting.FileSystemObject")
str_curr_pth = obj_fso.getParentFolderName(WScript.ScriptFullName) & "/"


'以下は、ユーザーから指定された元号と年度を基に、
'フォルダの名前を決定し、その名前のフォルダを作成する。
'※「平成31年度」「令和元年度」である場合は特殊な処理をする。
'※「平成31年度」と「令和元年度」を同じ年としてみなす。
If ((((er = "h") Or (er = "H")) And (yr = 31)) Or (((er = "r") Or (er = "R")) And (yr = 1))) Then
  str_tgt_pth = str_curr_pth & "H" & "31" & "." & "4" & "(" & ad_yr & "." & "4" & ")"
  if not obj_fso.FolderExists(str_tgt_pth) Then
    obj_fso.CreateFolder(str_tgt_pth)
  end if

  for i = 5 to 12
    str_tgt_pth = str_curr_pth & "R" & "1" & "." & i & "(" & ad_yr & "." & i & ")"
    if not obj_fso.FolderExists(str_tgt_pth) Then
      obj_fso.CreateFolder(str_tgt_pth)
    end if
  next

  for i = 1 to 3
    str_tgt_pth = str_curr_pth & "R" & "2" & "." & i & "(" & (ad_yr + 1) & "." & i & ")"
    if not obj_fso.FolderExists(str_tgt_pth) Then
      obj_fso.CreateFolder(str_tgt_pth)
    end if
  next

Else
  for i = 4 to 12
    str_tgt_pth = str_curr_pth & UCase(er) & yr & "." & i & "(" & ad_yr & "." & i & ")"
    if not obj_fso.FolderExists(str_tgt_pth) Then
      obj_fso.CreateFolder(str_tgt_pth)
    end if
  next

  for i = 1 to 3
    str_tgt_pth = str_curr_pth & UCase(er) & (yr + 1) & "." & i & "(" & (ad_yr + 1) & "." & i & ")"
    if not obj_fso.FolderExists(str_tgt_pth) Then
      obj_fso.CreateFolder(str_tgt_pth)
    end if
  next
End If


'指定された元号と年度に基づいた名前のフォルダを作成する処理が完了したら、
'最後に、その旨を伝えるメッセージを表示し、本スクリプトの実行を終了する。
MsgBox("フォルダの作成が完了しました")
WScript.Quit()

おわりに

いかがだったでしょうか。筆者はなにぶん技術的に未熟で拙いので、このスクリプトを書くのにも2時間以上もかかってしまいました。とても業務中では許される時間ではありませんね(笑)。VBScriptのコードを書くのにもこれだけ時間がかかってしまうので本命のJavaでは目も当てられません(・・・トホホ)。そんな筆者が書いたスクリプトが少しでも読者様のお役に立てれば幸いです。それではまた。

akihiro-morishita
10代の頃からプログラマーに憧れ、 将来はゲームプログラムを作りたいと思い、はや20年・・・。 いまだ夢は果たせず。 今は・・・SQL→Javaという流れで勉強中!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away