• ベストアンサー

自動で入力した文字をテーブルに反映させたい

画像のようなテーブルがあるとします。 このテーブルは基準値などを入れておくテーブルでテーブル1とします。 このテーブルを基にしたフォームがあり、そこで入力できるようになっています。 フォームで品番を入力したら色種類と詳細が自動でて、テーブルにも反映されるようにしたいです。 品名は教えて頂き品番を入力したら空白前の文字が返るように設定しています。 色々考えてるうちに何をどうしていいか訳が分からなくなってしまいました。。。 品名、色種類、詳細だけのテーブルをもう一つ作ってそれを参照にしたらいいのか?? 初心者ですので分かりやすくお願いします。 アクセスは2002を使っています。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.9

No8の続きとして、といいますか、No8の確認の前に、   Loop   'フォームを再クエリしてデータを反映させます   Me.Requery   '再クエリするとフォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   DoCmd.GoToRecord , , acLast   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub のところで、   DoCmd.GoToRecord , , acLast をコメントアウトして、   Me.Requery のかわりに、   Me.Refresh を試してみてください。これはカレントレコードを 更新するだけなので、これが本来はいいのかも しれません。

その他の回答 (9)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.10

>ただタブオーダーどおりの指示にはなってくれません。 >イベントを実行するとタブオーダーの一番初めのフィールドに移動します。 これは、どうしてもRequeryによりフォーカスの位置が 初期化されてしまうのでは、と思います。 No9の Me.Refresh はカレントレコードの更新、Requeryは連結している テーブルの更新をするので、少し挙動が違って くるのだろうと、思います。 Me.Requery のかわりに、 Me.Refresh をためしてみてください。ただ、データを入力した 最後のフィールドではなく、「品番」の次の「色種類」 にとどまるかもしれません。 このあたりは、許容の範囲内だろうと思います。

IloveCECIL
質問者

お礼

なりました!!ありがとうございました。 なかなかやっぱりアクセスって難しいです。 助かりました。詳しく丁寧に教えてくださってありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

Accessのバージョンの違いで修正されている かもしれないので、一旦、No5のコードのままで、   DoCmd.GoToRecord , , acLast を   'DoCmd.GoToRecord , , acLast のようにコメントアウトしてどのようになるか、確認してみてください。 もし、フォーカスが一番最初のレコードに飛ぶようであれば、 No7の方法を試してみてください。

IloveCECIL
質問者

補足

ありがとうございました!コメントアウトするとレコードは移動せず出来ました。 ただタブオーダーどおりの指示にはなってくれません。 イベントを実行するとタブオーダーの一番初めのフィールドに移動します。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

(1) 最後のあたりで、   Loop   'フォームを再クエリしてデータを反映させます   Me.Requery   'フォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   DoCmd.GoToRecord , , acLast   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub となっているところを、   Loop   'フォームを再クエリしてデータを反映させます   Me.Requery   'フォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   DoCmd.GoToRecord , , acLast   '一つ前のレコードに戻します   DoCmd.GoToRecord , , acPrevious   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub のように、   DoCmd.GoToRecord , , acLast のあとに、   DoCmd.GoToRecord , , acPrevious を入れて一つ前のレコードに戻します。 (2) あるいは、 最初の変数の宣言で、   Dim bk As Variant としておきます。そして、   Loop   bk = Me.Bookmark   'フォームを再クエリしてデータを反映させます   Me.Requery   Me.Bookmark = bk   'フォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   'DoCmd.GoToRecord , , acLast   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub のように、 Me.Requery を bk = Me.Bookmark と Me.Bookmark = bk で挟みます。 BookMarkプロパティで再クエリする前の位置を bkに格納し、再クエリした後の位置を自分の BookMarkプロパティに当てはめ、再クエリ前の位置に 修正するというものです。 この方法で、一つ前のレコードに飛ぶようであれば   Loop   bk = Me.Bookmark   'フォームを再クエリしてデータを反映させます   Me.Requery   Me.Bookmark = bk   DoCmd.GoToRecord , , acNext のように、 DoCmd.GoToRecord , , acLast を追加して、レコードを一つ前に進め、 位置を修正するということもできます。 以上ですが、このようにするとどうなりますか。 なお、 Docmd.GotoControl コントロール名 という方法はこの場合には向かないので 使えないと思います。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

