【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう

 

【連載】#19 Accessでテーブル内データの最大値を集計-最大クエリを使って求めよう

本記事では Access の 選択クエリ操作において、関数、テーブル名、フィールド名の補完を行ってくれる式ビルダを使い高度なクエリ操作を簡単に行う方法を紹介します。

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
しらかば堂

いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?

 

本記事での題材

本記事での題材は

【連載】#18 Access を使ってグラフ作成用データをどのように作るか一緒に考えよう

の中で紹介した

  1. グラフの横軸となる日付データの個数を400にするために
    T0000_東京都コロナ発症状況_マスタ テーブル
    の一番新しい日付(この例では2021/07/23)に遡る400日以前の レコード は集計に入れない工夫が必要
  2. 入院数の集計を行うために各 レコード 毎に、入院数に相当するフラグの新設が必要

という方針を実装するための
T0000_東京都コロナ発症状況_マスタ テーブル
の中に存在しない入院数に対応する 入院者フラグ フィールドを追加し

日付 退院者フラグ入院者フラグ をフィールド要素としてもつ
T1020_日付_退院者フラグ_入院者フラグ
テーブル を作成する

Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ
を作成することとします。

東京COVITグラフ1

テーブル仕様

入力テーブル

このクエリの入力となる
T0000_東京都コロナ発症状況_マスタ テーブル
テーブル
はこんな感じです。

全体を把握するために先頭部分と最後尾の2つのデータシートビューを改めて掲載しておきますね。

Accessマスタテーブル1
Accessマスタテーブル2

ここで

  • 退院済フラグはあるが入院者フラグはない
  • 退院済フラグの表示は左詰めになっているので文字列型
  • 退院済フラグも最後尾のレコードまであるわけではない

という特徴を確認できるでしょうか。

出力テーブル

そしてこちらが

Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ
を実行後の出力として作成される

T1020_日付_退院者フラグ_入院者フラグ テーブル の内容になります。

こちらもわかりやすいように先頭と最後尾の2つのデータシートビューを掲載しますね。

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう

こちらについても

  • 退院者フラグと入院者フラグがセットになっている
  • 退院者フラグと入院者フラグの表示は右詰めになっているので数値型
  • 退院者フラグは最後尾のレコードまであるわけではない

という特徴を確認できるでしょうか。

念のため T1020_日付_退院者フラグ_入院者フラグ テーブル のデザインビューの内容も見ておきましょうね。

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう

確かに 退院者フラグと 入院者フラグ は数値型ですね。

これで、この退院者フラグ、入院者フラグによる演算が可能な状態となっていることが確認できました。

 

本記事内の選択クエリの特徴

Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリは既に

【連載】#18 Access を使ってグラフ作成用データをどのように作るか一緒に考えよう

の中で紹介した
M1000_作成_T1040_日付_退院者数_入院者数_退院率 マクロ

Accessマクロ1

の内の2番目のクエリ
Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ
として作成してありますので、この内容に沿って紹介しますね。

まず、このクエリはデザインビューで開くと次のようになっています。

Access選択クエリデザインビュー
【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
みなみ

何? これ。
意味不明なんですけど~

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
しらかば堂

確かに今までと違い
格段にややこしそうに見えるかもしれませんね。

でも一つ一つ丁寧に説明していくので
少しだけ頑張って下さいね

まず、このクエリですが、このクエリ

【連載】#11 Access のテーブルからデータを抽出する方法を動画を使って説明します

で出てきた次のようなクエリ

Access選択クエリ普通

と違うところがいくつかあるんですが、わかりますか?

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
みなみ

みなみ、わかんないっ

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう
しらかば堂

さすがにちょっと難しいですね
ではひとつひとつ拾っていきましょう

ざっと見た感じで違うのはこんなところでしょうか

  1. テーブルのフィールド数が違う
  2. 選択クエリのデザインビュー上部にテーブルの箱が2つおいてある
  3. 前の選択クエリではデザインビューのフィールド名部分が単純に
     ID
     No
     :
    というようにデザインビューの上部にあったテーブルのフィールド名と同じフィールド名が入っていたけれど、今回の Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ では
     年月日:公表_年月日
     退院者フラグ: IIf([退院済フラグ]<>””,CInt([退院済フラグ]),Null)
     入院者フラグ: 1
    というように、“:” という記号で挟んだ演算式のような記述になっている
  4. 最初のフィールドの抽出条件の欄に
     >DateAdd(“d”,-400,[T1010_最終日付]![公表_年月日の最大])
    というような条件式が記載されている

といった感じですね。

複数テーブル参照

このうち 1.の「テーブルのフィールド数が違う」は
選択出力するフィールド数の違いなので、これは今までと特に違いはありませんね。

