ACCEESS VBAでフォームのテキストボックスに特定の年月を入れたい

# 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1058523/123b8299-ef63-2495-cd78-2d7bde7bba9d.png)
デフォルト値を前月の年・月にして、ユーザー入力は受け付けない状態

# 規定値にVBAの式が使える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1058523/b87a453c-bb50-752e-73ff-ea5d56a51714.png)
「使用可能」を「はい」にするとユーザー入力も可能になる。

## 規定値の設定内容
前月日付をそのまま（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`関数を使用することで、データを表示する際のフォーマットを柔軟にカスタマイズできます。

### 構文
```vba
Format(expression, [format])
```

### パラメータ
- **expression**: 必須。フォーマットするデータを指定します。数値、日付、時刻、文字列などが指定できます。
- **format**: 任意。表示形式を指定する文字列式。省略した場合、`expression`は標準の書式で表示されます。

### 使用例

#### 数値のフォーマット
1. **小数点以下の桁数を指定**
   ```vba
   Sub FormatNumberExample()
       Dim num As Double
       num = 1234.56789
       MsgBox Format(num, "0.00") ' 結果: 1234.57
   End Sub
   ```

2. **通貨形式**
   ```vba
   Sub FormatCurrencyExample()
       Dim num As Double
       num = 1234.56789
       MsgBox Format(num, "Currency") ' 結果: $1,234.57
   End Sub
   ```

3. **パーセンテージ形式**
   ```vba
   Sub FormatPercentageExample()
       Dim num As Double
       num = 0.1234
       MsgBox Format(num, "0.00%") ' 結果: 12.34%
   End Sub
   ```

#### 日付と時刻のフォーマット
1. **標準の日付形式**
   ```vba
   Sub FormatDateExample()
       Dim dt As Date
       dt = #2024-07-22#
       MsgBox Format(dt, "mm/dd/yyyy") ' 結果: 07/22/2024
   End Sub
   ```

2. **標準の時刻形式**
   ```vba
   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
   ```

3. **カスタム日付時刻形式**
   ```vba
   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
   ```

#### 文字列のフォーマット
1. **文字列の左寄せ、右寄せ**
   ```vba
   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`関数は、ユーザーに見やすく、理解しやすい形でデータを表示するのに非常に便利です。