• ベストアンサー

前のレコードの値を自動で入れたい

accessを使い始めたばかりで初歩的な質問で申し訳ありません、 新しくレコードを作ったとき前のレコードの値を参照し 自動で入力するというのは可能なのでしょうか?? どなたかわかる方がいらっしゃったら力を貸してください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.4

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 ですので、他のバージョンをお使いの場合、操作方法が微妙に違うかも知れませんが、多分基本的には問題なく動くと思います。

kanijya
質問者

お礼

御礼が遅くなりまして申し訳ありません。 yoishoさんの前半の方法で無事活用することができました。 accessというのは本当に奥が深いですね。 まだまだ初心者で後半に書いてくれたものはよく分からなかったのですが 今後活用する機会があるときには使いたいと思います。 というより、使えるように腕を磨きたいです・・・ これからも初歩的な質問を多数入れてしまうと思いますが またお答えいただければ幸いと思います。 本当にありがとうございました。

その他の回答 (3)

  • chikamin
  • ベストアンサー率21% (15/70)
回答No.3

日付の自動入力機能を記入日として使っています。 実際に発生した日は手動で別に記入してます。 自動入力を使うのは集計する時に、誤った年度を記入してしまうと データ漏れが起きそうなので。 テーブル・デザインビューで既定値date()です。

kanijya
質問者

お礼

御礼が遅くなりまして申し訳ありません。 chikaminさんのあとにいただきましたyoishoさんの方法でできてしまいました。 せっかく答えていただいたのに活用できず申し訳ありません。 また何かありましたら返事をいただけると大変うれしいです。 本当にありがとうございました。

  • 326
  • ベストアンサー率5% (1/18)
回答No.2

私も是非教えてもらいたい内容だったので、参考にしようと思って見てました。 以後の回答は、的確なものではありませんが、参考になれば・・・。 前のレコードの値を参照すると言うよりも、これから登録する全てのレコードに、 同じ値を設定するというときに、他のフォームのテキストフィールドの値を 参照するように作ることがあります。 データ入力時のイメージとしては、 1.日付入力フォームを開き、日付を入力 2.何かボタンを押すと、データ入力フォームが開く 3.データ入力フォームには、1の日付が既定値として入力されている という感じです。 設定としては、2のフォームの日付の既定値に、1のフォームの日付フィールドを 参照する式を設定します。 (=[Forms]![フォーム名]![日付]という感じ。) そうすれば、1のフォームの日付を変更するまでは、ずーっと同じ日付が 入力されていきます。 途中で日付を変更するのに、1のフォームに戻らないといけないっていうのが、 ちょっとめんどいですかねえ? ま、参考までにということで。 私の場合、前のレコードの値+1で連番を作りたいんですけどね。 オートナンバーは、なんか上手くいかなくて嫌いなもので・・・。

kanijya
質問者

お礼

御礼が遅くなりまして申し訳ありません。 326さんのあとにいただきましたyoishoさんの方法でできてしまいました。 せっかく答えていただいたのに活用できず申し訳ありません。 また何かありましたら返事をいただけると大変うれしいです。 本当にありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Ctrlキーを押したまま、”(ダブルコーテーション、「ふ」のキー)を押すと 前のレコードの同じフィールドの値が入ります。 レコード単位でもできるのかな?

kanijya
質問者

補足

早々と返事をありがとうございます. bin-chanさんのように何かコマンドを入力する というのではなく、既定値のよう形で前のレコードを参照して 自動で値をいれてくれる、といったようなものでした. 例えば家計簿とかのファイルで 今日の分を入力するのに10件のデータがあったとします. その際、1件目は今日の日付を入力しますが、2件目以降のデータは 自動で日付が入ってくれるようなことでした。    説明が下手で申し訳ありませんが、お分かりになりましたら よろしくお願いいたします.

