🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

782閲覧

Accessフォームで指定のフィールドの値を次のレコードのフィールドに値を自動で取得する方法について

0531

総合スコア15

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2023/03/09 04:05

編集2023/03/12 23:38

実現したいこと

Accessフォームの入力で使用年月と月初メーターと月末メーターというフィールドがあります。使用年月を入力後、車の月初の走行距離を入力する「月初メーター」を入力。その後、車の月末の走行距離を入力する「月末メーター」を入力します。今回実現したいことは月末メーターを入力後、次のレコードの「月初メーター」に入力した「月末メーター」の値が自動で入力されるようにしたいです。わかる方がいましたらご教授お願いします。

例)
使用年月  月初メーター  月末メーター
2023/01  10000     12000   
2023/02

12000と入力後次のレコードの月初メーターに12000が自動で入力されるようにしたいです。
使用年月も2023/01と入力した場合、次のレコードには2023/02と入力できればなおよいです。

前提

レコードの入力で自動でできる部分は自動で入力したいです。同じレコードであれば自動で値を取得することは可能ですがどうしても次のレコードへ入力される方法が分かりません。

発生している問題・エラーメッセージ

エラーはありません。

該当のソースコード

試したこと

ここに問題に対して試したことを記載してください。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2023/03/12 12:54 編集

下記の点について質問に追記してください。 [使用年月]フィールドのデータ型は日付/時刻型でしょうか。 車両は一台だけでしょうか。それとも複数台の車両を管理するのでしょうか。
0531

2023/03/12 23:06

回答ありがとうございます。 いつも助かっております。 「使用年月」は日付/時刻型です。yyyy/mmで表示しています。 車は複数台あります。車の車番などの基本情報を登録するテーブルと今回記載したメーターを入力するテーブル同士を車番で連携しています。
hatena19

2023/03/12 23:17 編集

入力フォームはどのような設計になっていますか。 帳票フォームで車両毎にフィルターをかけて入力するようなかたちでしょうか。 それともメイン/サブフォーム形式で、メインが車両マスター、サブが今回の走行メータのテーブルということでしょうか。 できれば現状の入力フォームのスクリーンショットを追記してもらえると回答がしやすいです。
0531

2023/03/12 23:40

メイン/サブフォーム型式にしています。メインが車両マスターでサブが走行メーターであっています。 コンボボックスより車番を一覧から選択すると入力したいレコードへ移動できるようにしております。 スクショを載せましたのでよろしくお願いします。
hatena19

2023/03/13 03:25

メインとサブは車番でリンクしているということですね。 状況が把握できましたので回答を作成しますのでしばらくお待ちください。
guest

回答1

0

ベストアンサー

次レコード=新規レコードということなので、月初メータのテキストボックスの規定値プロパティに同一車番内での月末メーターの最大値を設定すればいいでしょう。
使用年月の規定値も同一車番内での最大値に1月を加算した日付を設定すればいいでしょう。

サブフォームのレコード移動時のイベントプロシージャを下記のように記述してください。

vba

1Private Sub Form_Current() 2 Dim maxYM 3 If Me.NewRecord Then 4 maxYM = DMax("使用年月", "走行メータ", "車番='" & Me.Parent!車番 & "'") 5 If IsNull(maxYM) Then 6 Me.使用年月.DefaultValue = "" 7 Me.月初メーター.DefaultValue = "" 8 Else 9 Me.使用年月.DefaultValue = "#" & DateAdd("m", 1, maxYM) & "#" 10 Me.月初メーター.DefaultValue = _ 11 Nz(DMax("月末メーター", "走行メータ", "車番='" & Me.Parent!車番 & "'"), 0) 12 End If 13 End If 14End Sub

.DefaultValue の前の部分は該当のテキストボックス名にしてください。

追記

使用年月、あるいは月末メーターを入力した時点で、新規レコードに反映させたい場合のコード例

vba

1Private Sub 使用年月_AfterUpdate() 2 Dim maxYM 3 If IsDate(Me.使用年月.Value) Then 4 maxYM = DMax("使用年月", "走行メータ", "車番='" & Me.Parent!車番 & "'") 5 If IsNull(maxYM) Then 6 maxYM = Me.使用年月.Value 7 ElseIf maxYM < Me.使用年月.Value Then 8 maxYM = Me.使用年月.Value 9 End If 10 Me.使用年月.DefaultValue = "#" & DateAdd("m", 1, maxYM) & "#" 11 End If 12End Sub 13 14Private Sub 月末メーター_AfterUpdate() 15 Dim maxM 16 If Not IsNull(Me.使用年月.Value) Then 17 maxM = Nz(DMax("月末メーター", "走行メータ", "車番='" & Me.Parent!車番 & "'"),0) 18 If maxM < Me.月末メーター.Value Then maxM = Me.月末メーター.Value 19 Me.月初メーター.DefaultValue = maxM 20 End If 21End Sub

実際に動作確認はしてませんので、微修正が必要かもしれません。

投稿2023/03/13 03:57

編集2023/03/13 09:52
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0531

2023/03/13 08:52

回答ありがとうございます。 無事値は自動で入力されるようになりました。 ですが次のレコードを移動後「使用年月」と「月初メーター」が2レコード同じ値で表示されてしまいました。そして次のレコードに移動すると元通り1レコードに変わりました。 例) 使用年月 月初メーター 月末メーター 2023/01 10000    12000 次のレコードに移動し月末メーターを入力したとたんに、、、 2023/02 12000    15000 2023/03 12000 上記のように次のレコードに移動するまで2レコード同じデータが表示されてしまします。 次のレコードに移動すると元に戻ります。 質問してばかりで申し訳ございませんがよろしくお願いします。     
hatena19

2023/03/13 09:33

新規レコードで入力中はまだテーブルに保存されていないので、レコード保存して新規レコードへ移動するまでは反映されないですね。 新規レコードへ移動すれば反映されますので、実用上は問題ないと思いますが、使用年月、あるいは月末メーターを入力した時点で、新規レコードに反映させたいなら、テキストボックスの更新後処理で規定値(DefaultValue )を設定するようにすればいいでしょう。
hatena19

2023/03/13 09:53

回答にサンプルコードを追記しました。
0531

2023/03/14 02:48

そういうことなんですね。 無事できました。 仕組みについてはおおかた理解できました。 いつも助けていただき本当に感謝しております。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問