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

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

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

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

  • 回答数15
  • 閲覧数6008
  • ありがとう数12

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

  • ベストアンサー
  • 回答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になります。 として、日曜日かチェックするようにして下さい。

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

関連するQ&A

  • 算数を教えてください

    1分で、あやこちゃんは4週、いくみちゃんは3週、かはこちゃんは2週、きよみちゃんは1週しました。 四人がそろうところはどこですか?って子供に聞かれたのですがわからず・・・ 教えてください<m(__)m>

  • 4週8休みの意味

    ある病院の事務職の求人の休日が週休二日制のところに「週休二日制 4週8休」とありました。前働いてた旅館の仲居の仕事では月に7日休み。第1週3日休み、第2週2日休み、第3週休みなし、第4週2日とかがありました。つまり極端に言うとこんな感じの休みです。 第1週 1,2,3日が休み 三連休 第2週 10、12日が休み 第3週 なし 第4週 26、31日が休み 1週間連続勤務、2週間連続というのが当たり前だったのですが、4週8休というのはこういうこともありえるということなのでしょうか? 普通だったら「週休二日制 あり 月8日休み」と書いてあるのに、ここだったら「週休二日制 4週8休」と書いてあったので、気になってしまいました(>_<) 回答お願いいたします。

  • 各週ごとに集計したいのですが

    一応検索をしましたが見つからなかったので質問します。 一応下記のような表を作っているのですがここから各週の 集計をしたいのです。   日付 曜日  A   B   C  合計   1   土    2   日   3   月 1   3       4   4    火  2   2    2   6    5   水     4       4   6   木  1   1    1   3   ・   ・   ・    各週の集計表 月  火  水  木  金      第1週   第2週   第3週   第4週   第5週  上の表の合計を下の集計表へ転記させたいのですが  曜日ごとに組み込む方法がよくわかりません。  曜日はWEEKDAY関数で1から7までで表せますが、第  1週、第2週と正確に転記させる方法がわかりません。  関数を調べましたがこちらの要求どおりに動いてく  れる関数は見つかりませんでした。もしかしたらマ  クロを作らなければならないのかもしれませんがVBA  は良くわかりません。  よろしくお願いします。

