Excel VBA:ファイル名の自動作成2012.09.27 更新:2023.06.07
GetSaveAsFilenameメソッド等で指定できるファイル名を、自動作成するサンプルコードとメモです。
ポイント
・日付の取得
・時刻の取得
・書式の変換
・GetSaveAsFilenameメソッド
ファイル名を自動作成するために、Date・Time関数を使用する。それらの書式を変換し、繋げることで一意の文字列にする。
Excelマクロ管理ツール
サンプルコード
ファイル名を自動作成し、「名前をつけて保存」のダイアログボックスに設定する。
'---------------------------------------------------------------------------------- ' 実行マクロ '---------------------------------------------------------------------------------- Sub ExampleOfUse_AddDateAndTimeToString() 'ファイル名の基準とする文字列 Const C_STRING As String = "サンプル" '名前を付けて保存ダイアログボックスのフィルター Const C_FILTER As String = "JPG,*.jpg,BMP,*.bmp,TIFF,*.tif" '基準文字列に日付を追加(時間は追加しない) Dim strFileName As String strFileName = AddDateAndTimeToString(C_STRING, True, False) '自動生成されたファイル名表示 MsgBox strFileName, vbInformation, "自動生成されたファイル名" '名前を付けて保存ダイアログボックスに自動生成されたファイル名を設定 Dim varFileName As String varFileName = Application.GetSaveAsFilename(InitialFileName:=strFileName, _ FileFilter:=C_FILTER) '「キャンセル」ボタンが押された場合には抜ける If varFileName = "False" Then Exit Sub 'ファイルのフルネームを表示 MsgBox varFileName, vbInformation, "ファイルのフルネーム" End Sub
'---------------------------------------------------------------------------------- ' 対象文字列に日時を追加するプロシージャ '---------------------------------------------------------------------------------- '[引数] ' TargetString:対象の文字列 (既定: 空白) ' AddDate :日付の追加設定 True : 追加する (既定) False: 追加しない ' AddTime :時間の追加設定 True : 追加する (既定) False : 追加しない ' Separator :対象文字列、日、時間の区切り文字(既定:アンダーバー) '[戻り値] ' 対象文字列にプロシージャ実行日と時間を追加した文字列 '[作成日] ' 2023/06/05 '---------------------------------------------------------------------------------- Function AddDateAndTimeToString(Optional TargetString As String = "", _ Optional AddDate As Boolean = True, _ Optional AddTime As Boolean = True, _ Optional Separator As String = "_") As String Dim strValue As String strValue = TargetString If AddDate Then strValue = strValue & Separator & Format$(Date, "yyyymmdd") End If If AddTime Then strValue = strValue & Separator & Format$(Time, "hhnnss") End If '対象文字列に日時を追加 AddDateAndTimeToString = strValue End Function
メモ
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)。
GetSaveAsFilenameメソッド
ファイル名を取得するために、[名前をつけて保存] ダイアログ ボックスを表示。ダイアログボックスで指定したファイルは、実際には保存されず、戻り値にファイルのパスが格納される。
戻り値はVariant型となり、ダイアログボックスでキャンセル等、入力が取り消された場合は「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"
・(省略):"すべてのファイル (*.*)"
「$」の付く関数
Join関数
配列の各要素を結合して作成される文字列を返す。
構文:Join(sourcearray [, delimiter])
[sourcearray]
必ず指定。結合する文字列を含む 1 次元配列を指定。
[delimiter]
省略可能。戻り値となる文字列を区切るのに使用する文字を指定。
省略すると半角スペース (" ") が使用。