QA@IT
«回答へ戻る

545
             dt1 = DateSerial(Yr, Mn, 1)
         End If
         dt2 = DateAdd("d", -1, DateAdd("m", 1, dt1))
-        Sheet.Range("C2") = Format(dt1, "yyyy.mm.dd") & "~" & Format(dt2, "yyyy.mm.dd")
+        Sheet.Range("C2") = Format(dt1, "yyyy.m.d") & "~" & Format(dt2, "yyyy.m.d")
     Next
 ```

myNumから年は分かりますので
年まで確定したとこから各シートに値を設定するところまでです。

月はシート名を半角にしてValで数値を取得すればよいです。
DateSerialのところで1日の日付値を取得。1月だけ年を+1です。
DateAddのところで末日を取得しています。1日から1ヶ月後の前日で
どんな月でも末日が求められます。
最後にフォーマットしてセルに設定しています。
これを各シートに対し行えば希望の動きになると思います。

    Dim Yr As Integer
    Dim Mn As Integer
    Dim Sheet As Worksheet
    Dim dt1 As Date
    Dim dt2 As Date

    Yr = 2014

    For Each Sheet In ThisWorkbook.Sheets
        Mn = Val(StrConv(Sheet.Name, vbNarrow))
        If Mn = 1 Then
            dt1 = DateSerial(Yr + 1, Mn, 1)
        Else
            dt1 = DateSerial(Yr, Mn, 1)
        End If
        dt2 = DateAdd("d", -1, DateAdd("m", 1, dt1))
        Sheet.Range("C2") = Format(dt1, "yyyy.m.d") & "~" & Format(dt2, "yyyy.m.d")
    Next
myNumから年は分かりますので
年まで確定したとこから各シートに値を設定するところまでです。

月はシート名を半角にしてValで数値を取得すればよいです。
DateSerialのところで1日の日付値を取得。1月だけ年を+1です。
DateAddのところで末日を取得しています。1日から1ヶ月後の前日で
どんな月でも末日が求められます。
最後にフォーマットしてセルに設定しています。
これを各シートに対し行えば希望の動きになると思います。

```
    Dim Yr As Integer
    Dim Mn As Integer
    Dim Sheet As Worksheet
    Dim dt1 As Date
    Dim dt2 As Date
    
    Yr = 2014
    
    For Each Sheet In ThisWorkbook.Sheets
        Mn = Val(StrConv(Sheet.Name, vbNarrow))
        If Mn = 1 Then
            dt1 = DateSerial(Yr + 1, Mn, 1)
        Else
            dt1 = DateSerial(Yr, Mn, 1)
        End If
        dt2 = DateAdd("d", -1, DateAdd("m", 1, dt1))
        Sheet.Range("C2") = Format(dt1, "yyyy.m.d") & "~" & Format(dt2, "yyyy.m.d")
    Next
```

回答を投稿

myNumから年は分かりますので
年まで確定したとこから各シートに値を設定するところまでです。

月はシート名を半角にしてValで数値を取得すればよいです。
DateSerialのところで1日の日付値を取得。1月だけ年を+1です。
DateAddのところで末日を取得しています。1日から1ヶ月後の前日で
どんな月でも末日が求められます。
最後にフォーマットしてセルに設定しています。
これを各シートに対し行えば希望の動きになると思います。

    Dim Yr As Integer
    Dim Mn As Integer
    Dim Sheet As Worksheet
    Dim dt1 As Date
    Dim dt2 As Date

    Yr = 2014

    For Each Sheet In ThisWorkbook.Sheets
        Mn = Val(StrConv(Sheet.Name, vbNarrow))
        If Mn = 1 Then
            dt1 = DateSerial(Yr + 1, Mn, 1)
        Else
            dt1 = DateSerial(Yr, Mn, 1)
        End If
        dt2 = DateAdd("d", -1, DateAdd("m", 1, dt1))
        Sheet.Range("C2") = Format(dt1, "yyyy.mm.dd") & "~" & Format(dt2, "yyyy.mm.dd")
    Next
myNumから年は分かりますので
年まで確定したとこから各シートに値を設定するところまでです。

月はシート名を半角にしてValで数値を取得すればよいです。
DateSerialのところで1日の日付値を取得。1月だけ年を+1です。
DateAddのところで末日を取得しています。1日から1ヶ月後の前日で
どんな月でも末日が求められます。
最後にフォーマットしてセルに設定しています。
これを各シートに対し行えば希望の動きになると思います。

```
    Dim Yr As Integer
    Dim Mn As Integer
    Dim Sheet As Worksheet
    Dim dt1 As Date
    Dim dt2 As Date
    
    Yr = 2014
    
    For Each Sheet In ThisWorkbook.Sheets
        Mn = Val(StrConv(Sheet.Name, vbNarrow))
        If Mn = 1 Then
            dt1 = DateSerial(Yr + 1, Mn, 1)
        Else
            dt1 = DateSerial(Yr, Mn, 1)
        End If
        dt2 = DateAdd("d", -1, DateAdd("m", 1, dt1))
        Sheet.Range("C2") = Format(dt1, "yyyy.mm.dd") & "~" & Format(dt2, "yyyy.mm.dd")
    Next
```