では 2.の「選択クエリのデザインビュー上部にテーブルの箱が2つおいてある」はどうでしょう。

今まで紹介していませんでしたが、実は クエリデザインビュー の上部にはその クエリ が参照する テーブル を全ておいておかなければいけないというルールがあります。

つまりこのクエリ
 T0000_東京都コロナ発症状況_マスタ
 T1010_最終日付
という2つのテーブルを参照しているクエリだということです。

この

 T1010_最終日付

で作成したテーブルですが、抽出条件の条件式の中で

[T1010_最終日付]![公表_年月日の最大]

というような記載をする必要があるため、これをあらかじめデザインビューの上部で参照できるようにするんですね。

ちなみにこの

[T1010_最終日付]![公表_年月日の最大]

という表記は Access 特有のオブジェクトの記述方法なのですが、

T1010_最終日付 テーブル 内の 公表_年月日の最大 フィールド を参照しているという意味です。

演算式を含むフィールド記載

次に 3.「フィールド名部分に “:” 記号で挟んだ演算式のような記述になっている」はどうでしょうか。

これも初めて紹介をしますが、選択クエリでは

  • 出力フィールド名を入力フィールド名の前に”:”記号を挟むことで指定することができる
  • 同様に“:”記号を使って新しいフィールド名を新設することもできる

という決まりがあります。

この決まりによりフィールド欄に記載されたそれぞれの記載内容は次のような意味になります。

記載内容 意味
年月日:公表_年月日 T0000_東京都コロナ発症状況_マスタ テーブル 中の 公表_年月日 フィールドレコード年月日 というフィールド 名として扱う
退院者フラグ: IIf([退院済フラグ]<>””,CInt([退院済フラグ]),Null) T0000_東京都コロナ発症状況_マスタ テーブル 中の 退院済フラグ フィールドレコード に右側の演算(注1)を施し、その結果を 退院者フラグ というフィールド 名で扱う
入院者フラグ: 1 入院者フラグ というフィールド 名に対するレコード値を常に1 として扱う

(注1) IIf 関数、Cint関数を含めた演算内容の意味の詳細は後ほど説明しますが、ここでノ演算処理は [退院済フラグ] にデータが入っていたら文字型を整数型に変換し、データが入ってなかったら、レコードに Null値(何もないという意味)を設定します。

