• ベストアンサー

excelvbaのweekday関数の比較

下記のようなプログラムを書きましたが、 weekday関数の戻り値との比較ができません。 お分かりになる方、ご教授お願いします。 フォームには、 コンボボックス "曜日" コマンドボタン "比較" があるとします。 Private Sub UserForm_Initialize() 'コンボボックスのプロパティ設定 With 曜日 .Style = fmStyleDropDownList .ColumnCount = 2 .ColumnWidths = "0;30" .TextColumn = 2 .BoundColumn = 1 .ListWidth = 30 End With '曜日データの設定 With 曜日 For i = 1 To 7 .AddItem i '戻り値は数値 .List(i - 1, 1) = WeekdayName(i, True) '表示は文字列 Next i End With End Sub Private Sub 比較_Click() Dim 開始日付 As Date 開始日付 = DateSerial(2008, 4, 1) Do Until Weekday(開始日付) = 曜日 開始日付 = 開始日付 + 1 Loop End Sub 上記の処理で、開始日付を選択された曜日までインクリメントさせたいのですが、 Doの比較が一致せず、オーバーフローになってしまいます。 いろいろ調べましたが、何がいけないのかさっぱりわかりません。 ちなみに、Dateserialの中の数値も、 コンボボックスで選択するように作成しています。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.1

Variant型の数値(Weekday(開始日付)) と Variant型の文字列(曜日.Value)は、等しくなりませんよ!! Private Sub 比較_Click() Dim 開始日付 As Date 開始日付 = DateSerial(2008, 4, 1) Do Until Weekday(開始日付) = CInt(曜日.Value) '  どちらかを型変換してあげましょう '  それから、プロパティは、付けた方がよいですよ!! 開始日付 = 開始日付 + 1 Loop MsgBox 開始日付 End Sub

ferc
質問者

お礼

早速ご回答していただき、ありがとうございます。 返答が遅くなりまして申し訳ありません。 コンボボックスから帰ってくる値の型までは、 気にしたことがありませんでした。 変数には普段から型宣言をしているため、 Variant型については意識したことがありませんでした。 教えていただいたとおり、できました。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 そのループの部分は、 開始日付 = 開始日付 + (CInt(曜日.Value) - Weekday(開始日付)) Mod 7 という式に置き換えられると思いますから、わざわざループしなくてもよいような気がしますね。

ferc
質問者

お礼

回答ありがとうございます。 返答が遅くなり、申し訳ありません。 新しい方法を教えていただきありがとうございました。 後にプログラムを見たときにも、処理がすぐわかるように作っていましたが、 教えていただいた方法も参考にしたいと思います。 ありがとうございました。

  • suz83238
  • ベストアンサー率30% (197/656)
回答No.2

Do Until Weekday(開始日付) = 曜日 これを Do Until Weekday(開始日付) = 曜日.ListIndex + 1 にしてみればどう?

ferc
質問者

お礼

すみません。 お礼を補足に記載してしまいました。 失礼しました。

ferc
質問者

補足

回答ありがとうございます。 返答が遅くなり、申し訳ありません。 新しい方法を教えていただきありがとうございました。 参考にさせていただきます。