質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Access

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

Q&A

解決済

2回答

3851閲覧

accessで銀行口座の入力をしたい。

zerobemy

総合スコア14

Access

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

0グッド

0クリップ

投稿2020/10/14 23:56

編集2020/10/15 00:56

いつもお世話になっております。

accessのフォームで社員の銀行口座の入力を行いたいです。
単票フォームに
銀行のコンボボックス
支店のコンボボックス
口座番号のテキストボックス
があります。

以下知りたいこと
1、銀行のコンボボックスの矢印をクリックすると、銀行コード|銀行名←このように2列で表示されるようにしたいです。
2、銀行名を選ぶと次はそれに対応した支店名がコンボボックスで絞り込めるという仕様にしたいです。
3、銀行は代表的な銀行をテーブルとして保存していますが、そのテーブルにない銀行は都度入力しマスタとして保存したいです。

テーブル内容
【銀行マスタ】
銀行コード:数値型
銀行名:短いテキスト
銀行名カナ:短いテキスト

【支店マスタ】
銀行コード:数値型
支店コード:数値型
支店名:短いテキスト
支店名カナ:短いテキスト

銀行マスタと支店マスタはそれぞれ1対多でリレーションシップを結んでいます。

お手数ですが宜しくお願い致します。

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

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

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

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

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

DreamTheater

2020/10/15 00:40

やりたいこと(仕様)はわかりました。 どこが分からないのですか?
zerobemy

2020/10/15 00:49

>銀行のコンボボックスの矢印をクリックすると、銀行コード|銀行名←このように2列で表示されるようにしたいです。 そして銀行名を選ぶと次はそれに対応した支店名がコンボボックスで絞り込めるという仕様にしたいです。 銀行は代表的な銀行をテーブルとして保存していますが、そのテーブルにない銀行は都度入力しマスタとして保存したいです。 こちらになります。
zerobemy

2020/10/15 01:13

ありがとうございます。 試してみると、コンボで矢印を押すときちんとコードと銀行名が出ますが、選んだあと銀行名のコンボには銀行コードしか表示されません。 銀行名も表示できますでしょうか。 また、支店名のところが表示されませんがそちらの方法も教えて頂きたいです。
zerobemy

2020/10/15 01:15

↑ 返信するところを間違えました。 無視してください。
DreamTheater

2020/10/15 01:56

やりたいこと3を含めた解決ならhatena19さんの回答の方が近道かもしれません。 ただ3については質問を分けるべきでしょうね。 ちょっと丸投げな感じもありますね。。。
guest

回答2

0

ベストアンサー

1、銀行のコンボボックスの矢印をクリックすると、銀行コード|銀行名←このように2列で表示されるようにしたいです。

コード入力用のコンボボックスと名称入力用のコンボボックスを2つ並べて連動させるのがベストな解決策だと思います。下記にサンプルがあります。

コードでも名称でも入力できるコンボボックス - hatena chips

2、銀行名を選ぶと次はそれに対応した支店名がコンボボックスで絞り込めるという仕様にしたいです。

単票フォームなのか、帳票フォームなのかで難易度が変わってきます。
とりあえず単票フォームなら下記をご参考に。

Access:2つのコンボボックスを連動し表示させる(都道府県選択で市町村を表示)

3、銀行は代表的な銀行をテーブルとして保存していますが、そのテーブルにない銀行は都度入力しマスタとして保存したいです。

下記が参考になるでしょう。

■T'sWare Access Tips #471 ~コンボボックスから値集合ソース編集画面を表示する方法~

投稿2020/10/15 01:40

hatena19

総合スコア34075

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

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

zerobemy

2020/10/15 02:26

