2013/11/14(木) [n年前の日記]
#1 [pc][windows][zatta] Excelを少し勉強
Excelで日付関係の計算?をしようと思って、少しググって勉強したことをメモ。
◎ 何日後、を求める。 :
例えば、A1セルに「2013/11/14」みたいな値が書いてあったとして。そこから5日後、を求めるなら、=A1+5、だけでいいらしい。
◎ 曜日を求める。 :
曜日を求めるなら、WEEKDAY() が使える。例えば =WEEKDAY(A1) と書けば、日〜土が、1〜7の値として返ってくる。その、1〜7の値を、「木曜日」だの「木」だので表示したければ、セルの書式設定をユーザ定義にして、「aaaa」や「aaa」にすればいい。
もし、日〜土、ではなくて、月〜日を、1〜7として得たかったら、WEEKDAY(A1,2) となる。第二引数で、日〜土をどんな値で返すのか、変更できる。
もし、日〜土、ではなくて、月〜日を、1〜7として得たかったら、WEEKDAY(A1,2) となる。第二引数で、日〜土をどんな値で返すのか、変更できる。
◎ 休日・祝日を考慮して求める。 :
土日を休日として扱いながら何かしらしたい時は ―― いわゆる営業日云々を加味して日付を得たいなら、WORKDAY() が使える。これはアドインで追加しないと使えない。
アドインの追加方法は、Excel 2007なら、左上の丸いボタンをクリックしてメニューを出して、Excelのオプション → アドイン → 管理:設定ボタン → 分析ツールにチェックを入れる。…とにかく「分析ツール」ってヤツを有効にしないといけないらしい。
ちなみに、Excel 2003 で同じことをしたら、Excel 2003 が終了できない状態に…。Excel 2003 と Excel 2007 を一緒に入れてるから、そういう不具合が起きるのだろうか…。とりあえず、Excel 2003 でコレをやるのは諦めたり。
さておき。例えば、「とある日付(A1)から、19日後の日付を求めたい。ただし、その日が土日だったら、前倒しして金曜の日付を求める」なんてことがしたかったら…。
その場合は、
祝日はどうすんのや、土日しか休み扱いしてくれんのか。と思ったが、WORKDAY() の第三引数で指定出来るそうで。
例えば、D1〜D10あたりに、祝日の日付がずらりと入っていたら、
「$D$1:$D:$10」は、「D1からD10までの範囲を参照しなさいよ」という記述。$をつけてるのは、そのセルをコピペしたり、オートフィルとやらをした時に、セル番号がどんどん増えていくのを抑止するため。「絶対参照」と呼ぶらしい。
アドインの追加方法は、Excel 2007なら、左上の丸いボタンをクリックしてメニューを出して、Excelのオプション → アドイン → 管理:設定ボタン → 分析ツールにチェックを入れる。…とにかく「分析ツール」ってヤツを有効にしないといけないらしい。
ちなみに、Excel 2003 で同じことをしたら、Excel 2003 が終了できない状態に…。Excel 2003 と Excel 2007 を一緒に入れてるから、そういう不具合が起きるのだろうか…。とりあえず、Excel 2003 でコレをやるのは諦めたり。
さておき。例えば、「とある日付(A1)から、19日後の日付を求めたい。ただし、その日が土日だったら、前倒しして金曜の日付を求める」なんてことがしたかったら…。
その場合は、
=WORKDAY(A1+(19+1),-1)と入れればいい。A1に書かれた日付の20日後を一旦求めて、そこから前日を求める= -1 を指定することで19日後の日付を得る。そこで得た日付が土日だったら、-1 を指定してるから土日じゃなくなるまで前に遡ってくれて、結果的に金曜日の日付が得られる。なんかちょっとややこしいけど。
祝日はどうすんのや、土日しか休み扱いしてくれんのか。と思ったが、WORKDAY() の第三引数で指定出来るそうで。
例えば、D1〜D10あたりに、祝日の日付がずらりと入っていたら、
=WORKDAY(A1+(19+1),-1,$D$1:$D:$10)と書けばいい。
「$D$1:$D:$10」は、「D1からD10までの範囲を参照しなさいよ」という記述。$をつけてるのは、そのセルをコピペしたり、オートフィルとやらをした時に、セル番号がどんどん増えていくのを抑止するため。「絶対参照」と呼ぶらしい。
◎ 別シートのセルを参照する。 :
でも、祝日がずらずら書かれたセルなんて、同シートに入れておきたくないわけで。印刷する時にソイツラも印刷されて鬱陶しい。できれば別シートにしたい。
別のシートにあるセルの範囲を指定する場合は、「シート名!D1:D10」とか「シート名!$D$1:$D$10」と記述すればいい…と解説記事には書いてあったのだけど。手元の環境で試したら、シート名が英数字文字列の時は働いたのだけど、日本語文字列の場合はエラー表示が出てしまった。仕方ないので、シート名はローマ字表記でリネームしてみたりして。
こんな感じで、当面の目的は果たせた、ような気がする。
別のシートにあるセルの範囲を指定する場合は、「シート名!D1:D10」とか「シート名!$D$1:$D$10」と記述すればいい…と解説記事には書いてあったのだけど。手元の環境で試したら、シート名が英数字文字列の時は働いたのだけど、日本語文字列の場合はエラー表示が出てしまった。仕方ないので、シート名はローマ字表記でリネームしてみたりして。
こんな感じで、当面の目的は果たせた、ような気がする。
[ ツッコむ ]
以上です。