<Access クエリーで演算フィールドを使ってみる>
どうも、三流プログラマーのKen3です。 今回は、 Accessのクエリーで演算フィールドを使ってみます。 演算フィールドって言っても、 たんなる計算結果のフィールドなんだけど。/* * 1.今回のキッカケ */
http://www.ken3.org/vba/ に設置してた、感想質問受付で、下記の質問が来ました。 --------------- >このたび、犯罪事件の時効完成の色々なデータをアクセスで >纏めたいと思っています。 > >※質問の内容なのですが。 > >テーブルにあるフィールドが2つあります。 >その1つには日付が全部記載されております。(これをAとします) >もう1つには日付が記載されていたり、無記入だったりします。(これをBとします) > >その2つの日付フィールドをクエリに持ってきまして、 >Bのフィールドに日付が入っていたら、そのBの日付を違う新たなフィールドに >持ってくる。 >Bのフィールドに日付が入っていなかったならば、Aの日付を新たなフィールド >に持ってくる。 >そして、その新たなフィールドに持ってきた日付を3年後の1日前にする。 >例えば、1998年5月25日を2001年5月24日という感じです。 >(時効が三年物の場合です) > >きっと、こんなことはKen3さんにかかれば、簡単なのでしょうが、私には >本を見ても分からず、途方に暮れております。 > >なにとぞお教え願います。よろしくお願いいたします。 > >もしよろしかったら、自分のような何も分からない者は、まず最初に >どのような本を読めば良いのか教えてもらえましたら幸いです。 --------------- 日付系の操作 クエリーで項目を作りたい って感じの質問ですね。/* * 2.クエリーの演算フィールドって? */
勝手なテーブルをまず作ります、 想像しやすいように、 みなさんが利用しているレンタルビデオ店の会員管理で、 ID 入会日(新規の時セット) 更新日(データを更新した日) Point (ご利用ポイント) HFlg (Hビデオを借りたか?(うそです、こんな項目ありません)) 名前 住所 電話番号 なんて、項目があった時、 会員には有効期限があって、有効期限は1年です。 有効期限切れ1ヶ月前にハガキを出力したいと思いました。 ※今は、経費節減でそんなことしない? あっ、でも○○カメラからあと1ヶ月でポイントが消滅します、 買い物に来てお金使ってねとハガキ来たっけ。 ポイント454円、使いに行くか、捨ててもいいか微妙だった。 そんな話は置いといて、 テーブルには、有効期限の項目がありません。 設計ミスだ!誰だこんな欠陥テーブル作ったのは? 決め付けんなよ三流プログラマー、 オレ様が設計したDBだぜ、 DBってのは、計算で求められる項目は普通は持たないんだよ。 有効期限は1年後って決まってんだろ、そしたらDBに項目を持つ必要ないね。 あっ、そうなんですか? ※余談:計算で求められる項目、別に持っててもいいとは思うけど、 設計潔癖症のSE/PGと組んで仕事すると、うるさいよね このへんの話は、長くなるので機会があったらまた今度。。。 クエリーには、 演算フィールドってのがあって ~~~~~~~~~~~~~~ 合計:[単価]*[数量] なんて書き方をすると、テーブルに合計ってフィールドが無くても、 計算結果をクエリーのフィールドとして使えます。 これを演算フィールドと言ってます(で、通じると思います) ポイントは、 合計と名前を付けて、その後に:とコロンを付け、計算式を書きます。 フィールドは[]と囲って普通の式を書きます 演算フィールド名: 式 [単価]*[数量] (フィールドは[]で囲む) 固定の消費税は怒られるけど、 合計:[単価]*[数量]*1.05 なんて、式なので自由にできます。 ↑演算フィールドの設定例。 式が長いと、枠が小さくて書きにくいときあります、 そんな時は、Shift+F2を押すと、別窓でズームした形で入力できます。 ※私みたいに長い式をメモ帳に書いて、貼り付けなくてもOKです(笑) ↑ズームした例/* * 3.日付の計算式を演算フィールドで使う */
テーブル内のフィールドの値を使用して、 加工した演算フィールドが作成可能、そんなことがわかりました。 日付の計算する便利な関数として、 VBAにDateAdd関数があります。 詳しくは、ヘルプを参照してほしいけど、 DateAdd(単位,増減値,基準となる日付・時刻) で 単位は、 yyyy 年 m 月 d 日 h 時 n 分 s 秒 で(他にも四半期などあります)。 増減値の指定をプラス、マイナスの値で計算ができます。 有効期限が1年なので、 有効期限:DateAdd("yyyy", 1, [入会日]) と演算フィールドを作成します。 ↑DateAdd関数を使って、日付の演算をしてみた。/* * 4.IIFを使用して、式の中で分岐した値を使用してみた */
なんとなく、わかってきたけど、 日付が入っている場合は、こっち、入っていないときは、こちら、 と切り替えて、使用したいんだけど。 入会日 2003/04/01 2002/03/01 更新日 (空白) 2003/03/01 だったら、 有効期限 2004/04/01 と 2004/03/01 みたく、条件によって基準のフィールドを変えて、 さらに、1年後の期限を求めたいんだよね私は。 更新日が空白なら、入会日を使用,入っていたら更新日を使用。 これは、IIfって関数があって、それを使用してみます。 IIF(条件, 条件が真の時, 条件が偽の時) なので、 IIf([更新日] Is Null,[入会日],[更新日]) とすると、更新日がNULLなら入会日、そうでない時は更新日を返すので、 DateAddと組み合わせて、 有効期限: DateAdd("yyyy",1,IIf([更新日] Is Null,[入会日],[更新日])) としてみました。 ↑IIf,DateAdd関数を使って、日付の演算 質問は、 >そして、その新たなフィールドに持ってきた日付を3年後の1日前にする。 >例えば、1998年5月25日を2001年5月24日という感じです。 >(時効が三年物の場合です) --- 三年後の1日前だったよね。 時効: DateAdd("yyyy",3,IIf([B日付] Is Null,[A日付],[B日付])) - 1 ※−1で楽したけど、きちんと書くなら、 DateAdd("d", -1, DateAdd("yyyy",3,IIf([B日付] Is Null,[A日付],[B日付]))) と3年後を計算後、1日引く、そんな感じかなぁ。 あと、余談だけど、ものによって(事件の性質によって) 時効が決まっていて、マスター化されているなら、 DateAdd("yyyy",[時効年数],IIf([B日付] Is Null,[A日付],[B日付])) みたいに、3年と固定じゃなく、使えそうですね。/* * 5.終わりの挨拶 */
ポイントは、 演算フィールドの作り方 と 時刻・日付の計算はDateAdd関数を使う って感じかなぁ。 >もしよろしかったら、自分のような何も分からない者は、まず最初に >どのような本を読めば良いのか教えてもらえましたら幸いです。 裁判の優秀な弁護士さんじゃないけど、 まずは、基本の六法全書を覚え、過去の判例を検索、今回の事例と比較。。。 なんてのをプログラムに置き換えた時、 一番初めに見る本かぁ、、、この質問が一番答えにくかったりします正直。 入門書を買って、まずは、 住所録などのサンプルで、 入力、抽出、出力を行う。 それから、データベース系とVBA系の本を購入。 データベース系は、複数のテーブルをつなげながら や 設計の考え方など VBA系は、今回の関数や少し複雑な処理をやる時などのために。 その後、ヘルプのサンプルやネットで事例を検索します。 そのものズバリの例が載ってたり、アレンジしないと出来なかったり、 掲示板で経験者からのアドバスを聞いてみたり、 今回みたいに、メルマガ作者に質問を送ってみたり・・・ いろいろとあるのですが。 ※ヘルプとネット検索だけで出来てしまう人も中には居るけど。 入門書、立ち読みしてよさそうな本、あったら、紹介します。 ※小金稼ぎのバナー広告だけど、 http://www.ken3.org/etc/book.html に、コンピュータ関係のネット書店のバナー載せてます。 最近、整備されてきて、表紙のほかに目次が見れます。 And 出版社のページに行くと、サンプルが落とせたりするので、 本買ってないので改版のサンプルをダウンロードするのは気が引けるけど、 目次で気になったサンプルを落とせる場所もあります。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ※評価は↓で投票してね。感想は掲示板かメールでくださいね。
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]