エクセル練習問題:日付関連の計算(VBA)


スポンサードリンク

問題     topへ

解答例    topへ

問題1の解答例    topへ


B C D E F
2 和暦
3 2011 5 3 平成23年5月3日
4 2011 7 13 平成23年7月13日
5 2011 11 23 平成23年11月23日
  1. DateSerial関数を使って日付のシリアル値にし、表示形式で和暦を表示します。
    Sub test10()
      Dim i As Long
        For i = 3 To 5
          Cells(i, 6).Value = DateSerial(Cells(i, 2).Value, Cells(i, 3).Value, Cells(i, 4).Value)
          Cells(i, 6).NumberFormatLocal = "ggge年m月d日"
        Next i
    End Sub
  2. セルに日付形式の値を入れて、Excelが日付データとして自動でシリアル値の変換することを利用した例です。
    • 年/月/日 のような日付形式のデータが入力されると、Excelは日付データと認識してシリアル値に変換します。
    Sub test11()
      Dim i As Long
        For i = 3 To 5
          Cells(i, 6).Value = Cells(i, 2).Value & "/" & Cells(i, 3).Value & "/" & Cells(i, 4).Value
          Cells(i, 6).NumberFormatLocal = "ggge年m月d日"
        Next i
    End Sub

問題2の解答例    topへ


B C
2 日付 曜日
3 2011/5/3 火曜日
4 2011/7/13 水曜日
5 2011/11/23 水曜日
  1. WeekdayName関数、Weekday関数を使ってセルに曜日を入力します。
    • 構文:Weekday(date, [firstdayofweek])
      構文:WeekdayName(weekday, abbreviate, firstdayofweek)
      WeekdayName  Weekday に説明がありますので参照してください。
    Sub test20()
      Dim i As Long
        For i = 3 To 5
          Cells(i, 3).Value = WeekdayName(Weekday(Cells(i, 2).Value))
        Next i
    End Sub
  2. Format関数で表示形式を使って曜日を表示する例です。
    • 構文:Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
      Format関数 に説明がありますので参照してください。
    Sub test21()
      Dim i As Long
        For i = 3 To 5
          Cells(i, 4).Value = Format(Cells(i, 2).Value, "aaaa")
        Next i
    End Sub

問題3の解答例    topへ


B C D
2 日付 曜日 提出期限日
3 2011/6/10 2011/6/13
4 2011/7/5 2011/7/11
5 2011/8/8 2011/8/15
  1. 最大7日後の日付なので、元の日付に1づつ加え、Format関数で曜日を求め"月"となる日までループしています。
    "月"となった日付が求める日付になりますので、セルにその値を書き込み、ループから抜けています。
    Sub test30()
      Dim i As Long, j As Long
        For i = 3 To 5
          For j = 1 To 7
            If Format(Cells(i, 2).Value + j, "aaa") = "月" Then
              Cells(i, 4).Value = Cells(i, 2).Value + j
              Exit For
            End If
          Next j
        Next i
    End Sub
  2. Weekday関数で曜日を求め、その曜日に応じた日数を加えるという方法です。
    Sub test31()
      Dim i As Long, j As Long
      Dim d As Integer
        For i = 3 To 5
          Select Case Weekday(Cells(i, 2).Value)
            Case 1
              d = 1
            Case 2
              d = 7
            Case 3
              d = 6
            Case 4
              d = 5
            Case 5
              d = 4
            Case 6
              d = 3
            Case 7
              d = 2
          End Select
          Cells(i, 4).Value = Cells(i, 2).Value + d
        Next i
    End Sub
  3. Weekday関数で月曜日から開始したケースでは、8-Weekday(Cells(i, 2).Value, 2) を加えることで求めることができます。
    Sub test32()
      Dim i As Long, j As Long
        For i = 3 To 5
          Cells(i, 4).Value = Cells(i, 2).Value + 8 - Weekday(Cells(i, 2).Value, 2)
        Next i
    End Sub

スポンサードリンク



よねさんのExcelとWordの使い方エクセル練習問題:目次|日付関連の計算(VBA)