テーブルデータを参照するメソッド [VBA]
プログラムからテーブルのデータを参照したい場合、ADOなどを利用する方法がありますが、Applicationオブジェクトのメソッドで、簡単に参照することもできます。
DAvg・DCount・DFirst・DLast・DLookup・DMax・DMin・DStDev・DStDevP・DSum・DVar・DVarPメソッドです。
参照できるテーブルは、現在のデータベースに定義されているテーブル、リンクテーブル、クエリです。
リンクが設定されていない、他のデータベースを参照することはできません。
概要は以下の通り。
DAvg ・ 抽出結果の平均を計算して返す
DCount ・ 抽出結果のレコード数を返す
DFirst ・ 抽出結果のうちから、1つのレコードの、指定された項目の値を返す
DLast ・ 抽出結果のうちから、1つのレコードの、指定された項目の値を返す
DLookup ・ 抽出結果の1レコードから、指定された項目の値を返す
DMax ・ 抽出結果のうちからから、最大の値を返す
DMin ・ 抽出結果のうちから、最小の値を返す
DStDev ・ 抽出結果から、母集団の標本値全体の標準偏差を返す
DStDevP ・ 抽出結果から、母集団全体の標準偏差を返す
DSum ・ 抽出結果の合計を計算して返す
DVar ・ 抽出結果から、標本全体の分散を返す
DVarP ・ 抽出結果から、母集団の分散を返す
全部で12個ありますが、よく使うのは、DCount・DLookup・DSum・DMax・DMinあたりでしょうか。
使い方は、どれも同じような感じです。
○DCount
レコードの件数を数えるメソッドです。
・構文
DCount( 項目名 , テーブル名 , 条件 )
項目名 ・ カウントの基準となる項目を指定します。レコードそのものの数を数える場合は、「*」(アスタリスク)を指定します。ここで指定された項目の値がNullだった場合、そのレコードはカウントされません。
テーブル名 ・ 抽出元となるテーブル名、またはクエリ名を指定します。
条件 ・ 省略可能。抽出条件を指定します。書き方は、SQLのWHERE句以降の内容を書きます。
・例
? DCount("*","T売上","日付 BETWEEN #2011/1/1# AND #2011/1/3#")
3
○DLookup
特定のレコードの項目を参照するメソッドです。
・構文
DLookup( 項目名 , テーブル名 , 条件 )
各パラメタの内容は、DCountと同じです。
項目名にアスタリスクは指定できません。
・例
? DLookup("金額","T売上","日付 = #2011/1/3#")
900
一つの値しか返せませんので、パラメタの条件で抽出されたレコードが複数合った場合は、そのうちのどれかが返されます。
どれでも良い場合もあるでしょうが、基本的には結果が1件になるように条件を指定します。
○DSum
抽出されたレコードの、指定された項目の合計を計算して返すメソッドです。
・構文
DSum( 項目名 , テーブル名 , 条件 )
各パラメタの内容は、DCountと同じです。
項目名にアスタリスクは指定できません。
・例
? DSum("金額","T売上","日付 BETWEEN #2011/1/1# AND #2011/1/3#")
3100
○DMax・DMin
抽出されたレコードの、指定された項目の最大値(最小値)を返すメソッドです。
・構文
DMax( 項目名 , テーブル名 , 条件 )
DMin( 項目名 , テーブル名 , 条件 )
各パラメタの内容は、DCountと同じです。
項目名にアスタリスクは指定できません。
・例
? DMax("金額","T売上")
2000
? DMin("金額","T売上")
750
蛇足ですが、指定した項目の最大値・最小値は分かっても、そのレコードにある他の項目の内容は取得できません。
そう言うのは、SQLで書くしかないです。
○参考
・クエリ 最大値をもつレコードの抽出
・クエリ グループで最大値をもつレコードの抽出(相関サブクエリ)
○注意
これらのメソッドは、ACCESSが処理を行うので、指定されたテーブルが外部データベースのリンクテーブルの場合、レスポンスが遅くなる可能性があります。外部のSQLServerやOracleへのリンクだった場合です。
例えば、DsumのテーブルがOracleのテーブルで、データが一億件くらいあったりすると、とんでもなく時間が掛るかも知れません。ADOでSQLを投げれば、Oracleが最適な状態で構築されていれば、一瞬で結果が帰ってきます(帰ってくるかも)。
手軽に利用できますが、その辺を考慮して利用していただきたいです。
テストではレスポンスがよくても、本番以降レスポンスが悪くなっていく要因になります。
コメント 0