0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

コンボボックスを使って簡易カレンダーフォームを作成する

Last updated at Posted at 2021-11-05

ユーザーフォーム

こんなコンボボックスを入れておく
image.png

コンボボックスの名前は「〆切日」としておき、カレンダーリスト作成の引数にぶち込む
あと2つの引数は

  • 今日から数えた日数
  • 土日を含むか否か
Private Sub UserForm_Initialize()
  ' その他処理
  Call カレンダーリスト作成(〆切日, 180, False)
End Sub

標準モジュール

Option Explicit

Sub カレンダーリスト作成(ByVal obj As Object, 日数, 土日を含むか As Boolean)
  Dim myDate, i
  With obj
      For i = 0 To 日数
        myDate = DateAdd("d", i, Date)
        If 土日判定(myDate) = True Then
          .AddItem 曜日付与(myDate)
        End If
      Next
  End With
End Sub

Private Function 曜日付与(myDate) As String
  Dim 曜日
  曜日 = WeekdayName(Weekday(myDate), True)
  曜日 = "(" & 曜日 & ")"
  曜日付与 = myDate & 曜日
End Function

Private Function 土日判定(myDate) As Boolean
  Dim 曜日
  Dim flg As Boolean
  曜日 = WeekdayName(Weekday(myDate), True)
  Select Case 曜日
    Case "土", "日": flg = False
    Case Else: flg = True
  End Select
  土日判定 = flg
End Function

おまけ 日付の形式変換関数

Function Date2yymmdd(myDate)
  Dim myDt As String
  myDate = Split(myDate, "(")(0)
  myDt = Format(myDate, "yymmdd")
  Date2yymmdd = myDt
  
End Function

Function yymmdd2Date(yymmdd)
  Dim myDt As Date
  myDt = Format(yymmdd, "@@@@/@@/@@")
  yymmdd2Date = 曜日付与(myDt)

End Function

実行するとこんな感じ

image.png

背景が黄色っぽくなってるのは、フォーカス時のみ色を変える別のコード使ってます

リストボックスと比べてコンボボックスだといちいち開きにいかなきゃなのが面倒だけど、
ユーザーフォーム全体のサイズ感はコンパクトになるという利点はあるので好き好きで。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?