PR

ACCESS アクセス [日付]フィールドを利用して直前日のレコードデータを抽出する

スポンサーリンク
前日データ参照フォーム

ACCESS アクセス 直前日のデータを抽出

エクセルでは、簡単にできることが、同じ考えで設計するとアクセスではとても面倒になります。
連番もなく日付のフィールドを利用して抽出しました。

ACCESSの場合「ID」とは別に、レコードに抽出用の「連番」を作成すると、もっと簡単になると思います。

今回は、クエリをあまり作成したくなかったので面倒になりました。

[日付]フィールドを利用して直前日データの抽出方法

アクセスとエクセルは、利用方法が異なるのでおススメできる内容ではありませんが、何かの参考になればと思います。

※さまざまなトラップがあり、エラー防止を考える必要があります。

フォームで抽出する

入力フォーム

■入力フォームに設定

テキストボックスの名前変更(コントロールソース設定の値をテーブルに反映させるため)
[前日残高]→[前日残高form]
[口座残高]→[口座残高form]
[評価残高]→[評価残高form]

「プロパティシート」名前で設定します。

[前日残高form]

プロパティシート「コントロールソース」 式ビルダーでDLookupを設定します。

1】一部エラー
=DLookup("口座残高","証券会社収支","日付 = #" & DMax("日付","証券会社収支","日付<#" & [日付] &"#") & "#")

2】一部不可
=DLookup("口座残高","証券会社収支","日付 = #" & Nz(DMax("日付","証券会社収支","日付<#" & [日付] &"#"),#1900/1/1#) & "#")

3】一部不可 データの型不一致?
=Nz(DLookup("口座残高","証券会社収支","日付 = #" & Nz(DMax("日付","証券会社収支","日付<#" & [日付] &"#"),#1900/1/1#) & "#"),0)

4】採用
=IIf(IsNull([日付]),Null,Nz(DLookUp("口座残高","証券会社収支","日付 = #" & Nz(DMax("日付","証券会社収支","日付<#" & [日付] & "#"),#1900/01/01#) & "#"),0))

[口座残高form]

「コントロールソース」で設定

1】一部エラーあり
=[前日残高form]+[入金額]-[出金額]+[株取引]

2】採用
=IIf(IsNull([前日残高form]),[入金額]-[出金額]+[株取引],[前日残高form]+[入金額]-[出金額]+[株取引])

[評価残高form]

「コントロールソース」で設定

1】採用
=[口座残高form]+[保有株評価額]

今回テーブルで作成したフィールド

テーブル

マクロで、フォームからテーブルに3項目のデータを反映させます。

プロパティシート「イベント」を使用しました。

Private Sub 評価残高form_Enter()

Me![前日残高] = Me![前日残高form]
Me![口座残高] = Me![口座残高form]
Me![評価残高] = Me![評価残高form]

End Sub

クエリを作成しなくても、なぜかテーブルで完結します…

クエリで抽出する

■クエリに設定

[前日残高]

デザインビュー「フィールド:」設定

1】採用
前日残高: (SELECT 口座残高 FROM 証券会社収支 AS 証券会社収支_1 WHERE 証券会社収支_1.日付 = (SELECT Max(日付) FROM 証券会社収支 AS 証券会社収支_2 WHERE 証券会社収支_2.日付 < 証券会社収支.日付))

以下は、一部エラーまたはデータの型不一致になる可能性があります…

前日残高: Nz((SELECT 口座残高 FROM 証券会社収支 AS 証券会社収支_1 WHERE 証券会社収支_1.日付 = (SELECT Max(日付) FROM 証券会社収支 AS 証券会社収支_2 WHERE 証券会社収支_2.日付 < 証券会社収支.日付)),0)

前日残高: DLookUp("口座残高","証券会社収支","日付 = #" & Nz(DMax("日付","証券会社収支","日付<#" & [日付] & "#"),#1900/01/01#) & "#")

前日残高: Nz(DLookUp("口座残高","証券会社収支","日付 = #" & Nz(DMax("日付","証券会社収支","日付<#" & [日付] & "#"),#1900/01/01#) & "#"),0)

[口座残高]

「フィールド:」設定

1】一部エラーあり
口座残高: [前日残高]+[入金額]-[出金額]+[株取引]

2】採用
口座残高: IIF(IsNull([前日残高]),[入金額]-[出金額]+[株取引],[前日残高]+[入金額]-[出金額]+[株取引])

[評価残高]

「フィールド:」設定

1】採用
評価残高: [口座残高]+[保有評価額]

通常は、こんなデータベースは不要だと思いますが、エクセルで作成した後、アクセスでは?と考えエクセル目線の近い構成で作成してみました…
おススメしませんが参考にしてください。

これには、制限があり同じ日付のレコードを複数作成した場合には対応していません…
時間レベルは考慮していません。
やはり、抽出・集計用の連番が必要になりますね。

コメント

タイトルとURLをコピーしました