<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--祝日祭日土日を識別させるために
  1 2 3



さっ、はりきってまいりましょう!負けちゃいられませんって。ねえ。
今日はですね。祝日とか祭日とか、ありますよね。あれの考え方についていろいろお話しようと思うんです。
たとえば、とある会社があって、何人かの従業員が交代で仕事をしているとします。みんな毎日「その日何時間働いたか」ということをちょこっと入力してから帰宅するんですが、データがこんなテーブルに↓たまってってるとします。
労働時間にみあった賃金を計算しようかと思うんですけど、土日はちょっとわりがいいそうなんです。
あと、祝日とかも。
そこで、その日によって計算の仕方を変えて賃金を出す方法、考えてみたいと思います。
つまり・・・ぶっちゃけた話、[作業日]が何曜日か、祝日なのか祭日なのか、どっかで判断できればいいんですよね。
しかし祝日ってのが難しいですね・・・ハッピーマンデーとかいうやつ・・・まったく、泣かせてくれます。
祝日のことは後で考えていきましょう。
まず、今のテーブルでできることを考えてみますと・・・。
クエリで、Format関数を使えば、あたかも「曜日」というフィールドがもともと存在しているかのように見せることができますよね。
曜日: Format([作業日],"aaaa") ← 火曜日 と出る。
曜日: Format([作業日],"aaa")  ← 火 と出る。
出るでしょう?
曜日を出したいだけなら、テーブルにわざわざフィールドを設けて入力しなくても、基準となる日付フィールドさえあればformat関数を使って出すことができます。なるべくなら手間は省きたいですもんね。
多少のことはコレを応用すれば・・・。たとえば、「日曜日だったら労働時間×1500」とかいう場合は、IIF関数を使えばよいでしょう。
式1じゃ味気ないですから、なんか適当なフィールド名に変えた方がよいでしょうが・・・。まあ、今日は練習なのでこのままやりますね。
式1: IIf([曜日]="日曜日",[労働時間]*1500)
日曜日だけ、計算されますね。
IIF関数は、カッコの中に
  IIF(条件式,そうなら,そうじゃないなら)
と、カンマで区切って入力してやることで条件判断をしてくれます。逆を返せば、ちゃんと入力してやらないと何もしません。
3番目の「そうじゃないなら」は、省略可能です。今のところこの部分を何も入力してないので、日曜日の分しか計算してないですね。
条件式は、こういうのはもう皆さん大丈夫だと思いますが、そのフィールドが数値型か文字型か日付時刻型か、によって、書き方がいろいろになります。空っぽだったら、という条件にしたい場合はIsNull関数を組み合わせます。フィールドのデータ型による扱いの違いは、みなさんオッケーですよね。
IIF([曜日]="日曜日",労働時間に1500を掛けた数字を出す,そうじゃない場合はここに書く)
たとえば時給が1000円だったとすると、
式1:IIF([曜日]="日曜日",[労働時間]*1500,[労働時間]*1000)
これで、日曜日は時給が1500円、そうじゃない日は1000円で計算されますね。
基本的にIIF関数は、2択です。でも、「土曜日の場合と、日曜日の場合と、その他の場合」っていう具合に、3択にしたい場合は・・・。そうじゃない場合、のところにもうひとつIIF関数を入れ込みます。
IIF([曜日]="日曜日",労働時間に1500を掛けた数字を出す,IIF([曜日]="土曜日",労働時間に1200掛けた数字を出す)
式1: IIf([曜日]="日曜日",[労働時間]*1500,IIf([曜日]="土曜日",[労働時間]*1200,[労働時間]*100))
あっ、これじゃ、平日の時給が100円になっちゃうな。まあいいか。
IIFがふたつになると、ちょっと複雑になりますけど、一番シンプルな式の書き方をまずマスターして、そこから応用するようになさるとよいと思いますよ。やみ雲に記号が並んでるわけじゃないので、対応するカッコがどうなってるかとか、ホネ組をしっかり押さえてしまってくださいね。
と、結果こうなりました。
IIF文でもある程度のことはできそうですけど、4択5択・・・とか、条件が複雑になると、式ばかり長くなってツブシが効かなくなりそうですよね。
まあ、でも、できないことはないと思いますよ。わたしはイヤだけど。
祝日や祭日の件もあるし、別の方法を考えるといたしましょうか。