• ベストアンサー

Accessのフォームについて

Accessで、テーブルへのデータ入力を簡易化するための、フォームを作成しています その中で、コンボボックスのなかから項目を入力したら 別に用意されているテーブルから 一致する項目をテキストボックスに 自動的に値を入力できるようにしたいのですが、 どのようにしたらいいのか、わかりません。 ~フォームに入力する項目~ 氏名、年齢、地区(コンボボックス)、地区コード、地区番号、住所、電話番号  等 ~地区テーブル~ 地区コード、地区、地区番号 調べてみたところ、プロパティのコントロールソースというところで、 値を持ってくるための式を作成するということでしたが・・・ 実践してみたのですが、初心者ゆえ、あまりよく理解できませんでした どうかよろしく御願いします。

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

  • ベストアンサー
  • a3453a
  • ベストアンサー率28% (132/460)
回答No.2

地区(コンボボックス)の作成の時に ・元のテーブルは地区テーブルを指定  コンボボックスの表示項目を 3つ指定  (地区、地区コード、地区番号) とします 地区(コンボボックス)のプロパティの中で 更新前処理のところにて イベントプロシジァーを 選択して 右端の ... をクリック 開いたボックスのなかへ Me![TX1] = Me![CB1].Column(1)  Me![TX2] = Me![CB1].Column(2) と入力する Me![CB1].Column(1)  とは  CB1 項目 のなかの 2番目の項目 という意味です (この場合は地区コンボボックスの 2番目の項目*地区コードということになります) CB1 TX1 TX2 は 地区、地区コード 地区番号 のフォームでの 名前です(どんな名前でもいいですが) 各項目のプロパティにおいて1番上に出ている名前です 別の方法としては VBAの DLOOKUP関数を 使用する方法もあります (イベントプロシジァー内にこの命令を入れる)

lovensis
質問者

お礼

ご回答ありがとうございました。 教えてくださった方法で試してみたところ、 おかげさまで解決いたしました。 また、同じ処理でも複数個の方法があることを 勉強いたしました。 今後とも、Accessについて勉強を重ねていきたいです。 今回は、本当にありがとうございました。

その他の回答 (4)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

>~地区テーブル~ >地区コード、地区、地区番号 こういうテーブルがあるとき、他のテーブルでこのテーブルの値を参照したいときには 地区コードだけを参照キーとして取り込みます その他のフィールドを取り込んではいけません これはリレーショナルデータベースの約束事です 詳しくは参考書で正規化について勉強してください ということで、 やりたいと言っておられることはやってはいけないことです というのが回答になります P.S. 年齢のような日々変わるものもテーブルに格納するのはお勧めできません 一度入力すれば変わることのない生年月日にしましょう

lovensis
質問者

お礼

ご回答有難うございました。

noname#140971
noname#140971
回答No.4

補足: ADO関数でなく DLookup() を使う場合は、NO2さんのカラム情報取得がお勧めです。 Private Sub Form_Current()   地区_ID_AfterUpdate End Sub Private Sub 地区_ID_AfterUpdate()   If Len(Me.地区_ID & "") Then     Me.地区名 = Me.地区_ID.Column(2)     Me.地区番号 = Me.地区_ID.Column(3)   End If End Sub

noname#140971
noname#140971
回答No.3

