VBA100本ノック 7本目:日付データの扱い

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。
f:id:Infoment:20220112233706p:plain

「何をもって日付とみなすか」が、人によって解釈が変わりそう。
今回は、IsDate関数で日付とみなされるかどうかで判別するとしよう。

当月末の求め方は、色々と方法がありそう。そこで、下記の作戦で求める
ことにした。

  1. IsDate関数で判別。
  2. 日付とみなされたものの、翌月1日を求める(EDate関数など)
  3. 翌月1日から一日前(つまり当月最終日)を求める。

作成したものがこちら。

Sub VBA_100Knock_007()
    ' 日付の範囲。
    Dim DateRange As Range
    Set DateRange = Range("A2:A10")
    
    Dim r As Range
        For Each r In DateRange
            If IsDate(r.Value) Then
                With r.Offset(, 1)
                    ' まず、当月1日にする。
                    .Value = Format(r, "yyyy/mm/1")
                    ' 次いで、翌月1日から1日引いて、当月末にする。
                    .Value = Format(WorksheetFunction.EDate(.Value, 1) - 1, "mmdd")
                    .NumberFormatLocal = "0000"
                End With
            End If
        Next
End Sub


解答を実行した結果がこちら。
f:id:Infoment:20220112235453g:plain

思った以上に、多くの書き方を日付と認識してくれることを知って、
改めて勉強になった。

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。