ありがとうございます。 こちらの方法で試してみたいと思います。 すみません、もう一つ質問があるのですが、 これは銀行口座を登録するフォームですが、社員の銀行口座を格納しているテーブルはまた別にあります。 このフォームから社員の銀行口座を格納しているテーブルにデータを入れようと思うと、リレーションシップを組まないとダメだと思うのですが合っていますか? そうすると、社員の銀行口座を格納しているテーブルの銀行コードと銀行マスタ、支店マスタの銀行コードでリレーションシップを組めばいいのでしょうか。 重ね重ね申し訳ありませんが、アドバイスをいただけたらと思います。
hatena19

2020/10/15 02:44

リレーションシップは組んだ方かいいでしょう。 支店マスタは銀行コードと支店コードの複数フィールド主キーになってますか。 それとも支店コードのみか主キーですか。 それによって設計が異なってきます。
zerobemy

2020/10/15 02:57

ありがとうございます。 銀行コードのみ主キーにしています。
hatena19

2020/10/15 04:30

それでは一つの銀行に対して一つしか支店を登録できないです。 支店コードをユニークなものにして主キーにするか、 銀行コードと支店コードの複数フィールド主キーにすべきです。 帳票フォームでも使う可能性があるなら、銀行コードと支店コードの複数フィールド主キーにしたほうがいいでしょう。
zerobemy

2020/10/16 00:44

返信ありがとうございます。 支店マスタの銀行コードと支店コードを複数フィールド主キーに訂正しました。 銀行マスタは銀行コードしかないので銀行コードを主キーにしています。 銀行・支店マスタはマスタとして登録しているので社員の銀行口座テーブルにはない銀行などがあります。 その場合参照整合性ができないのですが何か方法はあるのでしょうか? 何度も何度も本当に申し訳ありませんが宜しくお願いします。
hatena19

2020/10/16 01:49

「社員の銀行口座テーブル」というのは「社員テーブルの銀行口座フィールド」という意味だとして、 マスターにないデータが他のテーブル(社員テーブルなど)にあるという状態は参照整合性に違反してますので、データベースとしてはあり得ない状態です。社員テーブルにある銀行、支店はすべてマスターに登録しておく必要があります。これは手作業でするしかないです。不一致クエリを使えばマスターにないデータを取り出せますのでそれを利用してください。不一致クエリの作り方が分からない場合は、不一致クエリウィザードがありますのでそれで作成するといいでしょう。
zerobemy

2020/10/16 04:02

確かに登録していない銀行がありました! お手数をおかけしました・・・ 社員の口座テーブルの銀行コード(多側)と銀行マスタの銀行コード(一側) 銀行マスタの銀行コード(一側)と支店コードの銀行コード(多側)でリレーションシップを組みました。 銀行口座の登録フォームにはどれをレコードソースにするのがよいのでしょうか・・・?
hatena19

2020/10/16 05:30

リレーションシップの設定ができたなら、フォームウィザードで銀行マスターと支店マスターから必要なフィールドを選択して、「サブフォームがあるフォーム」を選択します。あとはウィザードを進めていく完成します。下記でくわしく解説されてます。 Accessのフォームのメイン/サブフォームとは | できるネット https://dekiru.net/contents/378/img/3787013.png 上記でメインフォームのレコードソースは銀行マスター、サブフォームのレコードソースが支店マスターになっています。
zerobemy

2020/10/16 06:59

ありがとうございます!! おかげ様でコンボボックスも作り終わりいよいよ入力だというところで、次はこのレコードセットは更新できませんというエラーが・・・(´;ω;`) リレーションシップがわるいのでしょうか? 銀行マスタ:銀行コード(主キー)⇔支店マスタ:支店コード・・・1対多 銀行マスタ:銀行コード(主キー)⇔社員口座テーブル:銀行コード・・・1対多 口座登録フォームのレコードソースは社員口座テーブルになります。 もう終わりだと思ったのに本当に申し訳ないです(´;ω;`)
hatena19

2020/10/16 11:27

