富田パソコンサークル (Tomita PC Circle)

京都の京丹波町富田の「公民館」をホームに活動するパソコンサークルのブログ。

「エクセルで万年カレンダー」の続き:(その2)

2009年05月05日 | エクセル

さてここからが、いよいよあの「関数」って言うんが登場してくる本番です
その前に、二つの関数の説明をしておきます。
DATE(デート)とWEEKDAY(ウィークデイ)の二つです
DATEというのは、その日の日付のデータを求める関数で、下図のように
別々のセルに年,月,日が入力されている場合(次のような図の場合は・・・)

K2というセルに西暦、L2というセルに「月」、M2には「日」が区分けして入っているときに
その右隣のN2というセルに
DATE([年]K2,[月]L2,[日]M2) と言う具合にそれぞれをカンマで区切って入力すれば
その日付としてのデータが得られます。
これに対してWEEKDAYという関数は、日付のデータが入っているセルを指定したり、日付データそのものを引数にしたりすると
特定しなければ日曜日を「1」として土曜日を「7」とする曜日を数値化した
数字が得られます・・・・んなことして・・・ナンになるってお思いでしょうが
これが結構、曜日の判別するときに役に立ちます
従って次の図のような場合、さっきのN2というセルのさらに
右隣のO2というセルに、もっちゃりしたやり方やけど
WEEKDAYDATE(A1,B1,1)と入力すると




そこには、金曜日を示す「6」という数字になって表れます

・・・さて、こんだけでもしんどい話ですが、ココまで来たら
この二つの関数を使っていよいよ問題のその月の第1週の始まりである
第1日曜日の日は「何月何日」であるかの「数式」を「A3」というセルに
書き込みます。

それは、結論から言うと

DATE(A1,B1,1-WEEKDAY(DATE(A1,B1,1))+1




となります。青い字で書き込んだのがその月の初めの「1日」を示す訳ですから
上の式を文章に訳すると
=(イコール)その年のその月の1日引く曜日を数字で表す(その年のその月の1日)に
1を足す
上の式ををそのままコーピーしてエクセルのシートに貼ってもかまいませんが
とにかくA3に入力してしまいますと







※設定によっては表示が少し違ってるかも知れませんよ

あっそうや・・・先々の事考えたらここらで、日曜日や土曜日の列に
やら青の色つけしといた方がええと思いますわ


ということになるんですが・・・・わかってもらえますか・・・
最後に「1」だけ足すのが「ミソ」で
それは、図の例で言うと「月初めの5月1日」が、この式で求められた曜日の数「6」
ではあるんですが、図を見てもわかるようにカレンダーで言うと
「5日前」つまり「6」より一つ少ない5」だけ前にさかのぼらんとあかんので
後に調整の意味でチョボット「1」だけ足してあるんです・・・・




で、上のような事で年、月を表すセルの「値」を変えるだけで曜日に
対応した「万年カレンダー」の骨組みが出来上がったんですが、ご覧のように
数字も、それに余分な日付も入ってて、ナンとかせなあきません
ただし、大事なことはナンとかせなあかん言うて、要らんとこ削除してしもたり
書き換えたりすると努力がぱぁーになってしまうんで
仕上げとして、工夫を凝らします。




まず日付ですけども、カレンダーに年月は不要で「日」だけが必要です
これはまず日付の枠であるA3からG8のセルを ドラッグして範囲指定しておき
エクセルのメニュー→「書式」→「セル」→「表示」のタブを開きます
下図のように左の「分類」欄の一番下の「ユーザ定義」を選び
右側の「種類欄」の入力欄に「d」とだけ小文字で入力します。
エクセルでdは「日」を年は「」、月は「m」を意味しています。







これで見た目はカレンダーらしくなりましたが、余分な日付が
まだ残っています。これを自動的に処理するには今度は
条件付き書式」とMONTH(マンス)という「月」を表す関数に
登場してもらわなあきません
MONTH(マンス)という関数を使う例を式で説明すると
=MONTH(A3)<>$B$1
・・・※B1のセル位置をそれぞれ行列の
頭に「$(ドルマーク)」をつけると絶対参照とゆうて、
何が何でも[月]を表すB1のセルだけという指定になります
関数は半角で入力して下さいよ

この式を解説すれば、A3というセルの値の月が
月を表してるB1のセルの値(絶対にココ)と同じではなくそれよりも大きく、さらに小さい場合は・・・
ということを意味しています。

条件付き書式というのは、ある条件になったときに、そのセルの表示に
色とか塗りつぶしなどの加工が加えられて、わかりやすく強調できる書式を言います。

では、早速挑戦してみることにしましょう
さっきと同じで、A3からG8までをドラッグして範囲指定しときます
エクセルのメニューバーの「書式」→「条件付き書式」を選択します








すると上のようなダイヤログが現れて来ますので
図のように1~3の番号で示した順に左のリストからは「数式が」を選び
その横の数式欄には、さっきの数式
=MONTH(A3)この場合は絶対参照にはしない)<>$B$1
を半角入力します・・・そして最後に(3)で示す「書式」ボタンを押します。