色々と聞きたいことと言いたいことがあります。 そのやり取りを省くために、一つのサンプルを示して回答に代えます。 地区マスター: ID__地区コード__地区名__地区番号 01__E101________東地区_____10101 02__W101________西地区_____20101 顧客名簿: ID__氏名_______年齢__地区_ID__住所______電話番号 01__鈴木 一郎____40________1__東京下町__1111-11-1111 02__中村 主水____50________2__大阪下町__2222-22-2222 ここでは、[地区マスター].[地区コード]の訂正を考慮して[ID]-[地区_ID]で連結しています。 顧客名簿_クエリ: 顧客名簿.ID__氏名_______年齢_地区コード_地区名_地区番号_住所_____電話番号 __________1__鈴木 一郎____40_E101_______東地区____10101_東京下町_1111-11-1111 __________2__中村 主水____50_W101_______西地区____20101_大阪下町__2222-22-2222 SELECT 顧客名簿.ID, 顧客名簿.氏名, 顧客名簿.年齢,     地区マスター.地区コード, 地区マスター.地区名, 地区マスター.地区番号,     顧客名簿.住所, 顧客名簿.電話番号   FROM 顧客名簿 LEFT JOIN 地区マスター   ON 顧客名簿.地区_ID = 地区マスター.ID; このように、地区コード、地区名、地区番号は容易に参照することが出来ます。 ですから、フォーム[顧客名簿]では[地区_ID]をコンボボックスで選択すれば事足ります。 <準備> テーブル[顧客名簿].[地区_ID]のルックアップを設定します。 値集合ソース=SELECT * FROM 地区マスター; 連結列=1 列数=4 列幅=0cm;3cm;3cm;3cm <フォーム[顧客名簿]作成> 準備が終れば、フォーム[顧客名簿]作成します。 ID_________[_1] 氏名_______[鈴木 一郎] 年齢_______[40] 地区_ID____[E101_________] <--- コンボボックス 住所_______[東京下町_______] 電話番号___[1111-11-1111] ですから、[地区_ID]を入力するコンボボックスは自動作成されます。 <地区名、地区番号を参照するテキストボックスの作成要領> ・非連結テキストボックス[地区名]、[地区番号]を配置。 ・プロパティ[使用可能]=いいえ <---- 参照するだけだから! ・プロパティ[ロック]=はい   <---- 参照するだけだから! ・表示コードを書く。 Private Sub Form_Current()   地区_ID_AfterUpdate End Sub Private Sub 地区_ID_AfterUpdate()   Dim lngID As Long   If Len(Me.地区_ID & "") Then     lngID = Me.地区_ID.Value     Me.地区名 = DBLookup("地区名", "地区マスター", "ID=" & lngID)     Me.地区番号 = DBLookup("地区番号", "地区マスター", "ID=" & lngID)   End If End Sub ここでは、Access の DLookup() ではなく3倍速で処理する ADO関数 DBLookup() を使っています。 この関数は、自作する以外にはありません。 そういうことで、一般には DLookup関数を利用されたらいいです。

lovensis
質問者

お礼

ご回答有難うございました。 今回は、二件目にご回答いただいたかたの方法で 解決することが出来ましたが、 Husky2007さんから投稿いただいた方法につきましても ひきつづき勉強をし、 今後に生かせればと思います。 丁寧なご回答有難うございました。

  • htmcr
  • ベストアンサー率36% (11/30)
回答No.1

こんにちは。 どのページを参考にして 具体的にどのような値を試してみたのか教えてください。

lovensis
質問者

お礼

ご回答有難うございます。 二件目にご回答いただいた方の方法で解決いたしました。 参考ページは、Access初心者向けのサイトでした

