• ベストアンサー

指定した日付が、その月の第何週かを求める方法

月曜から日曜の作業内容を 書く報告書作成画面の作成をしています。 処理の一つに、 作成したい週の月曜の年月日を入力し、 日曜までの日付を自動的に画面に出す、 というものがあります。 さらに自動的に出した日曜日の日付から、 報告書作成週はその月の第何週かを求める、 (今月ですと10/6は第1週、10/13は第2週、 10/20は第3週、10/27は第4週、となります) という処理を作成したいのですが、 良いロジックが思い浮かびません。 (処理する月の日付と曜日を配列に入れて、 ループカウントで第何週かを求める、という 方法は思いついたのですが、効率が悪いと思うので…) 何か良いロジックがありましたら、 書き込みをお願い致します。

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

  • ベストアンサー
回答No.12

usi-itiさんへ 何度も書き込みしてすみません。 それと、お礼欄への書き込みは、全ての回答者には、メールが届かないと思います。 Niiさんへの書き込みを知らない回答者もいるのではないでしょうか? 補足は全員に届くようです。 さて本題です。 Niiさんが書いていらっしゃるのと同じなので、実際のプログラムを書いてみます。 フォームに[Text1],[Label1][Label2],[Label3(0)]~[Label3(6)],[Command1]を作成し、 下記のコードを貼り付けて、実行 Text1に日付(日曜日でなくても構いません)を入力し、コマンドボタンを押す Label1に月、Label2に週、Label3(0)~Label3(6)に月~日の日付が表示されます。 今回は、Weekday(Wk_Date, vbMonday)としています。 WeekdayにvbMondayと指定すると、月曜日を1として 火曜日=2,水曜日=3,・・・日曜日=7を返します。 (NiiさんのWeekday(年月日,2)と同じです) Private Sub Command1_Click() Dim i As Integer Dim Wk_Date As Date '入力した日付 Dim Wk_Sun As Date '入力した週の日曜日 Wk_Date = DateValue(Text1) Wk_Sun = Wk_Date + (7 - Weekday(Wk_Date, vbMonday)) '日曜日の日付を求める Label1 = Month(Wk_Sun) & "月" Label2 = (Day(Wk_Sun) - 1) \ 7 + 1 & "週目" For i = 6 To 0 Step -1 Label3(i) = Day(Wk_Sun - (6 - i)) Next i End Sub 必ず日曜日の日付を入力する場合には Wk_Sun = Wk_Date + (7 - Weekday(Wk_Date, vbMonday)) '日曜日の日付を求める は削除するか、 If (Weekday(Wk_date) = 1 ) then 'この場合のWeekdayは日曜日=1になります。 として、日曜日かチェックするようにして下さい。

その他の回答 (14)

回答No.4

>作成したい週の月曜の年月日を入力し、日曜までの日付を自動的に画面に出す、 Private Sub Command1_Click() Dim wk_date As Date wk_date = DateValue(Text1) 'テキストから日付を取り出す For i = 0 To 6 Label1(i) = Day(wk_date) + i Next i End Sub のような感じでいいでしょうか? >さらに自動的に出した日曜日の日付から、報告書作成週はその月の第何週かを求める、 #1さんや、#3さんの補足になってしまいますが、 第1週目は 1~7日 第2週目は 8~14日 ・・・・ これは月の初めが何曜日でも変わらないと思いますので int((day(日付)-1)/7)+1 または (day(日付)-1)\7+1 #3さんの方法は、7日の場合2週目になってしまうと思います。

noname#13477
noname#13477
回答No.3

最初に答えられた方と同じですが。以下でどうでしょうか? 何週目か? = 日曜日の日付 \ 7 + 1 除算を「/」でなく、「\」にすると、少数点以下を切り捨ててくれます。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

まず Weekday 関数を用いて1日の曜日の数字を求めます。 その数字をマイナス1して、知りたい日(日曜日)に足します。 足した数字を7で割って小数点以下を切り捨て、+1すると でてくると思います。 そんなに検証してないので、抜けがあるかもしれません。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

日-1を7で割って、小数以下を切り捨てて、+1する、では駄目?

関連するQ&A