• ベストアンサー
  • 困ってます

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

月曜から日曜の作業内容を 書く報告書作成画面の作成をしています。 処理の一つに、 作成したい週の月曜の年月日を入力し、 日曜までの日付を自動的に画面に出す、 というものがあります。 さらに自動的に出した日曜日の日付から、 報告書作成週はその月の第何週かを求める、 (今月ですと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.15

takntさんへ う~ん、どうなんでしょう? そうなのかもしれません。 が、「私の周りでは、10月の2週目の月曜日って何日?」 ときけば、14日と回答が返ってきます。 私は、どちらでもいいですけど・・・ こちらの質問者の週の決め方は、補足にもあった通りなので、 他の質問であげてみたらいかがですか? usi-itiさんへ 関係のない、回答を何度も繰り返し、すみません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>回答者の方へ 色々とありがとうございました。 大変参考になりました!

質問者からの補足

>回答者の方へ ありがとうございました。 第何週とか第何曜日とかで 皆様を惑わせてしまいました事を お詫び致します。

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

#6さんへ >体育の日は10月第2週の月曜日になっていると思いますが・・・ >今年の体育の日は、10月14日ですよね? つまんない突っ込みですが、体育の日は 第二月曜日であって、第二週目の月曜ではないと思います。 つまり、その月で 2回目の月曜ということだと思うのですが・・・。

共感・感謝の気持ちを伝えよう!

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

ちょっと質問なんですが、 >今年の11月ですと、 >10/28(月)~11/3 (日)…11月第1週 >11/4 (月)~11/10(日)…11月第2週 >10/11(月)~11/17(日)…11月第3週 >11/18(月)~11/24(日)…11月第4週 この場合、10月28日と 入れたら 11月第一週と出ないとダメなんですよね? 11月25日から11月30日の場合は、12月第一週と出ればいいのでしょうか?

共感・感謝の気持ちを伝えよう!

  • 回答No.11
  • Nii
  • ベストアンサー率48% (79/162)

すみません、なぜか==になってたり、カレンダーを見間違えて、9/25とか書いてたり、+8では・・・ 申し訳御座いません。 とりあえず、 >今年の11月ですと、 >10/28(月)~11/3 (日)…11月第1週 >11/4 (月)~11/10(日)…11月第2週 >10/11(月)~11/17(日)…11月第3週 >11/18(月)~11/24(日)…11月第4週 ですと、 日曜日=年月日-Weekday(年月日,2)+7 月=Month(日曜日) 週=Int(Day(日曜日)*-1/7)*-1 もしくは、 週 =(Day(日曜日)-1)\7+1 でどうでしょう? 後は、 でしたら、月曜日=日曜日-6てな具合でどうでしょう?

共感・感謝の気持ちを伝えよう!

  • 回答No.10
  • Nii
  • ベストアンサー率48% (79/162)

月の境目を第何週にするかが明確になっていないので、見当違いの回答をしている可能性がありますが。 >自動的に出した日曜日の日付から 日曜日 = =年月日-Weekday(年月日)+1 >その月の第何週かを求める 月 = =Month(日曜日) 週 = =Int(Day(日曜日)*-1/7)*-1 ではどうでしょう? 9/25~10/5 9月5週 10/6~10/12 10月1週 になると思います。 9/25~10/5 10月1週にしたい場合は、 日曜日 = =年月日-Weekday(年月日)+8 >日曜までの日付を自動的に画面に は、元になる日曜日から、1づづプラス、もしくはマイナスした値になると思いますが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>回答者の皆様 色々とありがとうございました。 処理の仕様として、月曜~日曜を 1週間とし、日曜を週の切替日として 作成しております。 今年の11月ですと、 10/28(月)~11/3 (日)…11月第1週 11/4 (月)~11/10(日)…11月第2週 10/11(月)~11/17(日)…11月第3週 11/18(月)~11/24(日)…11月第4週 としております。 この辺の記述が抜けていました。 申し訳ありませんでした。 宜しければ、再度書き込みを お待ちしております。

  • 回答No.9

#8の回答 ??? また、新たな考え方がでてきました。 でも、10/6が1週目で、月曜~日曜日ならその考え方が一番しっくりくるような気もします。 変な解説をつけてしまったのでおかしな話題になってしまいましたが、 月曜日~日曜日を基準に考えた場合を想定し、 日曜日のみ考えた場合には、 1週目の日曜日は(1~7) 2週目の日曜日は(8~14) ・・・・になるので、以下私の#4の回答に続く に変更してください。この解説なら問題ない?とおもいます。 他の曜日を考えた場合には、先の回答で述べましたが、 考え方により、式が変わります。

共感・感謝の気持ちを伝えよう!

  • 回答No.8
noname#13477
noname#13477

やっぱり、駄目でした。 7/1 (月)~ 7/7(日)の場合、 7 \ 7 + 1 で、2週になっちゃいます。 7で割り切れると、バグちゃいます。 日曜日の日を、マイナス1しないと駄目みたいです。。。

共感・感謝の気持ちを伝えよう!

  • 回答No.7
noname#13477
noname#13477

日曜日が基準だから、10月の場合、 第1週:9/30 (月) ~ 10/6 (日) 第2週:10/7 (月)~ 10/13(日) 第3週:10/14(月)~ 10/20(日) 第4週:10/21(月) ~ 10/27(日) 第1週:6 \ 7 (=0 少数点以下切捨) + 1 = 1 第2週:13 \ 7 (=1 少数点以下切捨) + 1 = 2 第3週:20 \ 7 (=2 少数点以下切捨) + 1 = 3 第4週:27 \ 7 (=3 少数点以下切捨) + 1 = 4 となると思ったのですが、勘違いでしょうか?!

共感・感謝の気持ちを伝えよう!

  • 回答No.6

#4さんへ 体育の日は10月第2週の月曜日になっていると思いますが・・・ 今年の体育の日は、10月14日ですよね? ということは、第2週は8日~14日というのが正しいと思います。 違っていたらすみません。 質問者のusi-itiさんの考え方もあると思いますので、 1週目をカレンダーの1行目とする考え方でしたら#2さんの方法でいいと思います。 (パッと見ただけなので検証はしていません)

共感・感謝の気持ちを伝えよう!

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

No4の方への疑問ですが・・・。 >#1さんや、#3さんの補足になってしまいますが、 >第1週目は 1~7日 >第2週目は 8~14日 ちなみに 今月(10月)の第二週目は 6日から12日だと思うのですが、 違うのでしょうか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセルスケジュール作成の際に、曜日を固定して日付をその月によって連動させる方法を知っている方いませんか?

    エクセルで横列にスケジュール表を作成しています。月により日付を連動させる方法(WEEKDAY等)の説明はたくさんありますが、逆に月により日付を左右に連動させるようにできませんか? 曜日欄には式入れずそのまま入力。日付欄は、3/1が第1週目の日曜であれば、曜日欄の第1週目の日曜の欄の上に自動的に日付が表示される感じにしたいです。 また、資料の都合上、月ごとに管理していますが、前月&次月それぞれ1週間分の日付も表示させたいです。 A1~  年  月 B1~  前月日付  当月日付 次月日付←月を変更すると左右に移動 C1~  前月曜日  当月曜日 次月曜日←固定 分かりづらい説明で申し訳ございませんが、かなり困っています。お返事頂ければ幸いです。宜しくお願いします。

  • Javascript 週間カレンダーを月曜始まりに

    現在、こちらのような週間カレンダーをJavascriptを使い作成しております。 http://sample.ul-inc.jp/ 曜日の取得、曜日によるタブの自動切り替えの設定は出来たのですが、週の日付の更新が日曜日になってしまいます。 日曜の0時に週の日付が更新されてしまう状態です。 なので、日曜日に閲覧すると次の週の日付が表示されてしまっています。 こちらを、月曜の0時に日付が更新されるように設定をすることは可能でしょうか? 何卒よろしくお願いいたします。

  • 1月第2週はいつからですか

    来年の1月って元旦が土曜で2日が日曜日ですよね。 1月第2週とは3日からで良いのでしょうか。 それとも2日からいきなり第2週になってしまうのでしょうか。 あるいは週のスタートは月曜だから10日でしょうか?

  • 【エクセル2002】 週番号から日付を返すには?

    年、週番号から日付を返す為にはどうしたらよいでしょうか? 仕事で週報のフォーマットを作成しているのですが、タイトルの横にその週の期間を表示させたいです。(月曜日から土曜日まで) 例)2008年の週番号30の場合  平成20年7月21日(月曜日)~平成20年7月26日(土曜日) と表示させたい 壁にぶつかってしまい先に進めず困っています。よろしくお願いします。

  • 月の第一週目は、何時から

    一般的なカレンダーは、左端が「日曜日」になっていて、右端は「土曜日」になっています。 今年一月の第一週目は、1日~7日で第二週目の月曜日9日が「成人の日」になります。 もし1月1日が、土曜日だったとすると、一月の第一週目は、「1月1日」だけで、2日~8日は第二週目になり、3日が「成人の日」になるのでしょうか?

  • 自動で書式を設定する方法

    家計簿の表を月毎にシート別に作成しています。 月曜から日曜までを一週間として支出集計したいので日曜の下の罫線を太線にしたいのですが、毎週、毎月、自動でする方法はありますか? A列に「日付け」B列に「曜日」があり、毎月3行目から1日となっています。 良い数式などありましたら、教えてください。

  • ファイルメーカー ある月のある曜日の日付を表示する方法

    例えば、2008年の5月の第3月曜日の日付を知るにはどうしたらよいのでしょうか? ---------(括弧の中は仮のフィールド名) 2008年(年) 5月(月) 3(番号) 月(曜日) 結果(日付) --------- 2008年5月19日が2008年5月の第3月曜日というのは 求められるのですが、その逆の求め方がわからなくて困っています。

  • エクセル 月のデータを週ごとに別シートへ

    勤務表の作成で困っています 月の勤務予定から、週(月~日曜日)ごとに別シートへコピー(分割?)したいのですが、どうすればいいのかさっぱりわかりません しかも条件が有り、初心者の自分はほとほと参っています ・シートの一枚目を月の勤務状況とし入力はここだけ ・二枚目以降を1週目、2週目としていく(週の初めは月曜) ・月の頭の曜日を合わせる ※たとえば6月1日が金曜日で有れば、1週目のシートの金曜日からコピーが始まるようにする ・VBAは使えない(ノートンでエラーが出るため) 説明が悪いとは思いますが、どなたかお力を貸していただければ幸いです

  • エクセルの基本機能の中に日付と曜日をリンク

    エクセル2010を使っています。 日付を入力した場合、自動的に曜日を付け足す方法なんてあるのでしょうか? 欲を言えば、土曜日は青、日曜日・祭日は赤になってくれたりしたら、めっちゃHAPPYですね!! 例えば、12/23と入力したら、勝手に 12月23日となってくれますよね? そして自動で12月23日(月曜日)になる、と言う風な感じです。 さらに23日は休日でしたから、それが自動で赤文字になるとか・・・・ うーん・・・・どうなのでしょうか?

  • エクセル 指定の曜日から日付を表示させる

    エクセルに詳しい方がいらっしゃれば助けて下さい。 指定期間中の指定曜日の日付を表示させたいのですが可能でしょうか? 例えば・・・ 11月16日~12月15日の1ヶ月間で 毎週月曜日・水曜日・木曜日の日付がB1表示されるような事は可能でしょうか? A1    B1 月曜日  水曜日 11月17日 木曜日 11月18日 月曜日 11月22日 水曜日 11月24日 木曜日 11月25日 ・・・・・ 指定期間と、指定曜日はファイルによってかえたいのですが・・・・。 エクセルの達人がいらっしゃれば教え下さい。