【連載】

ゼロからはじめてみる日本語プログラミング「なでしこ」

7 なでしことExcelで9月始まりのカレンダーを作ろう

7/12

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

日本語でプログラミングできる「なでしこ」を使って、プログラミングを身につけましょう。プログラミングができれば、いろいろな仕事を自動化することができます。例えば、似たようなテキストを連続で大量に作成する必要がある場合でも、数行のプログラムを書くことで済んでしまうこともよくあります。今回は、その例として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貢献者章受賞。技術書も多く執筆している。

7/12

インデックス

連載目次
第12回 文字数カウントツールを作ってみよう
第11回 日本語で肥満判定ツールを作ってみよう
第10回 日本語プログラミングでビンゴマシンを作ってみよう
第9回 6行でオリンピックまであと何日?
第8回 日本語プログラミングで年齢早見表
第7回 なでしことExcelで9月始まりのカレンダーを作ろう
第6回 数当てゲームを作ってみよう
第5回 単位変換ツールを作ってみよう
第4回 タートルグラフィックスでお絵かきしよう(その2)
第3回 タートルグラフィックスでお絵かきしよう(その1)
第2回 プログラミングにおける変数の役割について
第1回 日本語プログラミング言語「なでしこ」を始めよう

もっと見る



人気記事

一覧

イチオシ記事

新着記事