その月の日数と月初の曜日を調べて表示するには?

Question 3.2.1 Previous Next
エクセルVBAで年、月を入力すると日付と曜日を自動的に変えるには、どのようなプログラムを考えればよいですか
Answer   Copyright (C) 1998.4.5 永井善王
「年月を入力すると、その月の日数と月初の曜日を調べて表示する」と解釈して、お答えします。
入力


年月の入力はインプットボックスで行うとしました。
答えを下図のような「回答」と名づけられたシートに表示することにしてみました。
回答
マクロの詳細は
こちら「日数と月初曜日を表示 を見てください。


スケジュール表のプログラムを作るには?

Question 3.2.2 Previous Next
お忙しいところ、回答くださり、ありがとうございます。回答に関してはよくわかりました。
もう少し尋ねさせていただくと、例えば、スケジュール表のように、ある月の日付と曜日が1~31日並んでいたとし(縦OR横)翌月、または、前月もしくは任意の年の月を入力すれば、自動的に表全体の日付、曜日を書き換えてくれるようなプログラムを作る場合は、どうすればよいのでしょうか。教えてください。
Answer   Copyright (C) 1998.4.7 永井善王
プログラムの作り方をお教えするのは容易ではありませんが、ご熱心の様子ですので 骨格を下記に一例として書いておきます。
スケジュール表の場合、罫線などをともなうかと思いますが、ここでは別問題としました。

前提 ・・ 縦方向に日付を並べることにし、A列を使うことにします。
1からはじめて前回回答の「その月の日数」まで行を下げながら1日づつ増やした値 を記入します。 色々な方法がありますが例えば
     Sheets("回答").Select
         その月の日数 = Range("B4").Value
         For 日数 = 1 To その月の日数
             Sheets("スケジュール表").Cells(日数, 1) = 日数
         Next

次に、曜日をB列に展開します。
前回の回答で「その月は何曜日から始まる」かが分かっていますね。B1セルに書かれる曜日がその曜日になることは分かりますね。
よってB列の「その月の日数」番目のセルまで、行を下げながら曜日の順番で値を記入します。 日数は単純でしたが、曜日はやや複雑になります。前回回答で「その曜日は何番目です」がありましたね。日曜が1で土曜が7です。 つまり、繰り返しの最大値は7となります。
B1セルから記入を開始した繰り返しは7で終わりです。
続いて1(日曜)から7(土曜)まで「その月の日数」に到達するまで、繰り返して記入します。
この繰り返しは、For Nextを組み合わせれば作れると思います。根気よく考えてください。

さらに、工夫が必要です。
曜日を1から7の数字のままで表わすわけにはいかないので、日、月,火・・に変換します。 これも色々な方法がありますが、VLOOKUPがいいかな、と、思います。 エクセルのオンラインヘルプで研究してみてください。

最後に、月によって28行で終ったり31行まであったり、表が伸縮しますね。 これを、きれいに印刷するには「すぐに役立つエクセルVBAマクロ集」の「伸縮する罫線 ある表の印刷」を参考になさってください。(自己PRです。お許しを)

あなたは、よいテーマに取り組んでみえますね。スケジュール表は一見単純そうに見えますが、プログラム的には大事な要素を相当含んでいると思います。
これをクリアできれば、色々なテーマをこなせるようになれると思います。ぜひ、根気よく 頑張ってください。ご成功を祈ります。
なお、私は現在、他の人からのご質問への回答づくり中で、それが終って時間ができたら、私も作ってみたいと思っています。

その後、「
おまかせスケジュール表印刷」として開発し掲載しました。

Excel VBA Macro