日本語プログラミング言語「なでしこ」公式サイト

日本語でプログラミングできる「なでしこ」を使って、プログラミングを身につけましょう。プログラミングができれば、いろいろな仕事を自動化することができます。例えば、似たようなテキストを連続で大量に作成する必要がある場合でも、数行のプログラムを書くことで済んでしまうこともよくあります。今回は、その例として365日分のカレンダーを作ってみましょう。

365日分のカレンダーを作ろう

ところで、皆さんは、自分でカレンダーを作ろうと思ったら、どうやって作るでしょうか。たぶん、多くの方がExcelを使って作ることでしょう。Excelのセルをカレンダーのマスに合わせれば、比較的手軽にカレンダーを作れます。

とは言え、365日分の日付や曜日を書いていくのは、なかなか面倒な作業です。Excelのオートフィルの機能を使えば省力できますが、それでも時間はかかります。その点、プログラミングができれば、あっという間にカレンダーを作ることができます。

それでは、9月始まりの一年分(365日分)のカレンダーを作ってみましょう。まずは、なでしこ3のWeb簡易エディタ(こちら)を開いて見てください。

そして、エディタに以下のプログラムを貼り付けて「実行」ボタンを押してみましょう。

 # 365日分のカレンダーを作成
 対象日=「2017/09/01」
 対象秒=対象日をUNIXTIME変換
 365回、ここから
   F曜日=対象日の曜日。
   F日付=対象日の「/」をタブに置換
   「{F日付}{タブ}{F曜日}」を表示。
   対象秒=対象秒+(60 * 60 * 24)
   対象日=対象秒を日時変換して「 」まで切り取る。
 ここまで

すると、日付をタブで区切った一年分のデータが表示されます。そこで、一年分のこのデータを全選択して、クリップボードにコピーしておきましょう。

 2017 (タブ) 09 (タブ) 01 (タブ) 金
 2017 (タブ) 09 (タブ) 02 (タブ) 土
 2017 (タブ) 09 (タブ) 03 (タブ) 日
 ...

このタブで区切ったデータが何に使えるのかと言うと、Excelを起動して、左上のセルを選択した状態で、「貼り付け」を実行してみてください。すると、以下の画面のように、各セルに一つずつ値が貼り付けられます。

タブで区切ったデータはExcelの各セルに貼り付けられる

つまり、直接Excelを操作しなくても、なでしこでデータを作り、それをExcelに貼り付けることで、カレンダーの雛形を作ることができるということです。わずか9行のプログラムで、カレンダーの雛形が完成するのですから便利です。

プログラムを確認してみましょう。このプログラムでは、『N回...ここまで』構文を利用して、処理を365回繰り返し実行します。その繰り返しの中では、日付を出力した後で、日付に1日分を加算していきます。

プログラムの冒頭では、日付をUNIXTIMEと呼ばれる数値へと変換しています。UNIXTIMEとは、1970年1月1日以降からの経過秒のことを言います。これを使うと、日時を数値で表すことができるので、日時の計算が楽になります。例えば、ある日の翌日を得ようと思ったら、86400秒(=60秒×60分×24時間)を足すだけで良いからです。ここでも、カレンダーの日付を進めるために、繰り返しの末尾で、この日付の足し算を行っています。

ちなみに、『UNIXTIME変換』が日付をUNIXTIMEに変換する関数で、『日時変換』がUNIXTIMEを「年/月/日 時:分:秒」の形式に変換する関数です。

不要な項目を表示しないようにしよう

ところで、先ほど作ったカレンダーを見てみると、年・月・日がすべて表示されるために、表が見づらいものになっています。年は冒頭と1月1日の時だけ表示し、月も1日のときだけ表示するように改良してみましょう。

以下のプログラムをなでしこ3のエディタに貼り付けて実行してみてください。

 対象日=「2017/09/01」
 対象秒=対象日をUNIXTIME変換
 前回年=0
 前回月=0
 365回、ここから
   F曜日=対象日の曜日。
   D=対象日を「/」で区切る。# --- (*1)
   F年=D@0
   F月=D@1
   F日=D@2
   もし、F年=前回年ならば、F年=「」
   もし、F月=前回月ならば、F月=「」
   「{F年}{タブ}{F月}{タブ}{F日}{タブ}{F曜日}」を表示。
   対象秒=対象秒+(60 * 60 * 24)
   対象日=対象秒を日時変換して「 」まで切り取る。
   前回年=D@0
   前回月=D@1
 ここまで

プログラムは18行と少し長くなりましたが、このプログラムを実行し、Excelに貼り付け、罫線などの装飾を加えると、以下のような行事予定表のカレンダーを作ることができます。(完成したカレンダーcalendar.xlsx)

作成された9月1日から1年分のカレンダー

プログラムでは、年・月において、前回表示した値を覚えておいて、前回と同じなら空白にするという処理を加えています。

それから、プログラムの(*1)以降の部分ですが、日付データは「年/月/日」と記号「/」で区切られています。そこで、日付データを「/」で区切ると、配列変数Dに[年,月,日]という三つのデータが代入されます。配列変数というのは、一つの変数の中に複数の値を保持することができる変数です。そして、『配列変数名@要素番号』と書くと、配列変数の各要素を取得できます。配列変数については、また、後日詳しく紹介します。

まとめ

以上、今回は、指定回数だけ繰り返す『N回...ここまで』構文を使って、365日分のカレンダーを作ってみました。ここでは、9月始まりのカレンダーを作りましたが、プログラムの冒頭にある『対象日』の値を、任意の日付に変更することで、特定の日から一年分のカレンダーを作ることができます。

市販のカレンダーは、1月か4月始まりのものがほとんどなので、半端な日付から始まるカレンダーが必要な場合、自作しなければなりませんが、このプログラムを利用することで、自作が容易になるでしょう。参考にしてください。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。