◆NAVI→   相楽ねっと   新着   サイトマップ   総合リンク集   ナチュプリ本舗
◆今はここ→   ほな自然にいこか〜 >  自然にパソコン >  一太郎Office >  一太郎Office活用講座 >  講座もくじ


ビギナーのための「一太郎Office」活用講座

〜 三四郎で家計簿 その5 〜

No.0037  2001/04/10 週刊 (無料)

◆第5回 曜日を表示する関数 ◆

+++++++  も く じ  ++++++++

     1.曜日を求める日付関数
     2.文字列関数のMid
     3.日付データをつくる

+++++++++++++++++++++

三四郎のブック「家計簿.jsd」を開いてください。 今週も関数を考えてみます。

【1.曜日を求める日付関数】

1件目のデータに、日付に「3」、曜日に「水」と入力しました。これはこれでいいのですが、曜日をいちいち入力するのはあんがい面倒です。だいいち、日付と曜日は1対1で対応しているもの。つまり、日付が決まれば、まちがいなく曜日を定めることができるので、日付さえ入力すれば、曜日は関数を使って自動的に表示させることができるはず。

では、1件目のデータの曜日のセル、すなわち[B5]をクリックし、Deleteキーで、「水」という文字を削除してください。ここに、関数を設定してみましょう。

[B5]がカレントになった状態で、ツールバーの「f(x)」を押して下さい。「関数の貼り付け」ダイアログが出ました。「グループ」で「日付時刻」を選ぶと、日付にまつわる様々な関数が右側に表示されます。順に見ていくと、、「DayOfWeek」の説明に、「日付の曜日が返ります」とあります。よさそうですね、これ。

さっそく、「関数ヘルプ」ボタンを押して、詳細を見てみましょう。


参照図

  DayOfWeek ( 日付または年, <月>, <日> )
というのが関数の書式で、説明によると、
  DayOfWeek ( 2001/1/3, , )
としても、
  DayOfWeek ( 2001, 1, 3 )としてもいいようです。

(注) −−難しければ飛ばしてください)
前者の場合、「日付の書式は、SuperPlayRite の仕様に従います」ということですから、ほんとうなら、
  #D;2001/01/03#
  #D;2001年1月3日#
などと書かないといけません。しかし、「引数が1つの場合は、日付型に変換可能な値が指定されたとみなします」という説明もあります。

つまり、正確に日付を表記しなくても、その位置にあるデータは日付とみなすというのです。日付と見なすことのできる内容を入れてやればいいのです。

【2.文字列関数のMid】

ところで、この関数、「返り値」(関数が計算した答え)は、「曜日が数値で返ります」とのこと。つまり、2001年1月3日を代入すれば、「水」ではなく、「4」が返ってきます。「1」を「日」に、「2」を「月」に、などと変換する必要があります。どうもこの関数、ほしい答えが一発で返ってくるわけではなさそう。

こういうとき、「ヘルプ」ウインドウの上の方にある「文例」をクリックすると、具体的な使用例を知ることができます。

この関数の文例を見ると、
  = Mid("日月火水木金土",DayOfWeek(ThisDate()),1)
とあります。

「ThisDate()」は今日の日付を取得する関数です。今日の日付から、曜日を漢字で表すには、なるほど、Midを使えばいいのですね。この文例を、とりあえずコピーして[B5]の入力ラインに貼り付けておきましょう。文例をマウスで選択し、右クリックして「コピー」を実行します。

Mid関数について、調べてみましょう。「DayOfWeek 関数」のヘルプウィンドウで、いちばん上の「トピックス」をクリックすると、関数を検索するダイアログが開きます。「探したい語句・・・」の欄に「mid」と入力すると、「Mid関数」が選択状態になるので、「表示」をクリック。「Mid関数」のヘルプウインドウが開きます。


参照図

  Mid ( 文字列, 文字位置, 文字数 )
というのが書式。「文字列の指定した文字位置から、指定した文字数分の文字列が返ります」とのこと。

DayOfWeek関数では、日曜日を1番目として数え、曜日を数字で返します。「日月火水木金土」という順番に曜日に数字があてられます。そうすると、逆に言えば、「日月火水木金土」のDayOfWeek番目から1文字を抜き出せばいいわけです。例えば、2001年1月3日なら、水曜日ですから、DayOfWeek関数によって「4」が返ってきます。「日月火水木金土」で4番目というと、「水」ですね。「水」から始まって1文字を抜き出すとなると、答えは「水」です。

【3.日付データをつくる】

  = Mid("日月火水木金土",DayOfWeek(ThisDate()),1)
という状態までたどり着いています。もう一息です。

「ThisDate()」のかわりに、入力した日付を代入してみましょう。「日付」のセル、すなわち[A5]に「3」と入っています。しかし、この数字だけでは、日付になりません。「2001年1月3日」とか、「2001/1/3」とか「2001-1-3」とか、日付らしい表記で年と月を付け加える必要があります。ただ、どんなふうに日付を表現しようとも、それは、文字列です。例えば、「2001-1-3」が数字だとすると、-が引き算として計算され、「1997」になってしまいます。文字列でなければ、「2001-1-3」と表現できません。

ですから、[A5]の数字を文字列に変換しておきます。文字列関数の「String」を使います。
  String(A5)
とすると、[A5]の数字が文字列として扱われるようになります。
  "2001/1/" & String(A5)
と書けば、日付ができあがります。文字列の連結には、「&」を使います。

ただし、このシートをコピーして2月分のシートを作ろうとすると、曜日を求める関数を書き直す必要があります。それはそれで面倒なので、なんとか、汎用性のある形にできないでしょうか?

年月の文字列をどこかから取得すればいいのです。見だしの[E1]に、「2001年1月」と書いたのを思い出してください。ヘッダでなく、セルに見出しを書き込むと、思いがけずに利用できることがあります。この見出しの内容を、関数が参照すればいいのです。

入力ラインの「ThisDate()」をDeleteし、その位置にカーソルを置いたまま、[E1]をマウスでクリックしてください。すると、関数は、こんなふうになりました。
  = Mid("日月火水木金土",DayOfWeek(E1),1)


参照図

[E1]の内容は「2001年1月」ですから、日付の形にするには、
  E1 & String(A5) & "日"
とすればいいはず。これで、「2001年1月3日」という日付が完成しています。

関数はこんな形になっています。
  = Mid("日月火水木金土",DayOfWeek(E1 & String(A5) & "日"),1)
Enterキーを押すと、[B5]に「水」と表示されました。うまくいったようです。試しに、[A5]を「4」に書き換えると、曜日は「木」に変わります。

ここで関数の完成としてもいいのですが、このままだと、日付が空欄の時、曜日がエラーになってしまいます。先週やったように、[A5]が空欄なら何もせず、[A5]が空欄でなければ計算するという条件を付けておきましょう。

  = If(IsBlank(A5),,Mid("日月火水木金土",DayOfWeek(E1 & String(A5) & "日"),1) )

これで関数が一応、完成しました。(入力ラインには1行にして書いて下さい)[A5]をいろいろ変えても、うまくいきます。「一応」と断ったのは、もう少し手をつけたいところが残っているからです。その話は、またあらためてします。

      *   *   *

それでは、ブックを保存しておいてください。次回は表を整えていきます。

次のページ



相楽ねっと    講座もくじ