>このコレクションには項目がありません。と出るのですが何故でしょう? どの部分が黄色になりますか? Set rs = db.OpenRecordset("品名テーブル") のテーブルの名前。 Me!色種類 = rs!色種類 Me!詳細 = rs!詳細 「Me!色種類」の「色種類」はフォームのコントロールの 名前、すなわちテキストボックスの名前。「テキスト1」とかに なっていないか。 「Me!詳細」についても同じ。 「rs!色種類」の色種類はテーブル「品名テーブル」のフィールドの名前。 「rs!詳細」についても同じ。 このあたりを確認してみてくださ。 なお、DAOをつかっているのでDAOのチェックも確認しておいてください。

IloveCECIL
質問者

お礼

'再クエリするとフォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   DoCmd.GoToRecord , , acLast このコードを変更すればいいのですよね? GoToControlで自分なりにしてみましたがコンパイルエラー引数は省略できませんとなりました。 ながながと申し訳ありませんが宜しくお願いします。

IloveCECIL
質問者

補足

ありがとうございました!思い通りに入りました。 でもエンターを押すと勝手に次のレコードに移動してしまいます。 まだフィールドの入力があるのになぜでしょうか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

>品名、色種類、詳細だけのテーブルをもう一つ作って >それを参照にしたらいいのか?? はい、そのようにします。本来はそのようなテーブルが あるべきなのですが、当初はこのテーブル1がそのような テーブルと思っていました。つまり、たとえば商品テーブル のようなものです。 そのテーブルを「品名テーブル」とします。 品名  色種類  詳細 みかん  暖色   黄 オレンジ 暖色   黄 リンゴ  暖色   赤 のようにします。これにオートナンバーのIDなどを 追加して主キーにしてもいいのですが、いまのところ 必要ないかもしれません。 次に、フォームの「品番」の「更新後処理」を 以下のようにしてみてください。これには 「品番」から「品名」を取り出す部分も 含まれています。それと同時に「色種類」、「詳細」 に追加していくようにしています。 Private Sub 品番_AfterUpdate()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim var As Variant   Set db = CurrentDb   Set rs = db.OpenRecordset("品名テーブル")   'split関数で変数varに文字列を半角スペースのところで分離して格納します。配列です。   var = Split(Me!品番, " ")   '分解した文字列の最初を取り出し品名フィールドにいれます   Me!品名 = var(0)   '色種類と詳細を各フィールドに格納します   Do Until rs.EOF     If var(0) = rs!品名 Then       Me!色種類 = rs!色種類       Me!詳細 = rs!詳細       '見つかればここでループを抜けます       Exit Do     End If     rs.MoveNext   Loop   'フォームを再クエリしてデータを反映させます   Me.Requery   '再クエリするとフォーカスが先頭に飛ぶので強制的にレコードの最後に移動させます   DoCmd.GoToRecord , , acLast   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub ほとんどエラー処理をしていませんが、「品番」で書き損じた 場合は、書き直せばいいので、そのあたりは柔軟に。 もし、不都合が出たらまた補足なり、質問なりしてください。 なお、たとえば、「品番」にオレンジとして他のフィールドを クリックしてもデータが反映されるようになっています。 No1~No3で言いたかったのは、テーブルを正規化しておかなければ あとで、必要なデータの加工が面倒になるということなのですが、 もともと、データが変則的な「品番」から始まっているので こちらも少しとまどったようなところです。何よりも苦労するのは 質問者さんですから、最初の作り始めを考えたらどうでしょうか、 ということで回答した次第です。 なお、レポートの件に関しては慣れた人なら、テーブルの正規化と サブレポートなどを使って切り抜けるかもしれませんが、そこは 質問者さんの意地次第だと思います。

IloveCECIL
質問者

補足

実行時エラー3265 このコレクションには項目がありません。と出るのですが何故でしょう? フィールド名も合ってるのですが。。。。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

テーブル1とテーブル2の説明というか、どちらが日ごろの 入力用で、どちらが基準値(規格)を収めておくものか 質問や補足を読み返してみるとますますわからなく なっているのですが。こちらの疑問点をなくしたいので 少し質問をしてみます。テーブル1とテーブル2の説明が 途中で入れ替わっているような気がするのですが。 >フォームで品番を入力したら色種類と詳細が自動でて、 >テーブルにも反映されるようにしたいです。 (1) このフォームの基となっているテーブルはテーブル1ですか、 それともテーブル2ですか。 (2) 反映させるテーブルはテーブル1ですか、テーブル2ですか。 (3) 質問の画像のテーブルはテーブル1としていいのですね。 このテーブルにデータがないフィールドがありますが、 これはこれから入力していくものですか、あるいは この部分に他のテーブルのデータを自動的に入れたい、 ということなのでしょうか。 (4) (3)の続きとして、このテーブルに入力されている データ(品名、色種類、詳細)はその都度入力 しているのですか。またこれらのデータは 決まっているもの(すなわち基準値、あるいは 規格値)なのでしょうか。それならば、質問の >品名、色種類、詳細だけのテーブルをもう一つ >てそれを参照にしたらいいのか?? は合点がいくのですが。 (5) みかん A-1 みかん A-2 オレンジ A-1   ・   ・   ・ という品番というのは測定対象となる いわばロット番号のようなものですか。 (6) 品名  色種類  詳細 みかん  暖色   黄 オレンジ 暖色   黄       ・       ・ これは基準値(あるいは規格値)ということに なるのでしょうか。

