質問: 前のレコードの値を自動で入れたい accessを使い始めたばかりで初歩的な質問で申し訳ありません、 新しくレコードを作ったとき前のレコードの値を参照し 自動で入力するというのは可能なのでしょうか?? どなたかわかる方がいらっしゃったら力を貸してください。 よろしくお願いいたします。
回答: 326さんの回答にもありますが、自動入力するテキストボックスの「規定値/defaultvalue」プロパティを利用するのが良いでしょう。 新規に入力するデータの規定値ですから、参照するのは、入力済みの最後のデータになりますね。 そこで具体的な方法ですが、フォームの該当するテキストボックスのデータ タブの規定値に、 =dlast("テキストボックス名","フォームの元になるテーブル(またはクエリー)名") と、記述してみてください。 ( defaultvalue プロパティ、dlast 関数を help で確認してください。) (また、326さんのご希望のような id番号の入力の場合は、dlast 関数でなく、dmax 関数を使って、=dmax(・・・・)+1 としてください。) とりあえず、これでご希望に添えるようでしたら、以下は読まなくてもけっこうです。 もし、テーブルデータの並べ替えを行っていて、厳密な処理を行いたい場合のみ、続きをご覧ください。 データの入力は、常に順番に行っていらっしゃるのでしょうか? 例えば、データを日付で昇順に並べ替えをしているテーブルに、古い日付のデータを後から入力するようなことはないでしょうか? もし、このような入力をすると、最後に入力したデータは、画面上では上の方に表示されますが、実際は最終データですので、新規データの規定値も古い日付になってしまいます。 このような問題を回避するには、今、私が思いつくところでは、以下の三つの方法があります。 (1)(入力済みデータから一番最近の日付を参照するなら、)dmax 関数を組み合わせて、規定値の式を記述する。 (2)常に、画面上の最後のデータと同じ一つのレコードだけが抽出されるクエリーを別に作って、このクエリーの値を規定値にする。 (3)vba でレコードセットを定義して、並べ替え後の最後のデータを取得する。 (1)で良ければ、これが一番簡単です。 (2)または(3)の方法を取るなら、私個人としては、(3)の方が、余計なクエリーが増えないし、処理も高速ですので、良いと思いますが、初心者の方で、vba になじみが無い場合は、(2)の方がわかりやすいかも知れません。 まず、(1)の記述方法です。 =dlookup("テキストボックス名","テーブル名","日付フィールド名=dmax(""日付フィールド名"",""テーブル名"")") ( dloolup 関数、dmax 関数、”:文字列内でのクォーテーション をhelp で確認してください。) 次に、(2)の方法で処理する場合の別クエリーの作り方です。 クエリーをデザインビューで新規作成してください。 まず、フォームの元になるテーブル(またはクエリー)をデザインビューに追加します。 次に、並べ替えをするフィールド(この場合は、日付のフィールドでしょうか?)を選択し、並べ替えを「降順」(最後のデータを抽出するので、元のテーブルが昇順で並べ替えられている場合、その逆の「降順」になります。)にします。また、表示のチェックは、はずしておいてください。 それから、次のフィールドを「元になるテーブル名.*」としてください。(「*」を利用すれば、すべてのフィールドが表示されることになります。) 最後に、クエリーのプロパティのトップ値に、1(数字の一です)を入れてください。 ( topvalues/トップ値 プロパティを help で確認してください。) 以上で、最後のレコードのみを抽出するクエリーができます。 dlast 関数が参照するテーブルをこのクエリーに変更すれば、これで終わりです。 もし、(3)の方法にチャレンジしたければ、補足でコメントください。 なお、今、私の手元にあるのは access97 ですので、他のバージョンをお使いの場合、操作方法が微妙に違うかも知れませんが、多分基本的には問題なく動くと思います。