関連するQ&A

  • 前のレコードの合計に現レコードの値を加えたいのです。

    ACCESSを使っています。 たとえばひとつのレコードに車のデータとして [日付]、[今日の走行距離]、[総走行距離]があるとします。 [今日の走行距離]は入力するとして、[総走行距離] を前に入力した最終日の[総走行距離]に[今日の走行距離] を加えた値を表示できないでしょうか。

  • ACCESS自動でデータを入力するには

    ACCESS2000を使用しています。データベースを作成中です。つぎの2点の入力法を教えてください。 1,データ入力時の年月日を取得し、それを元にIDとしたい。たとえば、2003年10月に入力したとすると、 20031001というIDを自動で入力したいのですが・・・。ちなみに最後の01は入力順番です。 2,前レコードの値とちがいがなければその値を入力しないと自動に前のレコードの値が現レコードに自動入力される。 以上2点です。わかりにくいとは存じますが、よろしくお願いします。

  • 1つ前のレコードのフィールドをコピーするVBAについて

    あるフィールドに入力する時、1つ前のレコードと同じ値であれば、Ctrl+2で簡単に入力出来ますね。 それで、更に入力の手間を省くために、これもVBAで自動化しようと思ったのですが、はてどうしたらと行き詰まってしまいました。 入力用のフォームを作っておいて、いくつかのフィールドに入力するテキストボックスをいくつか作って、そのうち1つはほとんど同じ値を持つとすれば、このフォームの更新前のイベントプロシージャが適切かと思います。このフォームに入力しようとしたら、即座にほとんど決まった値を持つフィールドに、1つ前のレコードの値が入るというようなコードになるかと思います。そのコードの1例を教えて頂けますか?また、他のいい方法はあるのでしょうか? 以上、よろしくお願い致します。

  • Accessで新しいレコードに規定値を入力させるには?

    こんにちは いつも助けてもらってありがとうございます またお願いします アクセスで会社の業務日報を作成しています テーブルである一日のデータを入力します 次に翌日のデータを入力(新規カード)する時に前カードの翌日の日付を自動的に入るようにしたいのですが方法が分かりません また、同じように、前のレコードに入力したデータを次のカードでもそそまま使いたいので同じ内容が複写されるようにしたいのですが、その方法も分かりません 初歩的な質問で申し訳ないのですが、お分かりの方あれば教えて下さい よろしくお願いします

  • 前のレコードから追加のレコードに自動で写したい

    accessの初心者です。コピー用紙の管理を行っております。 A4のコピー用紙を、最新の在庫をA4更新在庫としております。 次のレコードで、更新在庫をA4前在庫という形で、VBAで自動的に写したいのですが、 どのようなプログラムを組めばいいのでしょうか。 初心者なので、最初の方から教えていただければ助かります

  • Access フィールドに入力した値を、同じテーブルの別のフィールドにコピーしたい。

    Accessについて質問させていただきます。 フィールドに入力した値が、同じテーブルの別のフィールドに自動的に入力され、あとでその別フィールドを書き換えても最初に入力したフィールドに反映しないような仕組みを作りたいのですが、やり方が判りません。 初歩的な質問で申し訳ないのですが、ご存知の方がおられましたら、お教えください。

  • ACCESSのレコード操作で1つ前のレコードの再表示方法をご教授下さい。

    アクセスで1レコードの入力が終わり、次の入力フォームに移行した時、前のレコードのフィールド内容を参照したいのです。 VBAで関数DLastで呼び出す様にしているのですが、 毎回同じデータが表示されます。レコードは順次入力されていて、 スクロールで1つ遡ると最終データが表示されています。 解決方法をご教授お願い致します。

  • Accessのレコード件数について

    すごい初歩的な質問で申し訳ありませんが、Accessのレコード件数に制限はあるのでしょうか?

  • アクセスで自動でレコードを増やす

    お世話になります。アクセスでデータを入力するフォームを作っているのですが、月とNoと内容というフィールドがあったときに、今までは、その月に使用する分のレコードをエクセルで作成し、テーブルに貼り付けていました。この作業をボタンを押すと「月を入力して下さい」、「No(始まり)を指定してください」、「NO(終わり)を指定してください」とメッセージを表示し、自動でその分のレコードが追加されるというようにしたいのですが、どうすればよいですか? ご指導のほど、よろしくお願いします。 <テーブルイメージ> 月 No 内容 5月 1 (空欄。入力者がその都度、Noを指定して開き、入力) 5月 2 5月 3 ↑ボタンを押すと自動でレコードと追加したい。

  • 2つ目のレコードの値を取得するには?

    こんにちは。いつもお世話になりっぱなしです。 今回は、あるテーブルの2つ目以降のレコードの値を取得 できないかなぁと思って質問しました。 テーブルAにBというフィールドがあります。 その中にはア、イ、ウ・・・・とレコードがあるとした場合、 1つ目のレコードは Dfirst("B","A")で取得できますが、 2つ目のレコードはどうやって取得すればいいのでしょうか? 関数で出来れば最高なんですが、無理なようでしたら 別の方法でも構いません。 皆さんのお力をお貸しください。 よろしくお願いします。

専門家に質問してみよう