SBMJOB
AccessにはD関数という集計したり検索したりと12個の関数があります。便利なので是非使ってみましょう。SQL投げたりするよりも簡潔に記述できるのでいいですよ。注意点はレコード順の不確定さです。
目次
注意点
- 戻り値が一つしかない!
(関数の使用目的の関係上上記の様になります。) - レコード順は無視!
(基本はレコードの到着順らしいのですが最適化によってそれは不確実になります) - 条件に合わない場合はNullが返される
(例外処理を準備しておきましょう、Nz関数等)
D関数一覧
D関数 | 機能 |
Dlookup | テーブルの値を取得 |
Davg | 平均 |
Dcount | レコード数 |
Dfirst | 最初の値 |
Dlast | 最後の値 |
Dmax | 最大値 |
Dmin | 最小値 |
Dsum | 合計 |
DstDev | 合計 |
DStDevp | 標準偏差 |
Dvar | 標準偏差 |
Dvarp | 分散 |
記述方法
D~関数(式、定義域、条件)
D関数説明用テーブル
上記の様な簡単な在庫テーブルをD関数の説明に使用します。
使用例 (非統計関数)
DLookup
Private Sub cmdDLookup_Click()
Dim itemName As String
itemName = DLookup("商品名", "商品マスター", "カテゴリ='ペン' AND 単価 > 90")
Me.txtDcount = itemName
End Sub
商品マスターのカテゴリー=”ペン”かつ単価>90の商品名を検索してかえしてくれますが、
注意点1 ペンという文字列の条件はシングルコーテーションで囲むこと
注意点2 返り値が一つなので商品マスターには二つ条件に合うレコードがあるがボールペンと万年筆どちらが表示されるかは不確定(どちらかが表示される)。
基本的に後から追加されたレコードが表示されるんだけど、DBMSそれぞれの仕様によって生のレコード登録アドレスって色々違うからここはなーんの保証もないよ!って思っててよさそう。アドレス空いた部分に差し込んできたりするからね。
DAvg
Private Sub cmdavg_Click()
Dim avg As Long
avg = DAvg("単価", "商品マスター", "カテゴリ='その他'")
Me.txtDcount = avg
End Sub
DCount
Private Sub cmdDCount_Click()
Dim count As Long
count = DCount("商品番号", "商品マスター", "カテゴリ='器具'")
Me.txtDcount = count
End Sub
商品マスターのカテゴリー=”器具”の商品番号カラムのレコード数をカウントする
注意点は条件の文字列はシングルコーテーションで囲むってとこ。
DFirst
Private Sub cmdFirst_Click()
Dim itemName As String
itemName = DFirst("商品名", "商品マスター", "カテゴリ='器具'")
Me.txtDcount = itemName
End Sub
DLast
Private Sub cmdLast_Click()
Dim itemName As String
itemName = DLast("商品名", "商品マスター", "カテゴリ='ペン'")
Me.txtDcount = itemName
End Sub
DMax
Private Sub cmdMax_Click()
Dim itemMax As Long
itemMax = DMax("個数", "商品マスター", "カテゴリ='紙類'")
Me.txtDcount = itemMax
End Sub
DMin
Private Sub cmdMin_Click()
Dim itemMin As Long
itemMin = DMin("個数", "商品マスター", "カテゴリ='紙類'")
Me.txtDcount = itemMin
End Sub
DSum
Private Sub cmdSum_Click()
Dim itemSum As Long
itemSum = DSum("個数", "商品マスター", "カテゴリ='紙類'")
Me.txtDcount = itemSum
End Sub
使用例 (統計関数)
加筆中
コメント