第22回:暗号

 やっと、本1冊分の原稿を書き上げ、とりあえず、重荷がなくなり、「いいちこ」な気分の「たけしのコマネチ大学数学科」の「第22回」。今回のテーマは「暗号」。問題からして、暗号なのだが、ちょっと、端折ってしまうと「マス北野の誕生日は、何曜日か?」それをアルファベットでパソコンのパスワードとして入力せよ、という問題(ちょっと演出を変えてみただけ?)。で、2006年1月1日は、日曜日で、マス北野の誕生日は「1947年1月18日」だ。

 今回の問題、エクセルなら、考える必要もなくサクサクと……。

Ex_2201

あ、コマ大数学研究会と同じ過ちを犯してしまった。英文として入力するには……。

Ex_2202

というわけだ。

 エクセルでは、1900年1月1日を「1」として、1日ずつカウントして日付を連続した「シリアル値」として、9999年12月31日まで管理している。2006年9月14日は「38974」だ。だから、ある期間の日数を求める場合は、引き算すれば、簡単に求めることができる。

 9999年なんていう、ずっと先の未来よりも、過去の日付をちゃんと計算できるようにしてほしかったと思うのは私だけだろうか。たとえば「アインシュタイン」の生涯日数を計算しようとしても、生誕が「1900年1月1日」以前なので、エラーになってしまう。

Ex_2205

 で、今回のテーマは「暗号」。なぜ、マス北野の誕生日の曜日を調べることが「暗号」につながるのか。竹内薫センセの「美しき数学の時間」によると、インターネット時代の公開鍵、秘密鍵を用いたRSA暗号にとって「モジュロ(MOD)」が重要なしくみを担っているということである。説明するのは大変なので、詳しくは「サルでもわかるRSA暗号」を参照してほしい。

 「モジュロ(MOD)」とは、ようするに、ある数をある数で割ったときの余り(剰余)だ。「モジュロ7をとる」と言ったら、ある数を「7」で割ったときの余り。「7を法とする世界」とも言えるようだ。つまり、この世界に「0~6」までの7つの数字しかなかったら、「6」の次は「0」になる。

 先ほど、エクセルでは1900年1月1日を「1」としていると書いたが、1900年1月1日は日曜日だ。1月2日は「2」で月曜日……1月6日は「6」で金曜日、1月7日は「7」という数字はないので「0」になって土曜日。日付が増えていっても、「=MOD(日付,7)」日付を7で割って余りを求めれば何曜日か、わかることになる。

(※2006年12月23日追記:ごめんなさい。1900年1月1日は月曜日です。Excelで日付と曜日が正しく表示されるのは、1900年3月1日以降です。)

 エクセルには、指定した日付の曜日を戻り値として返す「WEEKDAY」という関数がある。「=WEEKDAY(日付)」とすればよい。基本的に「=MOD(日付,7)」と同じ考え方なのだが、土曜日を「7」としている点が違う(その代わり「0」はない)。この関数を利用して、万年カレンダーを作ることができる。

Ex_2203

 指定した年月の最初の日「1日」が何曜日になるかを求め、それから遡って、カレンダーの最初の日曜日に表示する日にちを求める。あとは、その数に「1」を足していくだけ。

Ex_2204

 その「月」以外の「日にち」を灰色にするには、条件付き書式で「数式が」「=MONTH(A3)<>$B$1」として、書式で文字を灰色に設定する(※セルA3はカレンダーの最初に表示する日にち、セル$B$1は、何月かを表示しているセルを指定)。

 いまさら、万年カレンダーの作り方を教えられても……なんだかなぁと思う今日この頃、いかがお過ごしですか? とゆーか、さんざん仕事でエクセルの記事を書き、趣味のブログでもエクセルの記事を書く私は、どうかしていると思う今日この頃。もっともファミ通にいた頃は、ゲームの仕事に疲れ、息抜きに好きなゲームをしていたが……。

“第22回:暗号” への3件の返信

  1. エクセル/エクセル

    エクセルについて悩みを解決するには、まずはエクセルについての正しい知識が必要です。そこで、エクセルについての情報を集めました! エクセルについて調べて、エクセルに関する悩みを解消しましょう! スポンサードリンク あのストレスから開放!「取り……

  2. 1900年1月1日は月曜日ですよ~~
    1900年は平年(うるう年ではない)ですから(●v●)

  3. ご指摘ありがとうございます。
    1900年はうるう年ではないのですが、Excelでは、存在しないはずの1900年2月29日があります。つまり、1900年3月1日よりも前の日付は、曜日が正しく表示されず、日付の計算にも使えないということですね。
    なぜ、このようなバグが残っているかといえば、日付の設計をするとき、他の計算表ソフト(Lotus 1-2-3 など) との互換性を優先したとのこと。
    また、Macintosh用のExcelでは、1904年1月1日を「1」とするものと、1900年1月1日を「1」とする、2種類の日付システムがあるようです。

コメントは受け付けていません。