本記事では Access の 選択クエリ操作において、関数、テーブル名、フィールド名の補完を行ってくれる式ビルダを使い高度なクエリ操作を簡単に行う方法を紹介します。
目次
本記事での題材
本記事での題材は
の中で紹介した
- グラフの横軸となる日付データの個数を400にするために
T0000_東京都コロナ発症状況_マスタ テーブル
の一番新しい日付(この例では2021/07/23)に遡る400日以前の レコード は集計に入れない工夫が必要 - 入院数の集計を行うために各 レコード 毎に、入院数に相当するフラグの新設が必要
という方針を実装するための
T0000_東京都コロナ発症状況_マスタ テーブル
の中に存在しない入院数に対応する 入院者フラグ フィールドを追加し
日付 、退院者フラグ 、入院者フラグ をフィールド要素としてもつ
T1020_日付_退院者フラグ_入院者フラグ
テーブル を作成する
Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ
を作成することとします。
テーブル仕様
入力テーブル
このクエリの入力となる
T0000_東京都コロナ発症状況_マスタ テーブル
テーブル はこんな感じです。
全体を把握するために先頭部分と最後尾の2つのデータシートビューを改めて掲載しておきますね。
ここで
- 退院済フラグはあるが入院者フラグはない
- 退院済フラグの表示は左詰めになっているので文字列型
- 退院済フラグも最後尾のレコードまであるわけではない
という特徴を確認できるでしょうか。
出力テーブル
そしてこちらが
Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ
を実行後の出力として作成される
T1020_日付_退院者フラグ_入院者フラグ テーブル の内容になります。
こちらもわかりやすいように先頭と最後尾の2つのデータシートビューを掲載しますね。
こちらについても
- 退院者フラグと入院者フラグがセットになっている
- 退院者フラグと入院者フラグの表示は右詰めになっているので数値型
- 退院者フラグは最後尾のレコードまであるわけではない
という特徴を確認できるでしょうか。
念のため T1020_日付_退院者フラグ_入院者フラグ テーブル のデザインビューの内容も見ておきましょうね。
確かに 退院者フラグと 入院者フラグ は数値型ですね。
これで、この退院者フラグ、入院者フラグによる演算が可能な状態となっていることが確認できました。
本記事内の選択クエリの特徴
Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリは既に
の中で紹介した
M1000_作成_T1040_日付_退院者数_入院者数_退院率 マクロ
の内の2番目のクエリ
Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ
として作成してありますので、この内容に沿って紹介しますね。
まず、このクエリはデザインビューで開くと次のようになっています。
何? これ。
意味不明なんですけど~
確かに今までと違い
格段にややこしそうに見えるかもしれませんね。
でも一つ一つ丁寧に説明していくので
少しだけ頑張って下さいね
まず、このクエリですが、このクエリは
で出てきた次のようなクエリ
と違うところがいくつかあるんですが、わかりますか?
みなみ、わかんないっ
さすがにちょっと難しいですね
ではひとつひとつ拾っていきましょう
ざっと見た感じで違うのはこんなところでしょうか
- テーブルのフィールド数が違う
- 選択クエリのデザインビュー上部にテーブルの箱が2つおいてある
- 前の選択クエリではデザインビューのフィールド名部分が単純に
ID
No
:
というようにデザインビューの上部にあったテーブルのフィールド名と同じフィールド名が入っていたけれど、今回の Q1020_作成_T1020_日付_退院者フラグ_入院者フラグ クエリ では
年月日:公表_年月日
退院者フラグ: IIf([退院済フラグ]<>””,CInt([退院済フラグ]),Null)
入院者フラグ: 1
というように、“:” という記号で挟んだ演算式のような記述になっている - 最初のフィールドの抽出条件の欄に
>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_最終日付]![公表_年月日の最大])
この抽出条件に何か記載がある場合、フィールド欄に定義された全てのフィールドの出力はこの抽出条件が満たされたときのみ出力されます。
この条件式はご推察の通り
で求めた 公表_年月日の最大 テーブル 内の T1010_最終日付 フィールドの値 から 400 日引いた値より公表_年月日 が大きな レコード 、つまり 直近の400日分の レコード のみ抽出するための条件を記載しています。
この 関数 を含んだ 抽出条件 の設定も 抽出条件 項目エリアをマウスでクリックし縦棒での確定を確認した後、 リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動し、これで行います。
DateAdd 関数の詳細はこのあと説明しますね。
Access の 組み込み関数を知ろう
今回登場した IIf、CInt、 DateAdd は Microsoft が Access 向けに提供している多くの組み込み関数の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 | 必須 |
追加する時間間隔の文字列式 |
number | 必須 | 追加する間隔の数を表す数式を指定します。 正の値 (将来の日付を取得する場合) または負の値 (過去の日付を取得する) を指定します。 |
date | 必須 | 時間間隔を追加する日付を表す日付型変数 |
式ビルダの利用方法
式ビルダが起動できるのは 選択クエリ のデザインビューの下部にある個々のフィールドの記載項目のうち
- フィールド
- 抽出条件
の2項目の部分みです。
これらの項目内に
- 関数を使う必要がある
- 他のテーブル内のフィールド名を参照して記述する必要がある
といった状況がある場合、該当項目欄でマウスをクリックした後、 リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動すると対象オブジェクトや関数名、関数書式の自動補完等を行ってくれるのでこれは便利に使えます。
必ず使うのではなく「必要に応じて」使うのがおしゃれな使い方です。
フィールドに対する式ビルダの利用
それでは、以下のような式により、文字型の退院済フラグから数値型の退院者フラグを作成する以下の式
退院者フラグ: IIf([退院済フラグ]<>””,CInt([退院済フラグ]),Null)
を作成するために、式ビルダを使う方法について紹介しましょう。
まず、デザインビューの下にある退院済フラグのフィールド項目欄をマウスでクリックし、マウスが縦棒になっているのを確認しながら リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動します。
リボンメニューの デザイン 区分にある ビルダー ボタンをクリックすると次のように式ビルダ―画面が現れるので、ここで式ビルダ内下の3つのエリア(左からオブジェクト選択エリア、テーブル内フィールド選択エリア、式の要素エリア)
のような式ビルダ―がポップアップし、それぞれの編集エリアで、テーブル名、フィールド名、関数名を簡単に入力できるような補助選択エリアが現れます。
表示条件に対する式ビルダの適用
同様に 表示条件 に対する以下の式
>DateAdd(“d”,-400,[T1010_最終日付]![公表_年月日の最大])
を作成するために、式ビルダ を使う方法について紹介しましょう。
まず、デザインビューの下にある 年月日 の 表示条件 項目欄をマウスでクリックし、マウスが縦棒になっているのを確認しながら リボンメニュー にある ビルダー ボタンをクリックして 式エディタ 起動します。
すると次のように式ビルダ―画面が現れるので、ここで式ビルダ内下の3つのエリア(左からオブジェクト選択エリア、テーブル内フィールド選択エリア、式の要素エリア)で必要なものを選択していくことになります。
実際の式ビルダの起動、操作方法、どういったことができるのかについては
次の動画を何回かご覧下さいね。
見づらいときは画面をフルスクリーンにすることをお勧めします。
|
どうでしたか。
作業の流れは最初から全てを頭に入れてきちんとやるということではなく、何かをやる中で徐々に足りない部分を徐々に直していく、そんなやりかたになっているかと思います。
これは読者の皆さんにも当てはまることだと思いますが、Access による業務効率化って大概こんな感じに徐々にスキルを高めていけば良いのだとと思います。
面白がってやればやるほどそれが自分の身になる。それがこの世界なので。
まとめ
いかがですか?
今回は選択クエリに関連して
- デザインビューの中で複数のテーブルが一度に参照できること
- フィールド名に”:”を使うことでフィールドを新設、あるいはフィールド名の変更ができること
- フィールド、抽出条件の記述の中に他のテーブル内フィールドの参照、あるいはAccessの組み込み関数を利用したいとき、式ビルダ を利用することで入力が楽になること
- 条件判定し出力を制御する IIf 関数
- 入力を整数値化する Cint 関数
- 日付に対する加減算を行う DateAdd 関数
について紹介しました。
次回はいよいよここで求めた
T1020_日付_退院者フラグ_入院者フラグ テーブル
からグラフ作成に直結するテーブルの作成方法を紹介しましょう。
さてこの記事全体の目標は
- 今の状況から抜け出してもっと前向きな仕事に取り組みたい
- さっさと仕事を切り上げて充実したアフターファイブを過ごしたい
でしたよね。
あなたの解決したい問題は何ですか?
次回はまた
で Access VBA の新しい窓を開きましょう。
Microsoft Access 関連教材は次のリンクからどうぞ。
(有償)本記事中で参照している 16_01.accdb から個人のPC環境に依存する部分を削除した 16_02.zip のダウンロードは次のリンクからどうぞ。
いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?