ファイル名の自動作成Year / Date / Time関数を用いたファイル名の自動作成
GetSaveAsFilenameメソッド等で指定できるファイル名を、自動作成するサンプルコードとメモです。
ポイント
・日付の取得
・時刻の取得
・書式の変換
・GetSaveAsFilenameメソッド
ファイル名を自動作成するために、Year・Date・Time関数を使用する。それらの書式を変換し、繋げることで一意の文字列にする。
サンプルコード
ファイル名を自動作成し、「名前をつけて保存」のダイアログを表示
Sub AutoMake_FileName_Sample() Dim strFileName As String Dim varFilePath As Variant Const conFileFilter As String = "PNG,*.png,JPG,*.jpg,GIF,*.gif,BMP,*.bmp,TIFF,*.tif" With Excel.Application strFileName = Make_FileName() MsgBox "作成されたファイル名は:" & strFileName varFilePath = .GetSaveAsFilename(InitialFileName:=strFileName, FileFilter:=conFileFilter) If VarType(varFilePath) = vbBoolean Then Exit Sub If Dir(varFilePath) <> "" Then If MsgBox("上書きしますか?", vbQuestion + vbYesNo, "確認") = vbNo Then Exit Sub End If MsgBox "パス&ファイル名:" & varFilePath End With End Sub
Function Make_FileName() As String Dim datToday As Date Dim datTime As Date Dim strFileName(0 To 7) As String datToday = Date datTime = Time strFileName(0) = Year(datToday) '西暦の取得 strFileName(1) = "_" ' strFileName(2) = Format$(datToday, "mm") '月を2桁に変換 strFileName(3) = Format$(datToday, "dd") '日を2桁に変換 strFileName(4) = "_" ' strFileName(5) = Format$(datTime, "hh") '時を2桁に変換 strFileName(6) = Format$(datTime, "nn") '分を2桁に変換 strFileName(7) = Format$(datTime, "ss") '秒を2桁に変換 Make_FileName = Join$(strFileName, vbNullString) End Function
メモ
Year関数
年を表す値を返す。
構文:Year(date)
[date]
必ず指定。日付を表すバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み
合わせた値を指定する。有効な値を含まない場合は、Null値を返す。
Date関数
現在のシステムの日付を含むバリアント型 (内部処理形式 Date の Variant) の値を返す。
Time関数
現在のシステムの時刻を含むバリアント型 (内部処理形式 Date の Variant) の値を返す。
Format関数
式(データ)を指定した書式に変換し、その文字列を返す。
構文:Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
[expression]
必ず任意の式を指定。指定したデータは、引数[format]の書式に従って変換。
[format]
省略可能。定義済み書式または表示書式指定文字を指定。
[firstdayofweek]
省略可能。週の 1 日目を指定する定数を指定。
【定数 / 値 / 内容】
vbUseSystem / 0 / NLS API の設定値を使用します。
vbSunday / 1 / (既定値) 日曜
vbMonday / 2 / 月曜
vbTuesday / 3 / 火曜
vbWednesday / 4 / 水曜
vbThursday / 5 / 木曜
vbFriday / 6 / 金曜
vbSaturday / 7 / 土曜
[firstweekofyear]
省略可能。年の第 1 週を指定する定数を指定。
【定数 / 値 / 内容】
vbUseSystem / 0 / NLS API の設定値を使用。
vbFirstJan1 / 1 / (既定値) 1 月 1 日を含む週から始まる。
vbFirstFourDays / 2 / 年の 4 日以上が含まれる最初の週から始まる。
vbFirstFullWeek / 3 / 年のうち、7 日が含まれる最初の週から始まる。
【備考:日付/時刻表示書式指定文字(抜粋)】
y 1 年のうちで何日目に当たるかを返す (1 ~ 366)。
yy 西暦の年を下 2 桁の数値で返す (00 ~ 99)。
yyyy 西暦の年を返す (100 ~ 9999)。
m 月を表す数値を返す。1 桁の場合、先頭に 0 が付かない (1 ~ 12)。
mm 月を表す数値を返す。1 桁の場合、先頭に 0 が付く (01 ~ 12)。
mmm 月の名前を英語 (省略形) の文字列に変換して返す (Jan ~ Dec)。
mmmm 月の名前を英語で返す (January ~ December)。
d 日付を返す。1 桁の場合、先頭に 0 が付かない (1 ~ 31)。
dd 日付を返す。1 桁の場合、先頭に 0 が付く (01 ~ 31)。
ddd 曜日を英語 (省略形) で返す (Sun ~ Sat)。
h 時間を返す。1 桁の場合、先頭に 0 が付かない (0 ~ 23)。
hh 時間を返す。1 桁の場合、先頭に 0 が付く (00 ~ 23)。
n 分を返す。1 桁の場合、先頭に 0 が付かない (0 ~ 59)。
nn 分を返す。1 桁の場合、先頭に 0 が付く (00 ~ 59)。
s 秒を返す。1 桁の場合、先頭に 0 が付かない (0 ~ 59)。
ss 秒を返す。1 桁の場合、先頭に 0 が付く (00 ~ 59)。
Join関数
配列の各要素を結合して作成される文字列を返す。
構文:Join(sourcearray [, delimiter])
[sourcearray]
必ず指定。結合する文字列を含む 1 次元配列を指定。
[delimiter]
省略可能。戻り値となる文字列を区切るのに使用する文字を指定。
省略すると半角スペース (" ") が使用。
GetSaveAsFilenameメソッド
ファイル名を取得するために、[名前をつけて保存] ダイアログ ボックスを表示。ダイアログボックスで指定したファイルは、実際には保存されず、返り値にファイルのパスが格納される。ダイアログボックスでキャンセル等、入力が取り消された場合は「False」が返る。
構文:GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)
[InitialFilename]
既定値として表示するファイル名を指定。省略すると、作業中のブックの名前が使われる。
[FileFilter]
省略可能。ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定。
省略した場合は"すべてのファイル (*.*)"になる。
[FilterIndex]
省略可能。引数[FileFilter]で指定したファイルフィルターの中で、何番目を既定値にするかを指定。
この引数すると、最初のファイルフィルター文字列が既定値となる。
[Title]
ダイアログボックスのタイトル。この引数を省略すると "名前をつけて保存" になる。
[ButtonText]
省略可能。Macintosh用の引数。Windowsでは使用しない。
【備考】
[FileFilter]の指定例
・1つのフィルター:"テキスト ファイル (*.txt)"
・1つのフィルターに複数種類のファイル:"Visual Basic ファイル (*.bas;*.txt),*.bas;*.txt"
・2つのフィルター:"テキスト ファイル (*.txt),*.txt,アドイン ファイル (*.xla),*.xla"
・(省略):"すべてのファイル (*.*)"