02-VBScript

VBScriptを利用したファイルの複製(Windows11)(Part.2)

目標

前回の記事で扱ったプログラムの中身を理解できる。

VBScriptプログラム(再掲載)

VBScriptプログラム

ファイル名:「NewFile.vbs」

Option Explicit

Dim objFSO, FileTitle
Set objFSO = CreateObject( "Scripting.FileSystemObject" )

'-------- 日付を取得--------
FileTitle = Date
FileTitle = mid(FileTitle,1,4) & mid(FileTitle,6,2)

'------- 原本から新規のファイルを作成 --------
If (objFSO.FileExists("..\WORKSPACE\" & FileTitle & ".xlsm") = False) Then
    objFSO.CopyFile ".\sample.xlsm" , "..\WORKSPACE\" & FileTitle & ".xlsm"
End If

Set objFSO = Nothing

VBScriptプログラムの内容

Option Explicitとは

Option Explicit はVBAと同じく変数の宣言を強制させるプログラムです。これがあると、プログラム中に宣言していない変数の利用を禁止することが出来ます。バグの発生を減らすために必要な宣言です。基本的に記述必須です。

Dim 変数名

Dimステートメントも使い方はVBAとほぼ同じです。「Dim+変数名」として利用します。但し、VBScriptは動的型付けとして変数を扱うのでVBAのよう「As String」などはつけません

VBScriptの場合

Dim Something

VBAの場合

Dim Something As String

Set objFSO = CreateObject( “Scripting.FileSystemObject” )

Set objFOS = オブジェクト

VBAと意味は変わりません。オブジェクトを代入する場合はSetステートメントを利用します。変数をDimで宣言してSetで代入すとという二段階の手順が必要です。

CreateObject(“引数”)

引数にセットしたオブジェクトの使用可能オブジェクトを作成します

Scripting.FileSystemObject

引数の「Scripting.FileSystemObject」はCOMオブジェクトのひとつでファイルシステムオブジェクトです。COMオブジェクトは多機能なプログラムのセットです。今回はその中でファイルの作成や削除などを行うことのできるファイルシステムオブジェクトを利用します。このオブジェクトをCreateObject(“引数”)で複製して利用します。

FileTitle = Date

Dateは関数です。

Date関数は現在の日時を「yyyy/mm/dd」の形式で値を返します。

ここでは、変数FileTitleに日時を代入しています。

FileTitle = mid(FileTitle,1,4) & mid(FileTitle,6,2)

midは関数です。

mid関数は「指定文字列」の「X番目」から「Y文字」を取り出します。

使用方法はmid(「指定文字列」もしくは「変数」,「X番目」,「Y文字」)です。

mid(FileTitle,1,4):はFileTitleに入った2022/11/12の1文字目から4つという意味で「2022」を取得します。

mid(FileTitle,6,2):はFileTitleに入った2022/11/12の6文字目から2つという意味で「11」を取得します。

※関数の1文字目は小文字でも大文字「Mid((FileTitle,1,4)」でも構いません。

If (objFSO.FileExists(“..\WORKSPACE\” & FileTitle & “.xlsm”) = False) Then

IfステートメントはVBAと基本的に変わりません。但し、条件部分の記述については「()丸カッコ」が必要になります。

Ifステートメント

VBScriptの場合

If (条件) Then

処理

End if

VBAの場合

If 条件 Then

処理

End if

objFSO.FileExists(“ファイル名”)

FileExists()メソッドは引数で指定したファイル名が存在しているかを確認するメソッドです。

FileExists()メソッドはファイルシステムオブジェクトが持っている機能のひとつです。実は複製したobjFSOの中にはファイルシステムオブジェクトで準備された機能もごっそりと複製され(取り込まれ)てきます。FileExists()メソッドもその中のひとつとなります。

ここではFileExistsメッソドをIfステートメントの条件で利用して、該当ファイルが存在していない時だけ新規ファイルの作成をするようにしています。そうしないと不用意に新規ファイルの生成が行われてしまうことになります。

仮に「202302.xlsm」を月の初めに生成して、2月の間そのファイルを利用して作業したとします。そうすると当然ですが「202302.xlsm」には沢山のデータの入力をしてきたことになります。ここで11月中にもう一度このVBScriptが動くと、「202302.xlsm」のファイルが新しく生成されることになります。VBScriptを利用したファイルの複製では「202302.xlsm」のファイルが新規で作成されると、これまでの「202302.xlsm」が上書きされてしまいます。つまり作業中のファイルがまっさらなファイルに置き換えられてしまうことになります。

なのでまず、ファイルが存在していないかをチェックして「なければ作成」「あれば何もしない」と制御構文を利用して分岐処理をおこなっています。

“..\WORKSPACE\” & FileTitle & “.xlsm”

引数部分ではファイルへのパスを記述します。パスとはファルダ階層を含めたファイルまでの通り道のことになります。下にエクスプローラーのキャプチャにある赤枠部分がパスということになります。

この「C:\Users\appsg\Desktop\WORKSPACE」の意味はCドライブの中にある「Users」フォルダの中の「appsg」フォルダの中の「Desktop」フォルダの中の「WORKSPACE」フォルダとなります。

パスの表現方法は2種類

「絶対パス」と「相対パス」

絶対パス…上の画面キャプチャのように最上位からの全ての通り道を記述する方法を「絶対パス」といいます。

相対パス…アクティブなフォルダ(またはファイルが存在いているフォルダ)から指定する通り道を「相対パス」といいます。今回のプログラムの引数には相対パスを利用しています。

相対パスでは「.\」と「..\」の記述がよく出てきます。それぞれ以下の意味となります。

  • 「.\」:同じフォルダ内という表現
  • 「..\」:ひとつ上のフォルダという表現

..\はひとつうえのフォルダに戻るという意味なので、「”..\WORKSPACE\” & FileTitle & “.xlsm”」はNewFile.vbsの位置からひとつ上のフォルダに戻って、そこから「WORKSPACE」フォルダへ入った、「FileTitle & “.xlsm”」のファイルという意味になります。

objFSO.CopyFile “.\sample.xlsm” , “..\WORKSPACE\” & FileTitle & “.xlsm”

CopyFile()メソッドは1つ目の引数で指定したファイルを2つ目で指定した位置(ファルダ階層+ファイル名)にコピーするメソッドです。

objFSO.CopyFile “元のファイル” , “コピー先ファイル”

objFSO.CopyFile “.\sample.xlsm” , “..\WORKSPACE\” & FileTitle & “.xlsm”

今回はNewFile.vbsと同じフォルダにある「”.\sample.xlsm”」を「 “..\WORKSPACE\” & FileTitle & “.xlsm”」へ複製するという意味になります。

End If

Ifステートメントの終わりにつけます。

「Set オブジェクト = Nothing」

「Set オブジェクト = Nothing」でオブジェクトを格納したメモリを開放します。これはオブジェクトが利用しているメモリ領域について空にする作業です。

プログラムの稼働を終えた後は、ExcelObjのようなオブジェクトはパソコン上で使用されることはない(邪魔になる)のでメモリを開放します。

今回は以上となります。

VBAのユーザーフォームの記事へはこちらのボタンをご利用ください。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
02-VBScript

VBScript | ファイルコピーの自動化/タイトルを日付で出力(1)

2022年11月12日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
02-VBScript

VBScript、Windows10のエクスプローラーの学習とタスクスケジューラを使った自動化ツールの作成(4)

2022年4月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
02-VBScript

VBScript、Windows10のエクスプローラーの学習とタスクスケジューラを使った自動化ツールの作成(2)

2022年4月11日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site