その他の回答 (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

  • エクセルのグラフ作成について

    今 各週の残業時間をグラフにすることをこころみていますがグラフの作り方が良く分かりません。横の軸に12月1週、12月2週、12月3週、12月4週、1月1週・・・・縦の軸に上限プラス20:00 下限マイナス20:00で折れ線グラフを作成したいのですが、範囲指定とかの仕方が良く分かりません。表は作成済みです。

  • コンクリート強度について

    各書において1週強度と4週強度の計算および図表がでていますが。  中間地点 2週強度及び3週強度の計算方法を教えてください。

  • ハッピーマンデーについて。

    こんにちわ。ハッピーマンデーについてですが、その月の第2週の月曜日となってます。 しかし、2002年の1月の成人の日は、1/14と第3週となってます。 と、言うか、この第○週と言う定義(?)は、その月の1日が何処で始まるかによって変わってくるのでしょうか? 例えば、月初が土曜日だった場合、第1週は1日しかないって事になりますか? コンピュータで祝日の時の処理を行うのに必須です。 宜しくお願いいたします。

  • ハッピーマンデー法について。

    こんにちわ。ハッピーマンデーについてですが、その月の第2週の月曜日となってます。 しかし、2002年の1月の成人の日は、1/14と第3週となってます。 と、言うか、この第○週と言う定義(?)は、その月の1日が何処で始まるかによって変わってくるのでしょうか? 例えば、月初が土曜日だった場合、第1週は1日しかないって事になりますか? コンピュータで祝日の時の処理を行うのに必須です。 宜しくお願いいたします。

  • 【Excel - 関数】各商品の週ごとの売上合計個数を別のシートに出したい

    関数の設定方法について教えて頂けますでしょうか。 【シートA】のデータから【シートB】のようなレイアウトでデータを求めたい場合、 どのような関数を設定すれば良いのでしょうか。 各商品の週ごとの売上個数を出して、手動でシートBに貼り付けている状況です。 どのような関数を設定したら良いのか検討がつかず、困っています。 恐れ入りますが、ご教示頂けますでしょうか。どうぞ宜しくお願い致します。 【シートA】 A      B     C     D     E 1      第1週  第2週  第3週  第4週 2 りんご   0     1     0     1 3 りんご   1     0     1     0 4 りんご    1     1     1     1 5 りんご   1     0     0     0 6 バナナ   0     1     0      1 7 バナナ   1     0     1     0 8 バナナ   1     1     1     1 9 みかん   1     0     0     0 10 みかん  0     1      0     1 【シートB】 A      B      C         D 1       りんご   バナナ  みかん 2 第1週合計  3    2     1 3 第2週合計  2    2     1 4 第3週合計  2    2     0 5 第4週合計  2    2     1 6 合計      9     8     3

  • 日付の範囲を月単位で取り出したい

    年月日~年月日を月単位で取り出したいのですが、 phpのリファレンスを見ても、日付に関して使えそうな関数が見当たりませんでした。 ありそうな処理なので、関数の組み合わせで、 スマートな方法はないでしょうか。 最後はどのような配列の形になってもいいのですが、 以下のように分けたいのです。 2011/8/12~2012/3/20 ↓ 2011/8/12, 2011/8/31 2011/9/1,2011,9,31 ・ ・ 2012/3/1~2012/3/20 $period (0 => array('year' =>2011, 'month' => 8, 'day' => 12), 1 => array('year' =>2012, 'month' => 3, 'day' => 20)); こんな感じで年月日が入っています。 function separeted($period){   $start = $period[0];   $end = $period[1];   $result[] = $start;   $result[] = array('year' => $start['year'], 'month' => $start['month'], 'day' => $this->getEndDay($start['month'])); この先、どのようにするかで止まっています。 全く別の方法でも、何かヒントでもいいので、アドバイスください。 getEndDay()関数は、引数の月の最後の日を返す自作関数です。 3月なら31、4月なら30を返します。

    • 締切済み
    • PHP
  • EXCELで作成するカレンダーについて

    EXCEL2002での質問です。 シート1に31日分のカレンダーを作成し、セルA1(年)とセルB1(月)に記載された年月を変更することで 曜日固定の日付変動で毎月のカレンダーが表示するように作成しています。 (A3セルに、=DATE(A1,B1,1)-(WEEKDAY(DATE(A1,B1,1),1)-1)で作成しています) ~以下、シート1の各セルの役割~ ・第1行に A1 B1 年 月 ・A列に A2~G2 日曜~土曜(変動無し固定型) A3~G3 第1週の日付(変動有り) A4~G4 第1週のスケジュール表示領域 A5~G5 第2週の日付(変動有り) A6~G6 第2週のスケジュール表示領域 A7~G7 第3週の日付(変動有り) A8~G8 第3週のスケジュール表示領域 A9~G9 第4週の日付(変動有り) A10~G10 第4週のスケジュール表示領域 A11~G11 第5週の日付(変動有り) A12~G12 第5週のスケジュール表示領域 ~~~~~~~~~~~~~~~ これに付加をつけて、スケジュール機能を作成しようとしているのですが、 シート2以降、200806、200807、200808~というようにシート名を付け、 各シートに31日分の”行”を作成し(A3~A33までに1日~31日と記載)、 そこにスケジュール(B3~B33)を記載していきます。 この時、シート1側の年月(A1とB1)を2008年8月と変更した際に、別シート200808に記載された スケジュール(B3~B33)がシート1側の各日スケジュール領域に反映するようにするには、 どのように設定すればいいんでしょうか・・・? シートが固定してる場合は、シート1の各日のスケジュール表示領域に、 =200808!B3 などと200808のシートに記載されてあるスケジュールに通常参照を設定すればいいんですが、 シート1のA1とB1に記載された年月を2008年9月と変更した際に、 =200809!B3を参照するように作成したいのですが・・・。 基本的に、シート1側は年月を変更するだけの参照シートとしたいんです。 分かりにくい説明で申し訳ございませんが、ご教示頂ける方いらっしゃいましたら、 よろしくお願いいたします。

  • シート名を変更してもVBAでエラーにならないように

    VBA初心者です。 VBAで複数のシートを選択するという動作を行う時、シート名を変更するとエラーになってしまうのですが、どうすれば回避できるのでしょうか?オブジェクト名?が使用できるらしいのですが、エラーになってうまく動作しません。指定の仕方を変える必要があるのでしょうか? 例えば、  Sheets(Array("第1週", "第2週", "第3週", "第4週", "第5週")).Select  Sheets("第1週").Activate と記述してあって、シート名の"第1週"を"9月1日"とかに変更したら、当然エラーになりますが、 左のプロジェクトエクスプローラにある、Sheet1(第1週)の名前の変わらないオブジェクト名"Sheet1"の方で指定したいと思うのですが、単純に名前を置き換えても動作しません。どのように指定すればよいのでしょうか?

  • ピボットテーブルで日付をグループ化 日付が文字列になる

    こんにちは。エクセル2003です。 ピボットテーブルウィザードを使い、 ピボットテーブルを作成し 行のフィールドに日付をドラッグして グループ化→「月」「日」を選択してOKを押すと 画像のようになります。 この時、日付が「○月○日」という表示形式になり C列でデータタイプを調べたところ、「2」になり、文字列となっています。 元データではなくピボットテーブルで作成した日付の情報を取得してまだ作業することがあるので 元の年月日がわかるようにしたいのですが不可能でしょうか?

  • 日付のループ

    お世話になります。 予定表をHTMLで作成したいのですが、 コンボボックスで月(1~12)を選択して、日付を 列方向に罫線と一緒にバサっと表示させるようなことを やりたいです。 Javascritで<TD>タグを変数に格納しておいて、月から 日付のMAX値を取得して、その分をループさせる…と理屈は なんとなく解るのですが、根本的に書き方がわかりません。 どなたか、ご教授頂けないでしょうか?