• 締切済み

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

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

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.6

#4 (改行位置変更させていただきましたm(__)m) >ですが、70くらいのコード番号があるので[分類項目]="xxx"ならば値の代入で式に >[分類コード]="70"のようなマクロを設定するのに、70行分の内容を書きました。これ >をもっと簡単にする方法はあるのでしょうか?やはり70回書かなければできないもの 直接的な回答 「分類項目」テーブルを作成して、DLookupなどで検索するといいでしょう。 補足 上記のやりかたでもとりあえず動くけれども、この問題を根本的に解決するために は、テーブル構造の改変が必要です。(詳しくは入門書等をお読みください) 1:お使いのテーブル上に「分類コード」フィールドが存在しなければ、追加してくだ さい。 2:「分類」テーブルを作成してください。フィールドは「分類コード」「分類項目」 あたりでいいでしょう。リレーションシップを設定すればなお良し。 2.5:「分類」テーブルにデータを入力してください(70コでしたっけ) 3:フォームにテキストボックスとコンボボックスを一つづつ作成して、双方のコント ロールソースを「分類コード」としてください。 4:コンボボックスのプロパティを設定して、「分類コード」に対応する「分類項目」 を表示するようにします。 5:実際にこのフォームを使ってみてください。テキストボックスに分類コードを入力 したときは、コンボボックスには適切な分類項目が表示され、コンボボックスに分 類項目を手入力(もしくは一覧から選ぶ)したときには、テキストボックスに分類コ ードが自動で入力されるようになったと思います。 6:テーブル上の「分類項目」フィールドはもはや不要ですよね。削除するなり、ご自 由に。 なんか、当初のご質問からかけ離れてきましたね。この件について新たにご質問があ れば、新しくOSIETEに登録していただければと思います。

回答No.5

表形式で入力したいという事でしたら、表形式のフォームを作って、そこに マクロを設定すれば、すんなりいきます。テーブルやクエリーは「生データ」 ですので、そこで入力、修正、削除するのは一種「非常手段」のようなもの ですから。  アクセスではクエリー、フォーム、マクロ等CUT&TRY出来ますから、色々 やってみたらいいでしょう。

chicaski
質問者

補足

ありがとうございます。表形式のフォームができることさえ知りませんでした。表形式でフォームを作って、現在保存してあるマクロを貼り付けてみます。なんとなくできるような気がしてまいりました。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

リレーションテーブルや、コンボボックスを使ったやり方は、先にto-comasさんが書いておられますので、私はマクロやVBAをバリバリに使った複雑な自動入力を表形式で行うやり方について書いてみる事にします。 Accessでは、普通はマクロを使って、テーブルやクエリー(のデータシートビュー)に直接値を入力するようなことはしません。(それをやるようなプログラムは「行儀が悪い」とされます。) というわけですので、自動入力機能はフォーム上にて作成します。VBAとかを使って使いやすい物を作りましょう。(この辺が腕の見せ所ですよね。) で、おもむろに[表示]-[データシートビュー]を実行します。 これで、表形式でありながら自動入力機能を兼ね備えた、ゴージャスな入力フォームの完成です(笑) ちなみに、DoCmd.OpenForm を使えば、最初からデータシートビューで開いたり、途中でデータシートビューに切り替えたり出来ます。DefaultViewプロパティを使えば、デフォルトのビューをあらかじめ設定しておくことも出来ます。 それと、Access入門のためにAccessのヘルプを使用するほど効率の悪いことはありません(笑)。本格的に始めるのであれば、入門書の数冊ぐらいは買っておいても損はないと思います。「リレーショナルデータベースとは」といった項目を読めば、都道府県コードの問題などは、恐らく一発で解消することと思います。

chicaski
質問者

補足

