• 締切済み
  • 暇なときにでも

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

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

共感・応援の気持ちを伝えよう!

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

  • 回答No.5

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

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

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

共感・感謝の気持ちを伝えよう!

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Accessのフォームとテーブルについて教えてください。

    Access2003を使用しています。 既存のフォームAにフィールド3個を増やしました。 フォームAはテーブル(1)と連動していました。 追加したフィールドはテーブル(6)のものです。 ところがフォーム上で追加フィールドに入力が出来なくなりました。3フィールドのうち、ひとつはコンボボックスです。表示はされますが確定ができません。 フォームAのSQLステートメントではテーブル(1)・(6)以外にテーブル(2)・(3)・(4)・(5)が結合されています。 フォームAからするとテーブル(2)・(3)・(4)・(5)のデータはIDの名称を見るための参照用です。 テーブル(6)は、追加フィールドのコンボボックスが参照用で、他の2追加フィールドは、フォームから入力してテーブル(6)に反映させたいものです。 テーブル(6)の画面では入力できます。 フォーム上からは入力できません。 設定が何か欠けているからでしょうか? 他の質問では2つのテーブルをひとつのフォームにする場合は、クエリを別に設けた方がいいとなっています。フォームが出来上がっているので、できればクエリを設けずに行いたいのですが、よくない方法でしょうか? 手順なども踏まえて教えていただけると助かります。 よろしくお願いいたします。

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

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

  • アクセス97マクロ:テーブルデータ削除の条件設定方法について教えてください。

    どうぞ教えてください。 毎月仕事上である処理が終わった後に、いくつかのテーブルのデータの一部を削除する作業があり、これをマクロで自動的に処理できるようにしようと考えました。 そこで、最初は削除したいテーブルごとに削除クエリを作り、Where条件として削除したいデータの年月を尋ねるようにし、これをマクロで「クエリの実行」として複数の削除クエリを一気に実行してまとめて処理しようとしました。 上記でも処理はうまくいきます。 ただ、もしクエリを使わずにマクロだけでこのような処理が可能なのであれば、クエリの数も減るため、できればそうしたいと考えています。 その場合、マクロデザイン画面で「テーブルを開く(テーブル名入力)」→「レコードの選択」→「削除」とすれば削除はできると思うのですが、全てのレコードを削除するわけでなく条件に合致する一部のデータだけ削除したい今回のような場合、Where条件(年月)をマクロ上で尋ねるor設定するにはどうしたらいいでしょうか?

  • Accessで、テーブルに入力した値をクエリでマイナス表示にする

    いつもお世話になっております。m(_ _)m 至急教えてください。 テーブルのフィールドに入力した数字を複数のクエリで参照します。 1つのクエリでは、テーブルに入力した値、そのままを表示するので問題ないのですが、別のクエリでは、そのテーブルの値を参照する時、「マイナス」をつけることできますか? テーブルの値自体を「マイナス」にしてしまうと、他のクエリで参照した時に問題になるので、できたら、そのクエリのみでマイナスで参照できるとありがたいのですが・・・ できるようでしたら、方法を大至急教えてください。 よろしくお願いします。

  • accessマクログループの全マクロの実行方法

    お世話になります。 現在、顧客のデータベースを作成しております。DBは名前、住所等の連絡先を入力したテーブルを元に下記のクエリやマクロを作成しています。取引がない顧客等はメイン名簿テーブルから削除して、メインテーブルの構造をコピーした、削除テーブルに入れるようにしたいと考えています。 そこで下記のテーブル、クエリ、グループマクロを作成しました。グループマクロは作成したクエリ3つで構成されています。各アクションクエリは一個一個は正常に作動するのですが、グループマクロを実行しますと、1行目のクエリしか実行されません。実行方法はマクロの画面で更新ボタンを押しても、フォームに削除というボタンを作成してクリック時にグループマクロを実行させるよう設定した場合の両方で起きます。  グループマクロに登録されているマクロを全て実行するにはどうしたらいいのでしょうか。色々調べると、グループマクロは1行目しか実行できないようですが、全て実行する簡単な方法はありませんか?できればVBAではない方法を希望します。大変お手数ですがどうぞ、よろしくお願い致します。  ・(テーブル)メイン名簿(以下、名簿tblとします)    ⇒フィールド:名前、郵便番号、住所、電話、メモ欄、削除の有無、削除処理日  ・(テーブル)削除テーブル(以下、削除tblとします)    ⇒フィールドは上記と同じ  ・(更新クエリ)削除処理日追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除処理日」に処理日が     入力されるようにdate関数を設定しています。(date())  ・(追加クエリ)削除tblへ追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除tbl」へそのレコードを、     追加する。    ・(削除クエリ)名簿tblからの削除    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、名簿tblからそのレコードを、     削除する。  ・(マクログループ)削除処理(上から順番に実行希望)     マクロ名           アクション     クエリ名     削除処理日追加     クエリを開く    (更新クエリ)削除処理日追加     削除tblへコピー      クエリを開く    (追加クエリ)削除tblへ追加   名簿tblからの削除    クエリを開く    (削除クエリ)名簿tblからの削除                                                        以上

  • アクセスのフォームでデータ元をテーブルからクエリにかえたい

    上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。 アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。 そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。 もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。 なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。 どうかお願いします。ご指導ください。

  • Accessのテーブルのフィールドに式を入れる方法

    質問:1 テーブルのフィールドに式を入れる方法を教えてください。 フィールド1、フィールド2、フィールド3とある場合に、 フィールド3=フィールド1+フィールド2を自動入力したいのですが、 どこで設定すればいいのか教えてください。 質問:2 フォームのテキストボックスのコントロールソースに下の式を設定してあります。 ="K-" & [区分] & "-" & CStr([通番]) これをテーブルのフィールドに反映させるにはどのような設定を行えばいいでしょうか。 (フォームのコントロールはウィザードでテーブルの全フィールドを取り込んでいます。) よろしくお願いします。

  • アクセスのテーブルでコードを入力したら名前が出るようにしたい

    アクセス初心者です。 アクセスのテーブルで、コードナンバー(例:01)を入力したら隣のフィールドに自動でそのコードに対する値(例:東京)を表示させたいと思っています。 コードとそれに対応する値(例:01 東京・02 名古屋)というようなテーブルは作ってあります。 クエリやフォームではできるようなのですが、テーブルでそのような事はできないのでしょうか・・・。 宜しくお願い致します。

  • パラメータクエリを一つにまとめたい

    クエリ1を基にフォーム1を作成、 クエリ2を基にフォーム2を作成、 クエリ1も2もパラメータクエリを使用していて フィールド名は「番号」データ型はテキスト型です。 そして新規にフォーム3を作成しフォーム1とフォーム2をドラッグしました。 この状態でフォーム3をダブルクリックすると パラメータの入力を2回求められますがどちらも同じ番号を入力しています。 (「001」などを2回入力) これを1回にすることは可能でしょうか? ・番号フィールドの基テーブルはクエリ1と2は違うテーブルです。 ・クエリ1と2は一つにまとめたくありません。 フォーム3上に別々に表示させたいです。 ・クエリ1には全ての番号がありますがクエリ2には抜けている番号があります。 「クエリ1の全レコードとクエリ2の同じ結合フィールドのレコードだけを含める。」で全ての番号を表示できる状態です。 説明が下手ですいません。 アドバイスお願い致します。

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m