なぜこのようなことをしているかというと、この分析処理の中で [ 退院済フラグのレコード値が文字型の “1” であり、このままでは以降の合計処理等の演算ができないためです。

これらのうちの 退院者フラグ の設定は フィールド 項目エリアをマウスでクリックし縦棒での確定を確認した後、 リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動し、これで行います。

関数を含む抽出条件記載

そして 4.「抽出条件に条件式が記載されている」についてはどうでしょうか。
この例では以下のような感じです。

 >DateAdd(“d”,-400,[T1010_最終日付]![公表_年月日の最大])

この抽出条件に何か記載がある場合、フィールド欄に定義された全てのフィールドの出力はこの抽出条件が満たされたときのみ出力されます。

この条件式はご推察の通り

【連載】#19 Accessでテーブル内データの最大値を集計-最大クエリを使って求めよう

で求めた 公表_年月日の最大 テーブル 内の T1010_最終日付 フィールドの値 から 400 日引いた値より公表_年月日 が大きな レコード 、つまり 直近の400日分の レコード のみ抽出するための条件を記載しています。

この 関数 を含んだ 抽出条件 の設定も 抽出条件 項目エリアをマウスでクリックし縦棒での確定を確認した後、 リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動し、これで行います。

DateAdd 関数の詳細はこのあと説明しますね。

 

Access の 組み込み関数を知ろう

今回登場した IIfCInt、 DateAddMicrosoftAccess 向けに提供している多くの組み込み関数の1つで以下のようなものです。

IIf 関数

IIf はIIf ( expr , truepart , falsepart ) という形で expr 式の評価を行い True か False かにより  truepart の値、もしくは faulsepart の値を返します。

引数 説明
expr 評価を行う評価式です
truepart 評価式の結果が true のとき返される値、式です。
faulsepart 評価式の結果が faulse のとき返される値、式です。

 

Cint 関数

Cint はCInt( expr ) という形で expr 式で記載された任意の文字列式または数値式を数値型に変換します。

引数 説明
expr expr 引数 は、任意の文字列式または数値式です。

DateAdd 関数

 DateAdd は DateAdd ( interval, number, date ) という形で日付の加減算ができます。必要に応じてDateAdd 公式サイトも参照し理解を深めましょう。

引数

記入条件

説明

interval 必須

追加する時間間隔の文字列式
“yyyy”:年、”m”:月、”d”:日、…

number 必須 追加する間隔の数を表す数式を指定します。 正の値 (将来の日付を取得する場合) または負の値 (過去の日付を取得する) を指定します。
date 必須 時間間隔を追加する日付を表す日付型変数

 

式ビルダの利用方法

式ビルダが起動できるのは 選択クエリ のデザインビューの下部にある個々のフィールドの記載項目のうち

  • フィールド
  • 抽出条件

の2項目の部分みです。

これらの項目内に

  • 関数を使う必要がある
  • 他のテーブル内のフィールド名を参照して記述する必要がある

といった状況がある場合、該当項目欄でマウスをクリックした後、 リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動すると対象オブジェクトや関数名、関数書式の自動補完等を行ってくれるのでこれは便利に使えます。

必ず使うのではなく「必要に応じて」使うのがおしゃれな使い方です。

フィールドに対する式ビルダの利用

それでは、以下のような式により、文字型の退院済フラグから数値型の退院者フラグを作成する以下の式

退院者フラグ: IIf([退院済フラグ]<>””,CInt([退院済フラグ]),Null)

を作成するために、式ビルダを使う方法について紹介しましょう。

まず、デザインビューの下にある退院済フラグのフィールド項目欄をマウスでクリックし、マウスが縦棒になっているのを確認しながら リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動します。

Access選択クエリデザインビュー

リボンメニューデザイン 区分にある ビルダー ボタンをクリックすると次のように式ビルダ―画面が現れるので、ここで式ビルダ内下の3つのエリア(左からオブジェクト選択エリア、テーブル内フィールド選択エリア、式の要素エリア)

Access選択クエリデザインビュー式ビルダ

のような式ビルダ―がポップアップし、それぞれの編集エリアで、テーブル名、フィールド名、関数名を簡単に入力できるような補助選択エリアが現れます。

Access選択クエリデザインビュー式ビルダ2

 

表示条件に対する式ビルダの適用

同様に 表示条件 に対する以下の式

 >DateAdd(“d”,-400,[T1010_最終日付]![公表_年月日の最大])

を作成するために、式ビルダ を使う方法について紹介しましょう。

まず、デザインビューの下にある 年月日表示条件 項目欄をマウスでクリックし、マウスが縦棒になっているのを確認しながら リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動します。

すると次のように式ビルダ―画面が現れるので、ここで式ビルダ内下の3つのエリア(左からオブジェクト選択エリア、テーブル内フィールド選択エリア、式の要素エリア)で必要なものを選択していくことになります。

【連載】#20 Accessの選択クエリで式ビルダを使い関数、条件式の入力効率を高めよう

 

実際の式ビルダの起動、操作方法、どういったことができるのかについては

次の動画を何回かご覧下さいね。

見づらいときは画面をフルスクリーンにすることをお勧めします。

 

どうでしたか。

作業の流れは最初から全てを頭に入れてきちんとやるということではなく、何かをやる中で徐々に足りない部分を徐々に直していく、そんなやりかたになっているかと思います。

これは読者の皆さんにも当てはまることだと思いますが、Access による業務効率化って大概こんな感じに徐々にスキルを高めていけば良いのだとと思います。

面白がってやればやるほどそれが自分の身になる。それがこの世界なので。

 

まとめ


いかがですか?

今回は選択クエリに関連して

  • デザインビューの中で複数のテーブルが一度に参照できること
  • フィールド名に”:”を使うことでフィールドを新設、あるいはフィールド名の変更ができること
  • フィールド、抽出条件の記述の中に他のテーブル内フィールドの参照、あるいはAccessの組み込み関数を利用したいとき、式ビルダ を利用することで入力が楽になること
  • 条件判定し出力を制御する IIf 関数
  • 入力を整数値化する Cint 関数
  • 日付に対する加減算を行う DateAdd 関数

について紹介しました。

次回はいよいよここで求めた 
T1020_日付_退院者フラグ_入院者フラグ テーブル
からグラフ作成に直結するテーブルの作成方法を紹介しましょう。

さてこの記事全体の目標は

  •  今の状況から抜け出してもっと前向きな仕事に取り組みたい
  • さっさと仕事を切り上げて充実したアフターファイブを過ごしたい

でしたよね。

あなたの解決したい問題は何ですか?
次回はまた

access集計グループ合計

Access VBA の新しい窓を開きましょう。


Microsoft Access 関連教材は次のリンクからどうぞ。

Access VBA 関連教材の紹介


(有償)本記事中で参照している 16_01.accdb から個人のPC環境に依存する部分を削除した 16_02.zip のダウンロードは次のリンクからどうぞ。

(有償) 16_02.zip をダウンロードする