Excel VBA:ファイル名の自動作成2012.09.27 更新:2024.11.26
GetSaveAsFilenameメソッド等で指定できるファイル名を、自動作成するサンプルコードとメモです。
ポイント
・日付の取得
・時刻の取得
・書式の変換
・GetSaveAsFilenameメソッド
ファイル名を自動作成するために、Date・Time関数を使用する。それらの書式を変換し、繋げることで一意の文字列にする。
Excelマクロ管理ツール
サンプルコード
ファイル名を自動作成し、「名前をつけて保存」のダイアログボックスに設定する。
'----------------------------------------------------------------- '[名前をつけて保存]ダイアログボックスに自動生成したファイル名を設定 '----------------------------------------------------------------- ' '[作成日]2012.09.27 [更新日]2024.11.26 ' https://excel.syogyoumujou.com/memorandum/getsaveasfilename.html '----------------------------------------------------------------- Sub ファイル名を自動生成しダイアログボックスの初期ファイル名に設定() '--------------------------------------- ' 定数設定 '--------------------------------------- ' 名前を付けて保存ダイアログボックス用 Const L_FILE_FILTER As String = "JPG,*.jpg,BMP,*.bmp,TIFF,*.tif" ' ファイルフィルター Const L_FILTER_INDEX As Long = 1 ' フィルターインデックス Const L_DIALOG_TITLE As String = "画像ファイルの保存名を設定してしてください" ' ダイアログボックスタイトル ' ベースとなるファイル名 Const L_BASENAME As String = "サンプル" '--------------------------------------- ' ベースとなるファイル名表示 '--------------------------------------- MsgBox L_BASENAME, vbInformation, "ベースとなるファイル名" '--------------------------------------- ' ファイル名自動生成 '--------------------------------------- Dim strFileName As String '《対象文字列に日時を追加》 ' ・ 引数1:対象文字列 ' ・ 引数2:日付追加フラグ(True:日付を追加する False:日付を追加しない) ' ・ 引数3:時刻追加フラグ(True:時刻を追加する False:時刻を追加しない) ' ・ 引数4:対象文字列、日付、時刻の区切り文字(省略した場合は"_") strFileName = addDateAndTimeToString(L_BASENAME, True, False) '--------------------------------------- ' 自動生成されたファイル名表示 '--------------------------------------- MsgBox strFileName, vbInformation, "自動生成されたファイル名" '--------------------------------------- ' ダイアログボックス表示 '--------------------------------------- Dim varFileName As Variant '《名前をつけて保存ダイアログボックス》 ' ・ 引数1:初期ファイル名 ' ・ 引数2:ファイルフィルター ' ・ 引数3:ファイルインデックス(既定で表示するフィルター文字列の指定) ' ・ 引数4:ダイアログボックスタイトル(省略した場合は"名前を付けて保存") ' ・ 引数5:ボタンテキスト(Macintosh用のため使用しない) varFileName = Application.GetSaveAsFilename(strFileName, _ L_FILE_FILTER, _ L_FILTER_INDEX, _ L_DIALOG_TITLE) '[キャンセル]ボタンをクリックした場合は抜ける If VarType(varFileName) = vbBoolean Then Exit Sub '--------------------------------------- ' ファイルのフルネームを表示 '--------------------------------------- MsgBox varFileName, vbInformation, "ファイルのフルネーム" End Sub
'---------------------------------------------------------------------------------- ' 対象文字列に日時を追加 '---------------------------------------------------------------------------------- '[引数] ' TargetString:対象の文字列 (既定: 空白) ' AddDateFlg :日付の追加設定 True : 追加する (既定) False: 追加しない ' AddTimeFlg :時刻の追加設定 True : 追加する (既定) False : 追加しない ' Separator :対象文字列、日付、時刻の区切り文字(既定:アンダーバー) '[戻り値] ' 対象文字列にプロシージャ実行日付・時刻を追加した文字列 '[作成日]2023.06.05 [更新日]2024.11.26 '---------------------------------------------------------------------------------- Function addDateAndTimeToString(Optional ByVal TargetString As String = "", _ Optional ByVal AddDateFlg As Boolean = True, _ Optional ByVal AddTimeFlg As Boolean = True, _ Optional ByVal Separator As String = "_") As String ' 日付の追加 If AddDateFlg Then TargetString = TargetString & Separator & Format$(Date, "yyyymmdd") End If ' 時刻の追加 If AddTimeFlg Then TargetString = TargetString & Separator & Format$(Time, "hhnnss") End If ' 戻り値の設定 addDateAndTimeToString = TargetString End Function
VBAコードをカラーで印刷・Web掲載するためのツールはこちら
メモ
Date関数
現在のシステムの日付を含むバリアント型 (内部処理形式 Date の Variant) の値を返す。
Time関数
現在のシステムの時刻を含むバリアント型 (内部処理形式 Date の Variant) の値を返す。
Format関数
式(データ)を指定した書式に変換し、その文字列を返す。
構文:Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
[expression]
必ず任意の式を指定。指定したデータは、引数[format]の書式に従って変換。
[format]
省略可能。定義済み書式または表示書式指定文字を指定。
日付/時刻表示書式指定文字 | 説明 |
---|---|
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)。 |
[firstdayofweek]
省略可能。週の 1 日目を指定する定数を指定。
定数 | 値 | 内容 |
---|---|---|
vbUseSystem | 0 | NLSAPIの設定値を使用します。 |
vbSunday | 1 | (既定値)日曜 |
vbMonday | 2 | 月曜 |
vbTuesday | 3 | 火曜 |
vbWednesday | 4 | 水曜 |
vbThursday | 5 | 木曜 |
vbFriday | 6 | 金曜 |
vbSaturday | 7 | 土曜 |
[firstweekofyear]
省略可能。年の第 1 週を指定する定数を指定。
定数 | 値 | 内容 |
---|---|---|
vbUseSystem | 0 | NLSAPIの設定値を使用。 |
vbFirstJan1 | 1 | (既定値)1月1日を含む週から始まる。 |
vbFirstFourDays | 2 | 年の4日以上が含まれる最初の週から始まる。 |
vbFirstFullWeek | 3 | 年のうち、7日が含まれる最初の週から始まる。 |
GetSaveAsFilenameメソッド
ファイル名を取得するために、[名前をつけて保存] ダイアログ ボックスを表示。ダイアログボックスで指定したファイルは、実際には保存されず、戻り値にファイルのパスが格納される。
戻り値はVariant型となり、ダイアログボックスでキャンセル等、入力が取り消された場合は「False」が返る。
構文:GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)
[InitialFilename]
既定値として表示するファイル名を指定。省略すると、作業中のブックの名前が使われる。
[FileFilter]
省略可能。ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定。
省略した場合は"すべてのファイル (*.*),*.*"になる。
ファイターはフィルター文字列とファイルタイプ("*.拡張子")がセットとなっており、「,」で区切る構成が基本となっている。
フィルター文字列1,ファイルタイプ1
指定例:テキスト ファイル (*.txt),*.txt"
複数のフィルター文字列を対応させる場合には、「,」で区切り2つ目のフィルター文字列とファイルタイプを追加する。
フィルター文字列1,ファイルタイプ1,フィルター文字列2,ファイルタイプ2
指定例:"テキスト ファイル (*.txt),*.txt,アドイン ファイル (*.xla),*.xla"
フィルター文字列1つに対して複数のファイルタイプを対応させる場合には、ファイルタイプを「;」で区切る。
フィルター文字列1,ファイルタイプ1-a;ファイルタイプ1-b
指定例:"Visual Basic ファイル (*.bas;*.txt),*.bas;*.txt"
すべてのファイルを対象とする場合
指定例:"すべてのファイル (*.*),*.*"
[FilterIndex]
省略可能。引数[FileFilter]で指定したファイルフィルターの中で、何番目を既定値にするかを指定。
この引数すると、最初のファイルフィルター文字列が既定値となる。
[Title]
ダイアログボックスのタイトル。この引数を省略すると "名前をつけて保存" になる。
[ButtonText]
省略可能。Macintosh用の引数。Windowsでは使用しない。
関数名の後の「$」
次の関数は関数名にドル記号「$」を追加すると、文字列型 (String) の値を返す。
これらの関数は、ドル記号を付けずに使用すると、バリアント型(Variant) の値を返す。
使用方法と構文は、文字列型(String)もバリアント型 (Variant)も同じ。
「$」を付けたほうが処理速度が速い。
Chr$ ChrB$ Command$ CurDir$ Date$ Dir$ Error$ Format$ Hex$
Input$ InputB$ LCase$ Left$ LeftB$ LTrim$ Mid$ MidB$ Oct$
Right$ RightB$ RTrim$ Space$ Str$ String$ Time$ Trim$ UCase$
Join関数
配列の各要素を結合して作成される文字列を返す。
構文:Join(sourcearray [, delimiter])
[sourcearray]
必ず指定。結合する文字列を含む 1 次元配列を指定。
[delimiter]
省略可能。戻り値となる文字列を区切るのに使用する文字を指定。
省略すると半角スペース (" ") が使用。