[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.085 Access クエリーで演算フィールドを使ってみる

Access クエリーで演算フィールドを使ってみる

メルマガ発行内容

<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でした。 ※評価は↓で投票してね。感想は掲示板かメールでくださいね。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.085を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・