IloveCECIL
質問者

補足

説明下手で申し訳ないです。 (1)(2) 自動で出てテーブルに反映させたいのはテーブル1の基準値などが入ってるテーブルです。 新規商品(番号)が出た時に基準値を入力するのですがその時に表示&反映させたいのです。 (3) 分かりにくくしてしまいすいません。基準値の数値が入力されています。 例として作ったもので数値を入れるのを忘れてました。。。 (4) その都度入力しています。それが面倒だし、入力ミスもあってはダメなので 色種類、詳細を自動的に反映させたいのです。 (5) 測定対象となるものです。ロット番号のようなものですが、1つに対してデータは1つではありません。 みかん A-1が数十個あって日々の測定で入力(テ-ブル2)していってます。 (6) 基準値というよりはグループの名前?的な感じでしょうか? そのグループ名でレポートの表示をまとめたいので入力してると言う感じです。 宜しくお願い致します。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

最終的にレポートでのデータの並びは、どのように なっている必要があるのでしょうか。少し具体的に 表示してみてもらえますか。補足にあるような表を レポートに表示するということでしょうか。 >細のフィールドも増やそうとなったのですが入力手間がかかるので >品名を入力すると色種類、詳細も自動で入力出れば これはそれほど難しくはないと思いますが、 どのテーブルにどのようなデータをどのように入力 したいのでしょうか。

IloveCECIL
質問者

補足

今現在補足にあるような感じでレポートで表示しています。 補足ではみかんが先にきてしまってますが品名の昇順で並んでいてオレンジが先です。 これを基準値の大きさでの降順にとの要望があり、品名が混じらないように詳細でグループ分けしようとしています。 テーブル1には品名と大きさ、重量など数種類の基準値が入っています。 テーブル2には日付と品名、大きさ、重量など数種類の測定値が入っています。 色種類や詳細は特にテーブルには必要ないのですがレポートでのグループ分けをしたいので入力してると言う感じです。 色種類や詳細はテーブル2に入っています。 基準値などは他の方が入力する場合もあり、レポート用になど言ってもあまり理解できないので 品名が入力されると自動にテーブルに反映されたらいいのですが。。。 宜しくお願い致します。 説明が下手で分かりにくく申し訳ないです。。。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。もし質問の内容ですすめるのであれば、 テーブル1を、規格テーブル、テーブルカテゴリを 品名テーブルとして、 規格テーブル 規格名ID  品名ID    規格名     色種類   詳細  サイズ  重量 1      1      みかん A-1   暖色     黄          2      2      オレンジ A-1  暖色     黄          3      1      みかん A-3   暖色     黄          4      1      みかん A-4   暖色     黄          5      1      みかん A-2   暖色     黄 6      2      オレンジ A-2  暖色     黄 7      2      オレンジ A-3  暖色     黄 品名テーブル 品名ID       品名 1         みかん 2         オレンジ 3         りんご のように、するのはどうでしょう。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

「テーブル1」のデータをどのように利用するかに よりますが、普通は テーブル1  (これを詳細テーブルとします) 品名ID  カテゴリID    品名     色種類   詳細  サイズ  重量 1      1      みかん A-1   暖色     黄          2      1      みかん A-2   暖色     黄          3      1      みかん A-3   暖色     黄          4      1      みかん A-4   暖色     黄          5      2      オレンジ A-1  暖色     黄 6      2      オレンジ A-2  暖色     黄  7       2      オレンジ A-3  暖色     黄 テーブルカテゴリ カテゴリID    カテゴリ 1         みかん 2         オレンジ 3         りんご テーブル1の品名IDと、テーブルカテゴリの カテゴリIDをそれぞれ主キーとします。 このようにするほうがそれぞれのカテゴリの中の 品種、あるいは規格による管理などに便利では ないかと思います。 品名IDはかならずしもカテゴリごとに品名が 順序良く並ぶ必要はなく、登録順に品名ID が発行されればいいと思います。ですから、 品名ID  カテゴリID    品名     色種類   詳細  サイズ  重量 1      1      みかん A-1   暖色     黄          2      2      オレンジ A-1  暖色     黄          3      1      みかん A-3   暖色     黄          4      1      みかん A-4   暖色     黄          5      1      みかん A-2   暖色     黄 6      2      オレンジ A-2  暖色     黄 7      2      オレンジ A-3  暖色     黄 のように、オレンジ A-1 と みかん A-2 の品名IDが登録順に 発行されていても構わないのです。 カテゴリIDはオートナンバーでもVBAで自動で発行する方法でも どちらでも構わないです。とくに品名IDに意味を 持たす必要はありません。 このときサブフォームなどを利用すれば、カテゴリ別に 見通しよく管理できます。 また、登録も簡単にできると思いますが。 ほんの少し作り込めばできるのですが。