どのフォームでそのエラーがでますか。 社員口座の入力用フォームですか。それとも銀行マスターのメインフォームですか。それとも、そのメインフォーム内の支店マスターのサブフォームですか。 > 銀行マスタ:銀行コード(主キー)⇔支店マスタ:支店コード・・・1対多 これは、 銀行マスタ:銀行コード(主キー)⇔支店マスタ:銀行コード・・・1対多 でないとダメでしょう。 また、社員口座テーブルには、銀行コードと支店コードが必要です。 リレーションシップは、下記になります。 銀行マスター.銀行コード⇔社員口座テーブル.銀行コード(一対多) 支店マスター.銀行コード⇔社員口座テーブル.銀行コード(一対多) 支店マスター.支店コード⇔社員口座テーブル.支店コード(一対多)
zerobemy

2020/10/18 23:27

お返事が遅くなり申し訳ありません。 またリレーションシップのご提示本当にありがとうございました。 実際行ってみたところ、 支店マスター.銀行コード⇔社員口座テーブル.銀行コード(一対多) 支店マスター.支店コード⇔社員口座テーブル.支店コード(一対多) こちらのリレーションシップでエラーが出ました。 エラー内容は「主テーブルで参照されている固有のインデックスがありません」です。 支店マスタでは銀行コードと支店コードの2つに主キーを設定しています。 また支店マスタのてテーブルは --------------------------- 銀行コード 支店コード  支店名   1      1   東京営業部   1      4   丸の内中央   1      5   丸の内       ・       ・       ・   5      1   本店     5      2   丸の内 のようなテーブルになっております。 >どのフォームでそのエラーがでますか。 こちらのエラーは社員口座の入力用フォームになります。
guest

0

こんにちは。

  • 銀行コンボボックスのプロパティ「書式」の「列数」を2にする。
  • 銀行コンボボックスのプロパティ「データ」の「値集合ソース」にクエリを書く。

SQL

1select 銀行コード, 銀行名 from 銀行マスタ;

こんな感じになります。
イメージ説明

###追記(銀行名の表示)

  • コンボボックスの右にラベルを追加する。(ラベル名は仮に label銀行名とする)
  • コンボボックスの名前は仮にcombo銀行とする。
  • コンボボックスのプロパティ「イベント」の「更新後処理」にイベントプロシジャーを生成する。
  • combo銀行_AfterUpdate というサブルーチン内で

VBA

1Private Sub combo銀行_AfterUpdate() 2 Me.label銀行名.Caption = Me.combo銀行.Column(1) 3 ' 4 'ここに支店の絞り込み処理を記述する 5 '(後述) 6 Me.Refresh 7End Sub

イメージ説明

支店の絞り込みについて
支店のコンボボックスは銀行コンボボックスの選択値によって動的に変わるので、
銀行コンボボックスの更新後処理イベントプロシジャー内に絞り込み用のクエリを
記述する必要があります。

VBA

1 Me.combo支店.RowSource = "select 支店コード, 支店名 from テーブル2 where 銀行コード = '" & Me.combo銀行.Column(0) & "' order by 支店コード"

で、支店コンボボックスの選択後動作は銀行と同じようなコードを書けばよいです。

投稿2020/10/15 01:06

編集2020/10/15 01:47
DreamTheater

総合スコア1095

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

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

zerobemy

2020/10/15 01:13

ありがとうございます。 試してみると、コンボで矢印を押すときちんとコードと銀行名が出ますが、選んだあと銀行名のコンボには銀行コードしか表示されません。 銀行名も表示できますでしょうか。 また、支店名のところが表示されませんがそちらの方法も教えて頂きたいです。
DreamTheater

2020/10/15 01:52

コンボボックス内にコードと名称の表示はできないと思います。(私がしらないだけかもしれませんが) コードを表示して、名称を別のラベルに表示されるのでは都合が悪いのですか?
sazi

2020/10/18 03:33 編集

銀行名をラベルではなく編集不可のテキストボックスにし、コントトールソースにコンボボックスの銀行名(colomn(1))を設定すれば、イベント処理は不要になります。
DreamTheater

2020/10/15 04:39

スマートな方法ですね、参考になります。 saziさんありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問