すると、セルの値が上の条件と一致した場合だけの「書式」を聞いてくる
下図のようなダイヤログが現れますので





今回は、図の色を選択するところの欄の「▼」のリストから
薄いグレーを選んでおくことにします。
もちろんこの時に「白」を選択すると下地と相まって見えなくすることも可能です
あとは色選択のダイヤログの「OK]を押して
さらに「条件付き書式」のダイヤログも「OK」を押すと




できあがりです・・・・あぁしんど・・・・って事になりますが
これを保存しておいて、必要なときに呼び出して
この部分全体をコピーして貼り付けると
エクセルのシートのどんなところにも数式が崩れずに貼り付くはずです
(ただし、最後の条件付き書式でいう$B$1という部分だけは
その都度、「月」の値のあるセルの番地に変える必要があると思います。)
ここまで来て終わりです
出来具合は、月の数字や、年の数字を変えて試してみて下さい

その上で、「右クリック」で行や列の幅を変えたり、挿入を加えて
自分なりに加工や編集をして「見栄え」を良くして下さい




ココまで・・・お疲れさんでした・・・チャンチャン




※小りんちゃんの指摘で大きなミスを発見しました
「条件付き書式」の説明の図と記事の数式が食い違ってます・・・・
ごめんなさい絶対参照すべきセル位置は「$B$2」ではなく
$B$1」が「月」を示すセル位置ですので
条件付き書式の数式の末尾を当初の「$B$2」から「$B$1」に変えて下さい
式そのものは「=MONTH(A3)<>
$B$1」となります
ちなみに記事の中身はこそっと変えておきました


エクセルで、万年カレンダー(その1):雑誌から

2009年05月05日 | エクセル

いつにないGWは、いつにないクルマの多さでもうじき
終わりを迎えようとしています・・・・ちょっと時間をもてあました時に
目にした雑誌から、エクセルで作るカレンダーっていうのがあって
それもいわゆる「万年カレンダー」ってやつで、
好きな「年」の好きな「月」の数字を入れるとその月のカレンダーが
作れるってゆうやつで、カレンダーのレイアウトや使い勝手などはこの際
それぞれのセンスに任すとして「原理」を紹介しておきたいと思ってます。
ただし、「エクセル」アレルギーの発症が予想される方には申し訳ありませんが
いくつかの「関数」と「条件つき書式」っていうのが出てくるんで
覚悟しておいて下さい・・・・

ただ、完成のあかつきには、ちょっとした「達成感」味わえると思います。
・・・「ドタマ・・・」の体操にでもお試し下さい


・・・覚悟決めたら・・・エクセルを開いて・・・下図のように
段取りをしておきます・・・何でもやけど
畑仕事も田ごしらえも、下準備っていうもんが肝心でしんどいもんやから
そこんとこは、我慢して頑張って下さい




A1のセルに西暦B1のセルには、「」の数字を段取りしときます
次に2行目は、曜日ですのでA2というセルに日曜日の「」と入力します
あとは、いちいち入れる必要ありません。A2のセルを選択して右側へドラッグするだけで
勝手に土曜日まで、連続データが入ります。(・・・ここでチョっとだけエクセルに感心しといて・・・)


実は図に示しているように「万年カレンダー」作りの「ツボ」は、その月の第1週の
「日曜日」の日が「何月何日」
かと言うことがゆうたら「すべて」とゆうても過言ではありません。
そこでこの際は肝心要の「A3」というセルだけは空白にしときます。
それさえわかっておいたら、あとはその日に「」ずつ日付を足していけば
カレンダーのおおもとが完成するという具合です。
というわけで、ココまでナンとか理屈がのみ込めたら、第1週の土曜日にその月の
始まりが来て、31日の日がある月を想定すると6週分の「座取り」が必要ですので
図の場合、B3というセルからG8までのセルに、元になる「A3」の日にプラスする日数分の
数式を入れておきます。2番目の日に当たる「B3」のセルには「=A3+1」そして最後の日の
G3」には「=A3+41」となるはずです。


あぁしんど・・・野良仕事と違うて、腰はいとうならんけど
頭が痛うなったかも知れませんが・・・ココまで、できたらちょっと一服しましょう


 続く