IloveCECIL
質問者

補足

テーブル1はあくまで規格値などを入力しているので新規入力は1ヶ月に数回です。 テーブル2は毎日測定結果を入力しています。 入力はすべてフォームでそれぞれ入力しています。 クエリで平均などを出してレポートで表示しています。 レポート表示の時に色種類で大きなグループ分けをしていてその中でも品名でグループ分けしています。 基準値などが品名によって違うため。 暖色    みかん 基準値  大きさ 10    重量 5             平均 最小   平均 最小    みかん A-1    11  9    5  4    みかん A-2    11  8    6  4    オレンジ 基準値 大きさ 15    重量 9             平均 最小   平均 最小    オレンジ A-1   16 14    10  8    りんご  基準値 大きさ 15    重量 9             平均 最小   平均 最小    りんご B-3   15  13    9   8      品番での降順にしていたのですがサイズでの降順にして欲しいと要望がありました。 しかもサイズ別でも詳細部分は分けて欲しいとの要望があり、元々詳細部分の入力をしていなかった(必要性があまり無いため)のですがレポートの並びを考えた末詳細のフィールドも増やそうとなったのですが入力手間がかかるので品名を入力すると色種類、詳細も自動で入力出れば思い質問させて頂きました。 レポートで並びが特定出来れば入力する必要もないのですが。。。 なんだか訳が分からない補足になってしまいました。 今の所、テーブルで主キーは設定していません。 ナンバーは特にいらないので設定しませんでした。

