完成イメージ
デフォルト値を前月の年・月にして、ユーザー入力は受け付けない状態
規定値にVBAの式が使える
規定値の設定内容
前月日付をそのまま(yyyy/m/dのように)表示したい場合
=DateAdd("m",-1,Date())
とするとOK(DateAdd関数の詳細な説明は下部へ)
年だけ取得したいのでフォーマット関数を組み合わせる(Format関数の詳細な説明は下部へ)
=Format(ここに元になる日付,"yyyy")
のようにすると西暦4桁だけ取得できるので、今回の例では以下のようになる
=Format(DateAdd("m",-1,Date()),"yyyy")
月も同じように以下のように設定でOK
=Format(DateAdd("m",-1,Date()),"m")
DateAdd関数
VBAのDateAdd関数は、日付に対して指定された時間間隔を追加または減算するために使用されます。DateAdd関数は、新しい日付を返します。
構文
DateAdd(interval, number, date)
パラメータ
- interval: 必須。時間間隔を指定する文字列式。以下のいずれかの文字列を使用します:
-- "yyyy": 年
-- "q": 四半期
-- "m": 月
-- "y": 日(年間の日数)
-- "d": 日
-- "w": 平日
-- "ww": 週
-- "h": 時
-- "n": 分
-- "s": 秒 - number: 必須。追加または減算する時間間隔の数を指定する数値。正の値を指定すると時間を追加し、負の値を指定すると時間を減算します。
- date: 必須。基準となる日付を指定するVariant(Date)型の値。
使用例
日付に1ヶ月を追加
Sub AddOneMonth()
Dim initialDate As Date
Dim newDate As Date
initialDate = #2024/07/22#
newDate = DateAdd("m", 1, initialDate)
MsgBox "新しい日付は " & newDate
End Sub
日付から7日を減算
Sub SubtractSevenDays()
Dim initialDate As Date
Dim newDate As Date
initialDate = #2024/07/22#
newDate = DateAdd("d", -7, initialDate)
MsgBox "新しい日付は " & newDate
End Sub
時刻に2時間を追加
Sub AddTwoHours()
Dim initialTime As Date
Dim newTime As Date
initialTime = #10:00:00 AM#
newTime = DateAdd("h", 2, initialTime)
MsgBox "新しい時刻は " & newTime
End Sub
Format関数
VBAのFormat
関数は、数値、日付、時刻、文字列などのデータを指定した形式に変換するために使用されます。Format
関数を使用することで、データを表示する際のフォーマットを柔軟にカスタマイズできます。
構文
Format(expression, [format])
パラメータ
- expression: 必須。フォーマットするデータを指定します。数値、日付、時刻、文字列などが指定できます。
-
format: 任意。表示形式を指定する文字列式。省略した場合、
expression
は標準の書式で表示されます。
使用例
数値のフォーマット
-
小数点以下の桁数を指定
Sub FormatNumberExample() Dim num As Double num = 1234.56789 MsgBox Format(num, "0.00") ' 結果: 1234.57 End Sub
-
通貨形式
Sub FormatCurrencyExample() Dim num As Double num = 1234.56789 MsgBox Format(num, "Currency") ' 結果: $1,234.57 End Sub
-
パーセンテージ形式
Sub FormatPercentageExample() Dim num As Double num = 0.1234 MsgBox Format(num, "0.00%") ' 結果: 12.34% End Sub
日付と時刻のフォーマット
-
標準の日付形式
Sub FormatDateExample() Dim dt As Date dt = #2024-07-22# MsgBox Format(dt, "mm/dd/yyyy") ' 結果: 07/22/2024 End Sub
-
標準の時刻形式
Sub FormatTimeExample() Dim tm As Date tm = #10:15:30 AM# MsgBox Format(tm, "hh:nn:ss AM/PM") ' 結果: 10:15:30 AM End Sub
-
カスタム日付時刻形式
Sub FormatDateTimeExample() Dim dt As Date dt = #2024-07-22 10:15:30 AM# MsgBox Format(dt, "dddd, mmmm d, yyyy hh:nn:ss AM/PM") ' 結果: Monday, July 22, 2024 10:15:30 AM End Sub
文字列のフォーマット
-
文字列の左寄せ、右寄せ
Sub FormatStringExample() Dim str As String str = "Hello" MsgBox Format(str, "@@@@@@@@") ' 結果: "Hello " (8文字幅のフィールドに左寄せ) End Sub
フォーマット文字列の詳細
数値のフォーマット指定子
-
0
: 数値のプレースホルダー。数値が存在しない場合は0を表示。 -
#
: 数値のプレースホルダー。数値が存在しない場合は何も表示しない。 -
.
: 小数点。 -
,
: 桁区切り文字。
日付と時刻のフォーマット指定子
-
d
: 日を表示(1-31)。 -
dd
: 2桁の日を表示(01-31)。 -
ddd
: 曜日を短縮形で表示(Mon)。 -
dddd
: 曜日を完全な形で表示(Monday)。 -
m
: 月を表示(1-12)。 -
mm
: 2桁の月を表示(01-12)。 -
mmm
: 月を短縮形で表示(Jan)。 -
mmmm
: 月を完全な形で表示(January)。 -
yy
: 2桁の年を表示(00-99)。 -
yyyy
: 4桁の年を表示(1000-9999)。 -
h
: 時を表示(0-23)。 -
hh
: 2桁の時を表示(00-23)。 -
n
: 分を表示(0-59)。 -
nn
: 2桁の分を表示(00-59)。 -
s
: 秒を表示(0-59)。 -
ss
: 2桁の秒を表示(00-59)。 -
AM/PM
: 12時間制で午前/午後を表示。
カスタムフォーマットの例
-
Format(12345.6789, "0.00")
: 結果は12345.68
-
Format(#2024-07-22#, "dd mmm yyyy")
: 結果は22 Jul 2024
-
Format(#10:15:30 AM#, "hh:nn:ss AM/PM")
: 結果は10:15:30 AM
これらのフォーマット指定子を使用することで、データを希望する形式に変換できます。Format
関数は、ユーザーに見やすく、理解しやすい形でデータを表示するのに非常に便利です。