![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつも大変お世話になっております。
VBAによる月間カレンダーの作成についてVBAにお詳しい方のご教示をお願い致します。
添付画像の月間カレンダーをVBAで作成したいと思っております。
作成したいプログラムの構成を下記に記述させていただきます。
B5セルはE2セルと=で結ばれ、月間カレンダーの初日が始まりH5セルで折り返し、下に4セル降りたB10セルからH10セルまで入力を月末の日付まで繰り返し出力。
翌月は表示しない。
28日、29日、30日の月はそれに対応し罫線を引きまう。
B4セルにはE2セルの開始月からの曜日をH4まで出力。
また土曜日は青、日曜日は赤色を設定。
最後に各日付の下の4セルの中は結合し画像の様に罫線の処理をしたいプログラムになります。
以上が私の構築したいVBAプログラムになります。
誠に厚かましいお願いになりますが、どうかよろしくお願い致します。
![「VBAによる月間カレンダーの作成について」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/8/943663_594574bdd60f3/M.jpg)
No.2ベストアンサー
- 回答日時:
こんにちは
>VBAの勉強なので~~
とのことなので、丸投げ的に作ってもらっても勉強にならないでしょう。
コードは人によって、考え方によって千差万別なので、回答されたコードが良いとは限りませんし、それが唯一の解決方法というわけでもありません。
まずは自分で作成してみて、うまくいかないところや調べてもわからないところについて質問なさったほうが、ご自身の向上に結び付くと思います。
>どの様な構成になるのかを知りたいので~~
上にも述べたように、考え方次第で構成は変わりますし、コードも別物になります。
同じ考え方であっても、人によって実際のコードは変わります。
また、エクセルの場合は、エクセルが持っている機能をどこまで利用するかによってもコードは大きく変わってきます。
例えば、日付は1、2、3・・・の文字(数値)を入れておくのか、日付型で実際の日付を入れて、セルの書式で日付のみ表示するようにするかとか、曜日の表示等についても同様ですね。その書式設定は、事前にセットしておくのかVBAで書式もセットするのかなど。
さらには、曜日の色付けやセルの枠線なども、エクセルの条件付き書式でやれば簡単ですが、VBAで直接設定することも可能です。
これらによっても、作成するコードの内容は変わってきますね。
例として、ご提示の図で日付の数値を表示する部分だけ考えてみると…
セルには日付型の数値を記入するものと仮定します。
考え方はいろいろあると思いますが、大きく分けて2通りの例を。
1)セル範囲でループする
For rw = 5 To 20 Step 5
For cl = 2 To 8
'セルに日付を記入する処理
Next cl
Next rw
のような構文で、順に日付を設定して行く考え方。
途中で、日付がその月を超えたらブランクを記入します。
2)1日から順に記入して行く考えかた
Do While tmpDay <= endDay
'セルに日付を記入する処理
Loop
のようなループで記入してゆく方法ですが、日付からセルの位置を計算する必要があるでしょう。
この他にも、考え方はいろいろあると思いますが、この2つだけでも作成されるコードは別の物になります。
1)の例
d = Range("E2").Value
tmpDay = DateSerial(Year(d), Month(d), 1)
endDay = DateSerial(Year(d), Month(d) + 1, 0)
For rw = 5 To 25 Step 5
For cl = 2 To 8
If tmpDay <= endDay Then
Cells(rw, cl).Value = tmpDay
Else
Cells(rw, cl).Value = ""
End If
tmpDay = tmpDay + 1
Next cl
Next rw
2)の例
d = Range("E2").Value
tmpDay = DateSerial(Year(d), Month(d), 1)
endDay = DateSerial(Year(d), Month(d) + 1, 0)
Set r = Range("B5")
Do While tmpDay <= endDay
r.Value = tmpDay
If Day(tmpDay) Mod 7 = 0 Then Set r = r.Offset(5, -6) Else Set r = r.Offset(, 1)
tmpDay = tmpDay + 1
Loop
なお、2)のコードでは月末までしかループしていませんので、事前に全体をクリアしておくなどの処理が必要になります。
(ループ範囲を変えて、1)のように処理する方法もあるでしょう)
また、1)と2)では、記入するセルの指定方法の考え方もあえて変えています。
ご質問の内容ですと、実際には、1日~28日までの表示は固定でもよいので、先に(単純な数値型で)1~28を記入しておいて、5段目だけ処理すれば十分という考え方もできます。
※ ANo1様のご指摘にもありますが、普通のカレンダーは曜日が固定(「日月火・・・」または「月火水・・・」)なのが一般的な表示方法だと思いますので、そのような表示にするのが良さそうに思いますが・・・?
fujillin様二通りのプログラムコードありがとうございます。
参考に致します。
考え方次第で構成は変わり、コードも別物になるんですね。
自分の考えで少しずつプログラムを記述して行き勉強して行こうと思います。
ありがとうございました。
No.1
- 回答日時:
B5は必ず1日になるということでいいでしょうか?
であれば、ほぼほぼVBAを使わなくてもできそうです。
VBAの勉強ということなら別ですが。。。
1日から28日はVBAではなく数字固定で大丈夫ですよね。
工夫が必要なのは29日~31日、ここは式で開始日から29日足して月が替わるかどうかで"29"を出力させるかどうかを決める、以降30日、31日も同様。
罫線は条件付き書式で日付が表示されてたら罫線を引くようにしてあればできそう。
曜日は、1日から7日までの曜日を文字列で出力し同じく条件付き書式で土曜日を青、日曜日を赤にすれば。
B2~C2までは書式でだせるので、E2に必ず1日を指定すれば。
VBAの勉強ということであれば、逆に曜日を固定して、1日をその曜日から開始するようなものを目指されたらいかがでしょうか?
genjitutouhi様回答ありがとうございます。
VBAの勉強なのでこの場合のカレンダー作成になりますと、どの様な構成になるのかを知りたいので他の回答者様の回答を待ってみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
エクセルVBA 配列からセルに「...
-
Excelで空白セル直前のセルデー...
-
VBAの一次元配列から二次元配列へ
-
関数の引数でrangeを指定したとき
-
DataGridViewで指定したセルの...
-
【Excel VBA】一番右端セルまで...
-
CellEnterイベント仕様について
-
HTMLのテーブルのセルの値をPHP...
-
Excel VBA IF文がうまく動作し...
-
Excel UserForm の表示位置
-
オーバーフローを回避する方法?
-
VBA:日付を配列に入れ別セルに...
-
下記のマクロの説明(意味)を...
-
データグリッドのセルの値を取...
-
VBA 重複文字列 色付け
-
EVCEL VBA での最小値の検索
-
VBA にて、条件付き書式で背景...
-
Excel-VBA セルのデータ書出し(Q2)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
C# DataGridViewで複数選択した...
-
入力規則のリスト選択
-
Excel VBA IF文がうまく動作し...
-
【VBA】写真の貼り付けコードが...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL 2010 VBAでピボットで複...
-
飛び地セルの空白判定
-
エクセルのカーソルを非表示に...
-
CellEnterイベント仕様について
おすすめ情報