関連するQ&A

  • アクセス 入力した文字を自動で他のフィールドに返す

    アクセス2000を使用しています。 フォームでテーブルにデータを入力しています。 フィールド1に【みかん A-1】と入力するとフィールド2に自動的に【みかん】と 空白の前の文字を返したいのですが可能でしょうか? 必ず半角のスペースが間に入りますのでその前の文字(文字数は決まってません)を 自動で入力されるようにしたいです。 テーブルのフィールドにも入力されるように反映もしたいです。 DLookupではやはりフィールド全体になりますよね? 分かりにくい説明ですがよろしくお願いします。 初心者ですので分かりやすく教えて頂けると助かります。

  • Accessのフォームでデータを入力すると、テーブルと一致するデータをあるフィールドに代入してしまうことは可能ですか?

    本来のAccessの使い方ではないかもしれませんが・・・。 あるフォームで品番を入力すると、品番マスターなるテーブルから値を 検索して一致したフィールド(品名・数量)の値を直接フォームの フィールドに代入してしまうことは可能ですか? マクロの値の代入というものを使ってもうまくいきません。 また、クエリーを使えば、品番を入力すれば品名・数量が出るように することはできるのですが表示上だけですので、フォームに直接値 が入力されるようにしたいのです。 方法がうまく思いつきません。どうかお知恵をお貸しください!!

  • Accessのふりがな自動入力

    お世話になります。 Accessの振り仮名自動入力機能について質問致します。 ウィザードで振り仮名自動入力を設定したのですが、 テーブルから入力すれば設定が反映されるのに、作成 した入力フォームでは自動入力機能が反映されません。 これは何故なのでしょうか? 以前試したときは、ちゃんと入力フォームでも自動入力されたのですが・・・・。

  • アクセスでフォームに入力した計算式がテーブルに反映する方法

    アクセス2000テーブルからフォームをつくり、このファームに計算式を定義しました。このフォームに入力する分には計算式が機能するのですが、テーブルには計算結果が反映しません(数値が0になってしまいます)。 どうしたらテーブルに反映できるのでしょうか。

  • Access97で自動入力と反映が違うテーブルの場合

    こんにちは、前の質問などでフォームへの自動入力は何とかできるようになったのですが、今度はその入力したデータを他のテーブルBに反映させたいのですが、どうしたら良いのでしょうか? テーブルA 店舗コード 店舗名 ※テーブルAの管理者は私ではなく、ネットワークで私のPCと「テーブルのリンク」でつながっています。 テーブルB 店舗コード 店舗名 商品番号 他に店の情報フィールドをいくつか作成 フォームC 店舗コード 店舗名 商品番号 他に店の情報テキストボックスをいくつか作成 フォームCで、店舗コードを入力したら店舗名が自動的に入力される方法は、フォームCのレコードソースをテーブルAにして、店舗コードの更新後処理をイベントプロシージャにして、下記イベントコードを設定しました。 Private Sub 店舗コード_AfterUpdate() Me![店舗名]=DLookup("店舗名","テーブルA","店舗コード=" & Me![店舗コード] & " ") End Sub そして、フォームの残りのテキストボックスに、店と商品に関するデータを入力し、入力した全てのデータをテーブルBに反映させたいのですが、どうしたら良いのでしょうか? 自動入力の方法でDLookupを使用したのがいけなかったのでしょうか? また、できればテーブルBは商品番号順に並びかえられているのですが、入力したら商品番号のリストの一番下に挿入されるという形にしたいのです。 どうかよろしくお願いします。

  • フォームでの自動入力

    Access2002を使用していますが、フォームでの自動入力につき質問させてください。 勘定科目テーブルというのがあって、コード番号と科目名だけの簡単なテーブルですが、会計取引入力のフォームを作成して、「コード番号を入力したら(勘定科目テーブルを参照して)該当する科目名を別のフィールドに自動表示&入力する」、という処理を行いたいのですが可能でしょうか? Excelのlookup関数のようなものですね。 どなたか教えてください。

  • access 自動反映(?)について

    テーブルA   name code one 1 two 2 テーブルB   Bname Bcode 上記のようなテーブルが有り、テーブルBを使用したフォームを作成しています。 Bname へ入力する値は、テーブルA name にある値と一致します。 フォームで Bname を入力すると、一致したテーブルA name の code を Bcode へ自動反映したいのですが、やり方が解りません。。 どのようにすれば反映させることが出来るでしょうか? よろしくお願い致します。

  • Access フォーム上で計算する方法とそれをテーブルに反映させる方法を教えてください。

    こんばんは。色々試したのですが、わかりませんでしたので質問します。 Accessのフォーム上で計算する方法とそれをテーブルに反映させる方法を教えてください。 サブフォーム入りのサブフォームの中の、「売上」と「原価」を入力すると自動的に「原価率」が表示させ、その「原価率」をテーブルに反映させたいのですが、どうしたらよいのでしょうか。 途中まで考えたのは、選択クエリ上で計算させて、それをフォームにしたら表示のみは出来たのですが、テーブルに反映させる方法までたどりつきませんでした。 どうぞ宜しくお願い致します。

  • acccessのテーブルにマクロを設定する方法?

    テーブルまたはクエリで自動入力できるマクロを設定できる方法を知りたいです。例えば「都道府県」というフィールドの値が"東京"と入力されたとき「都道府県コード」に"1"という値を自動的に入力するというような方法です。同じテーブルを基に作ったフォームでは上記のマクロを設定できますが、テーブルの表形式で他のデータを参照しながら一気に入力したいのでテーブルで設定できるととても作業がはかどりそうなのです。ヘルプもいっぱい読んでみましたが、見れば見るほどチンプンカンプンになってきます。Accessを使い始めてまだ日が浅いので、どうか優しく教えていただけないでしょうか?

  • Access:テーブルの情報を参照して、フォームに反映させる方法

    Access : テーブルの情報を参照して、フォームに反映させる方法 はじめまして。Access初心者です。 データベースの参照の仕方について質問いたします。 現在、商品情報のデータベーステーブルがあり その中には「商品ID」「メーカー名」「商品名」、3つのフィールドがあります。 ここから、入庫テーブルを作るために 入庫フォームに「商品ID」を入力すると 自動で「メーカー名」「商品名」が表示され 最後に「入庫数」を入力すれば、入庫テーブルが完成するようにしたいです。 例) データベーステーブル 商品ID  メーカー名  商品名 1      A社      AAA 2      B社      BBB 3      C社      CCC 4      D社      DDD 上記のデータベースがあり 商品名「CCC」が100個入庫した際 入庫フォームに「3」を入力すると 「3」   「C社」   「CCC」が表示され 最後に、入庫数「100」を入力して、入庫テーブルの完了としたいです。 そこで、入庫フォームにデータベースの内容を反映させる仕方が分かりません。 どなたかご教授願えないでしょうか?

専門家に質問してみよう