ありがとうございました。表形式のフォームを作れば簡単なのですね。 本当に初心者なのでVBAまでは理解できないレベルですが、とりあえず、適当にやったらフォームの上では作動したマクロで対応したいと思います。そこで質問ですが、70くらいのコード番号があるので[分類項目]="xxx"ならば値の代入で式に[分類コード]="70"のようなマクロを設定するのに、70行分の内容を書きました。これをもっと簡単にする方法はあるのでしょうか?やはり70回書かなければできないものなのでしょうか? ちなみに、設定する「分類項目」は、例えば"大使館"、"航空会社"、"案内所"のようなもので、アルファベット順ではなく、思い通りの順番で並べ替えて印刷したいと思ったので、苦肉の策として「分類コード」なるフィールドを付け加えて見ました。ところがばらばらに入力されるデータのコード番号をいちいち調べるのが面倒くさくなって、「自動的に入力」なる都合のよいものはないかと思い立ったわけです。 スイマセン。勉強不足の初心者が、都合のよいことばかりを考えてこの壁にぶつかってしまったのですが、もしよろしければ再度お教えくださいませ。よろしくお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

#2(to-comasさん)の発言に補足させていただきます。 この発言では、フォーム上のコントロールに対して値集合ソース等を設定するとされていますが、Access97以降(だったかな)では、同様の設定を、テーブルやクエリー中のフィールドに対しても行えるようになっています。 やり方は… テーブルの場合 テーブルをデザインビューで開く 変更したいフィールドをクリック 「ルックアップ」タブをクリック 「表示コントロール」を「コンボボックス」に設定 値集合タイプ、値集合ソースなどを適宜設定する クエリーの場合 クエリーをデザインビューで開く デザイングリッド上の該当するフィールドをクリック [表示]-[プロパティ]で、プロパティを開く 「ルックアップ」タブをクリック 「表示コントロール」を「コンボボックス」に設定 値集合タイプ、値集合ソースなどを適宜設定する です。 私の読解力では、chicaskiさんはテーブルやクエリーのデータシートビューでの利用を想定しているように読み取れましたので、このような補足をさせていただきました。

  • to-comas
  • ベストアンサー率26% (5/19)
回答No.2

 旨く文章で説明できるか自信ないけど、書いてみます。 1.まず「都道府県」テーブルを作ります。ここには、「都道府県名」と「都道府県コード(ID)」フィールドを作成して、データを47件(県)登録します。 2.次に、データを入力したい「作業」テーブルの中に、「都道府県コード(ID)」のフィールドを作ってください。 3.リレーションシップ(上のツールバーの中のボタンにあります)を開いて、「都道府県」テーブルの「都道府県コード(ID)」と「作業」テーブルの「都道府県コード(ID)」を連結させます(フィールド名をドラッグ&ペーストしてください)。 4.次に、「作業」テーブルを元に入力用フォームを作ります。 5.この「作業」入力用フォームのデザインを開いて、「都道府県コード(ID)」のプロパティの値集合タイプをテーブル/クエリーに設定して、値集合ソースを「都道府県」テーブルにします。 6.あとは、列数・列幅・連結列などの項目を設定すれば完了です。 とはいえ、こんなつたない説明でお解りいただけるか自信はありません。 一度、試してみてください。 うまくいかないときは、補足にUPしてください。

  • a-kita
  • ベストアンサー率50% (6/12)
回答No.1

ある規則性がある更新を行うのであれば、その場でデータを埋め込む必要は無いのでは? chicaskiさんの例で言えば、一気に"東京"とか"埼玉"とか入力して、出来上がってから都道府県コードに更新するのがスマートだと思います。(普通はコードを入力して名称を表示させるものですが・・・) どうしてもその場でと言うのであれば、恐らく調べられたことかと思いますが、フォームを作成して、都道府県名テキストボックスのLostFocusイベントで対応するコードを入れるのが良いかと思います。「参照したい他のデータ」の内容は分かりませんが、入力に必要な情報ならクエリーで結合するなりしてうまく表形式フォームにできるかも知れません。 Accessの質問だと、もうやりたい事が少し詳細に書かれているほうが答えやすいっす。 できるならば補足をお願いします。

関連するQ&A

専門家に質問してみよう