関連するQ&A

  • Accessのフォームで

    教えてください。下のようなテーブルがあり、これを元にフォームを作成したいのですがいい方法が見つかりません。 【テーブル】  品物テーブル(品物ID、品物、製作所)  社員テーブル(品物ID、社員コード、氏名) このテーブルを元にして下のようなフォームを作りたいのです。 【フォーム】  品物ID [テキストボックス]  品物 [テキストボックス]  製作所 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス] ※社員コード、氏名が3つあるのは、同じ品物を3人が作成することがあるため。(この部分で悩んでいます) このようなフォームを作ることは可能でしょうか? また参考になるようなサイトなどあれば教えてください。 よろしくお願いします。

  • 困ってます!Accessフォームのコンボボックス

    初心者です。とーっても困っています・・・。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 が、しかし、選んだデータがテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、テーブルを見ると、他のテキストボックスに入力した情報は保存されているけど、コンボで選んだデータは空白です。 誰か助けてください!!よろしくお願いします。

  • フォームのプロパティを設定したい(Access2000)

    Access2000 XPです。 都道府県名が1レコードに1つずつ入っているテーブルと 各都道府県名のテーブルが47コあります。 新規でフォームを作成し(フォームのレコードソースはまだ未設定) コンボボックスを1つ置いて、値集合ソースに都道府県テーブルを設定し コンボボックスで選ばれた都道府県にフォームのレコードソースを変更しようと思っています。 Me.RecordSource=コンボボックス.text 単純にこれで良いと思うのですがエラー(入力された値は、フィールド又はコントロールで定義されている入力規則に従っていません)が出て全然更新されません。 どなたか分かる方、解決法をお願いします。。。

  • Accessフォーム

    Access初心者です。 Accessのフォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、 [市区町村]のコンボボックスには「東京都」の市区町村名が選択できるようにしました。 フォームでの入力はきちんと出来るのですが、新しいレコードに入力すると、 前のレコードに入力した項目が消えてしまいます。 (テーブル上には、入力した情報が残っています) 色々試してみましたが、どうしても出来ません。 いったいどうしたらよいのでしょうか。ほとほと困っています。 どうかご教示ください。お願いいたします。

  • アクセスのフォームにて

    こんにちは、いつもお世話になっております。 会社で急きょデータベースが必要になりアクセス2000でデータベースを作っています。 それでフォームを作成しコンボボックスにて品番コードを入力できるようにしたのですが、どうも上役からの反応がイマイチです。というのは「マウスではコンボボックスの項目を選択できるが、キーボードからではコンボボックスの項目を選択できない。キーボードの↑↓ボタンで項目を選んで選択を可能にして欲しい」といわれました。 たしかに、キーボードでデータ入力していてコンボボックスの場所だけマウスに手を動かし品番を選択するのはわずらわしいです。なにか方法はありますでしょうか? 次に今度はエクセルなのですが、VBAで Sub 数式計算() s = InputBox("値を入植してください") Range("A1").Formula="=B1+C1+s" End Sub 値の入力によってセルA1の数式を変更したいのですがエラーになってしまいうまくいきません。 例えば、sにH5を入力したらB1+C1+H5となるようにしたいのですが何か良い方法はありますでしょうか? 以上、2点よろしくお願い致します。

  • Accessのフォーム その2

    すいません、以前にも同じ質問をしたのですが、私の質問の仕方が悪くてうまくいきませんでした。 回答してくださった方、ありがとうございました! もう一度、詳しく質問しなおします。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 しかし、選んだデータの[A]しかテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、[B]のコンボボックスから選択しようとしても空っぽです。 テーブルを見ると、[A]で選んだ[1010]だけが表示されています。 非連結のときはうまく出てたんですが・・。 もしかして連結列が間違ってるのでしょうか?? 元になるテーブルは Aコード A  Bコード B Aコード Cコード C Bコード Dコード D Cコード この2列目を表示したいのです。(2列目が[1010]など表示したいデータ) 列数はそれぞれ「2」で連結列は「2」です。 更新後処理は以下の通りです。 Private Sub コンボ0_AfterUpdate() Me!コンボ2.Requery End Sub Private Sub コンボ2_AfterUpdate() Me!コンボ4.Requery End Sub Private Sub コンボ4_AfterUpdate() Me!コンボ6.Requery End Sub ぜひよろしくお願いします。

  • ACCESS フォームの入力で

    フォームの入力でコード番号を入力すると項目が自動入力出来るようにしたくて 2つ目のテキストボックスのコントロールソースに=DLookUp("[商品名]","テーブル2","[商品コード] = [コード] ")と入力したのですが 1つ目のテキストボックスに入力すると そのときは2つ目のテキストボックスは白紙で 一度フォームを閉じてから立ち上げると2つ目のテキストボックスにも入力されています。 これは閉じないと入力されないのでしょうか? 1つ目を入力した後に表示されるようにしたいのですが・・・。 よろしくお願いします。

  • ACCESSのフォームに配置したコンボボックスで手入力orコンボから選択

    ACCESSのフォームにコンボボックスを配置し、そのコンボボックスの 値はテーブルからデータの一覧を参照しています。 このとき、コンボボックスから値を選ぶだけでなく、手入力 したらそちらの値を取得したいのですがどうすればよいですか? (1)コンボボックスで選んで値を取得 (2)手入力したらそちらの値を取得 の方法を教えてください。 (コードビルダとかいうやつでのプログラミングが 必要ならその辺についても教えてください)

  • アクセスのテーブルとフォームのリンク

    アクセスのテーブルにコンボボックスのルックアップ機能を使って、データに緋もづくIDの値を入力しています。例えば、1:玩具、2:生活雑貨などのデータで、テーブル上には玩具、生活雑貨などの値が表示されていますが、キー項目としては1,2のID値が使われています。 この項目をフォームで表すと、フォーム上には玩具、生活雑貨などの値ではなく、ID値1、2などが表示されてしまいます。フォームで選択しなおしてあげると、その値は正常に保存されテーブル側にも玩具、生活雑貨などの値が正しく表示されています。 テーブル上、フォーム上ともにID値ではなく、項目値(玩具など)を表示するようにしたいのですが、これはどこかの設定が間違っているのでしょうか。 ご存知の方教えていただけないでしょうか。

  • ACCESS2000フォームでコンボボックスを使ったクエリーを作成したい

    ACCESS2000でデータベースを作成しています。 どなたか教えてください!! 検索フォームというのを作り、そこには「部」「課」「掛」を 選択できるようにテーブルを参照してコンボボックスを作成しました。 それぞれの項目を選択した後、「検索」ボタンを押すと コンボボックスから選んだ値と一致するレコードだけを抽出して表示させたいんです。 クエリは何となく作ったのですが、現在は全てのデータが抽出されてしまいます。 条件を一切入力していない状態なんです。 検索条件に"総務部"などと入力すればそのデータだけ抽出 されるようにはなっています。 でも、でも・・・「コンボボックスで選んで値と一致したら」抽出っていう条件をどうやって設定していいかわからないのです。 どうぞよろしくお願いします。

専門家に質問してみよう