• ベストアンサー

Accessのフォームについて

以前の質問もイロイロと拝見しましたが、よくわからなかったので 質問させていただきます。 はっきりいってAccess初心者です。 テーブルをつくったことと入力程度しかしたことがありません。 ・・・が、フォームをつくらなくてはならなくなりました。 ずっと取り組んできたんですが、すでにだいぶ月日がたってしまって 会社の人たちから毎日のように進捗をきかれてかなりプレッシャーです。 お力を貸していただけたらと思います。 ●不明点 都道府県と市町村と年齢層と比率(料金の)が入っているデータがあります。 このデータは都道府県×市町村×年齢層のセット毎に比率が異なっていて 全部で6000件程度の組み合わせがあります。 たとえば・・・東京都×杉並区×50代→料金比率38%といった具合です。 これを(1)都道府県のテキストボックスをクリックしたときに都道府県の一覧が表示される (2)(1)で選んだ都道府県名によって市町村名のテキストボックスに市町村一覧が表示される (3)(2)までで選んだ都道府県と市町村によって年齢層のテキストボックスに年齢層の一覧が表示される (4)(3)までで選んだ都道府県×市町村×年齢層の組み合わせによって、 比率のテキストボックスにそれに応じた比率が選択される、というふうにしたいんです。 さらにこの比率に金額をかけて回数分で割って・・・というようなことをしていくのですが、とりあえず上記の部分の作成ができず、お手上げ状態になっています。お手数ですがどうすればよいか教えていただけないでしょうか? テーブルはこういう項目にしたほうがいいというようなものがあればそちらも教えていただけると大変助かります。

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

  • ベストアンサー
回答No.3

まず、 都道府県 市町村 年齢層 比率 都道府県1 市町村1 10   15 都道府県1 市町村1 20   25 都道府県1 市町村2 10   35 都道府県1 市町村2 20   45 都道府県2 市町村3 10   55 都道府県2 市町村3 20   65 都道府県2 市町村4 20   75 都道府県3 市町村5 30   85 ・・・ と言うようなテーブルがある場合の話です。 違ったら読み飛ばしてください。 このテーブル名を「T_DATA」とします。 次に新たにフォームを作ります。 このフォーム名を「F_FORM」とします。 このフォームに4個のコンボボックスと1つのテキストボックスを作ります。 名前を コンボボックス:都道府県、市町村、年齢層、tmp比率 テキストボックス:比率 とします。 コンボボックスのプロパティーの「値集合ソース」を設定します。 都道府県:SELECT [都道府県] FROM T_DATA GROUP BY [都道府県] 市町村:SELECT [市町村] FROM T_DATA WHERE 都道府県=[forms]![F_FORM].[都道府県] GROUP BY [市町村] 年齢層:SELECT [年齢層] FROM T_DATA WHERE (都道府県=[forms]![F_FORM].[都道府県]) And (市町村=[forms]![F_FORM].[市町村]) ORDER BY [年齢層] tmp比率:SELECT [比率] FROM T_DATA WHERE (都道府県=[forms]![F_FORM].[都道府県]) And (市町村=[forms]![F_FORM].[市町村]) And (年齢層=[forms]![F_FORM].[年齢層]) テキストボックスのプロパティーの「コントロールソース」を設定します。 比率:=[tmp比率] 都道府県、市町村、年齢層のコンボボックスのプロパティーの「更新後処理」を[イベント プロシージャ]にして、モジュールを設定します。 Private Sub 都道府県_AfterUpdate() 市町村.Requery 市町村.Value = Null 年齢層.Requery 年齢層.Value = Null tmp比率 = Null End Sub Private Sub 市町村_AfterUpdate() 年齢層.Requery 年齢層.Value = Null tmp比率 = Null End Sub Private Sub 年齢層_AfterUpdate() tmp比率.Requery tmp比率 = tmp比率.ItemData(0) End Sub 以上です。 簡単に解説です。 色々な方法があると思いますが、1つの方法です。 コンボボックスで選んだ値によって、次のコンボボックスのリストを再構築します。 年齢層が選択された段階で、tmp比率のコンボボックスは、リストが1つのコンボボックスになるので、最初の値を表示します。 最後がテキストボックスということで、比率にtmp比率(コンボボックス)の値をコピーしています。 tmp比率を使わない方法もありますが、この方が楽(たぶん)だろうと思うからで、最後にtmp比率のプロパティの「可視」を「いいえ」にしておいてください。 都道府県や市町村に関して、表示順を変えるためには、別のテーブルを用意する必要があります。 p.s. 独学のためと、個人的に作る場合はほとんどモジュールにするので、おかしい所があってもご容赦を >ずっと取り組んできたんですが、すでにだいぶ月日がたってしまって >会社の人たちから毎日のように進捗をきかれてかなりプレッシャーです。 これに「ぐっ」と来るものがあって、「とりあえず形にする」と言う事で、参考になったら嬉しいんですが

MINYA3481
質問者

お礼

大変遅くなりましたが・・・ついに作成終了しました! ありがとうございました。 結局、検索フォームみたいなのをコンボボックスとマクロを使って作成することになりました。 どうにか1月中にフォームができたのですごく感謝しています。 色々と教えていただきありがとうございました。 すごく勉強になりました。

その他の回答 (2)

回答No.2

こんにちは、No1です。 補足を拝見しました。 >(3)は都道府県や市町村によって表示する内容がかわります・・・ (1)、(2)と同様にテーブルを作成する方法がありますが、それだと  都道府県の数×市町村の数 ぶんのデータを入力しなければならないので現実的ではなさそうですね。 なにかの基準をあたえてあげないと、Access側では年齢層を表示できません。 一番簡単に作成するとすれば、10代、20代、30代などの(?)データが入っているテーブルを作成しておき、これをコンボボックスで表示する方法がありますが、これだと常に同じ年齢層が表示されてしまいます。 入力する人が注意して正しいものを選択しなければなりません。 Access側で自動的に該当する年齢層だけ表示するには、組み合わせ分のデータが入力されているテーブルを作成して絞込みをする方法があります。 (2)の市町村を表示する方法と同じです。 クエリを使用したほうがマクロだけで作成するよりも簡単かもしれません。 >(4)の比率は算出するのではなくて(1)~(3)の組み合わせごとにそれぞれ決まったものがあるんです。ですから(1)~(3)を組み合わせたときに自動的にその比率が探し出されて表示、みたいなのが理想なんですけど・・・やっぱりそうなるとマクロ組まなきゃダメなんでしょうか・・・? 自動的に表示するとすると、何を表示するかを判断する基準が必要になるんです。 それが計算式で表せるようなものであれば、マクロを作らなくてもできそうなのですが・・・でもダメそうですね。 今まではどのようにして導き出していらっしゃったのでしょう? 単純に対応表みたいなものがあって、それを見て算出していたのであれば、その対応表自体をテーブルとして作成し、表示することもできると思います。 6000件程度の組み合わせがあるということなので、それをまるごとテーブルにするということです。 表示する比率は、選択した都道府県と市町村で絞込みしたものを表示するようにします。 絞込みはクエリを作成するのがいいのですが、フォームで選択した都道府県で絞込みをするには、フォーム上の都道府県のコンボボックスのコントロール名を条件欄に入力します。 ・・・ってクエリは作ったことがないのですよね?? 操作が複雑なのでちょっとココでは書ききれません・・ごめんなさい。 でも考え方をヒントととしてお役立ていただけたらと思います。 既にExcelなどでデータがあるのであれば、インポートという機能を使用すれば取り込みができるので、テーブル作成の負担を軽減することができますよ。 具体的な操作方法までは1600文字に収まらないので書ききれませんが・・・ がんばってくださいね!

MINYA3481
質問者

お礼

大変遅くなりましたが、ついに作成できました!! 回答ありがとうございました。 すごく感謝しています。

回答No.1

初心者でデータベースの構築は大変ですね・・・拝見したところ、テーブル、フォームのほかにマクロの知識も必要なようです。 できればAccessの講習会などを受講してマクロまで習得されることをオススメしますが・・・ 簡単に分かる範囲でお答えしますね。 (1)都道府県名の一覧を表示する。 フォーム上で[▼]ボタンをクリックしたときに一覧が表示できる機能で、「コンボボックス」というものがあります。 コンボボックスで表示させたい一覧をテーブルとして作成しておきます。 この場合は都道府県名の一覧が入力されているテーブルですね。 テーブルは、主キーの昇順で並べ替えされるので、北から表示したいのであれば、都道府県名のほかに連番を入力するとよいです。 1 北海道 2 秋田 という感じです。 「都道府県と市町村と年齢層と比率(料金の)が入っているデータ」を「A」というテーブルであると仮に呼びます。 都道府県のテーブルと「A」をリレーションシップで結合します。 「A」をもとにフォームを作成します。 はじめは都道府県がテキストボックスになっていますので、削除して新たにコンボボックスを作成しなおすか、コントロールの種類の変更でコンボボックスにします。 表示するデータの設定は煩雑なので書ききれませんが・・・ 「A」テーブルの都道府県のフィールドプロパティで、ルックアップウィザードを使用し、先に関連付けておくと、テキストボックスをコントロールボックスにする作業はしなくて住むので楽です。 ルックアップウィザードは、データ型一覧の一番下にあります。 (2)市町村名の表示 コンボボックスに表示するということでは(1)と同じなのですが、選択した都道府県によって表示する市町村名をかえるとなると、マクロを組む必要があります。 都道府県名のコンボボックスの「更新時」プロパティに、該当する市町村名を表示するように設定します。 下準備として、都道府県名と市町村名の入っているテーブルが必要です。 これは(1)で説明した都道府県名のテーブルとリレーションシップを設定してください。 (3)年齢層の一覧 ちょっとよくわからなかったのですが、年齢層はどの都道府県、市町村の組み合わせでも同じものを表示するのでしょうか? であれば、(1)と同様に、年齢層のテーブルを作成し、コンボボックスに表示するように設定します。 都道府県や市町村によって表示する内容をかえるのであれば、条件判断をするためのマクロが必要かもしれません。 (4)比率の表示 比率は何に基づいて算出されるのでしょうか? 特定の係数があるなら、テーブルに係数のフィールドを作成しておき、フォーム上で計算することができます。 フォーム上で計算を行うには、新規にテキストボックスを作成して、直接計算式を入力します。 計算式にフィールド名を使用するときは[ ]でくくります。 たとえば =[フィールド1]*[フィールド2] のような感じです。

MINYA3481
質問者

補足

すごくわかりやすい説明ありがとうございます! (3)は都道府県や市町村によって表示する内容がかわります・・・ (4)の比率は算出するのではなくて(1)~(3)の組み合わせごとにそれぞれ決まったものがあるんです。ですから(1)~(3)を組み合わせたときに自動的にその比率が探し出されて表示、みたいなのが理想なんですけど・・・やっぱりそうなるとマクロ組まなきゃダメなんでしょうか・・・?

関連するQ&A

  • Accessについて。フォームでデータ入力

    超基本的な質問ですみません。 仮に下記のような構造のデータベースがあったとします。 テーブル 都道府県名 フィールド 都道府県 テーブル 住所    フィールド 都道府県 市町村 テーブル 顧客    フィールド 都道府県 市町村 顧客にデータを入れていくために"顧客情報入力"というフォームを作ります。 "都道府県"をコンボボックスで選択しました。 市町村のコンボボックスに上の"都道府県"で選択した都道府県の"市町村"だけを表示させるためにはどうしたら良いのでしょうか。 クエリについてはある程度理解していたつもりなのですが、頭が真っ白になってしまいました。

  • ロータスアプローチのリストボックスでスクロールリストに表示する値を少なくする方法

    ロータスアプローチのリストボックスの使い方で質問です。 「都道府県名」のリストボックスと「市町村名」のリストボックスを作っています。 都道府県リストボックスで「東京都」を選択した場合、市町村リストボックスには都内の市町村名だけ表示させたいと思っています。 ご存知の方がいらっしゃれば、是非とも教えて下さい。

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

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

  • Access2000のフォームに関する悩み

    アクセス2000で以下のようなデーターベースの構築に悩んでいます。 『各人がいつどの街へ行ったかを記録するデータベース』です。 ・登録テーブル(登録ID、登録者、登録日) ・行先テーブル(行先ID、登録ID、都道府県、市町村、日時) というようなテーブルを作成し、登録テーブルと行先テーブルをリレーションシップで結びます。 登録テーブルを元にした登録フォームを作成し、行先テーブルを元に表形式の行先フォームを作成し、行先フォームを登録フォームのサブフォームとして組み込みます。 尚、都道府県と市町村の入力は各マスタテーブルを作成し、コンボボックスから選択させ、クエリを使って都道府県から市町村の絞込みを実施させます。 ここで、今回の悩みですが、以下の(1)(2)を至急解決しなければならないことです。 (1)データを入力していくと市町村の絞込みができない(表示されないとか前のデータが表示される) (2)テーブルにはデータが入力されているが、フォーム上では空欄になってしまう。 (1)は行先フォーム上では解決できております。 (2)については私の腕ではなすすべもなく途方に暮れている状態です。 どなたか、助けて下さい。よろしくお願いします。

  • 【Access】住所を分割して抽出したい

    Accessで住所から都道府県と市区町村を抽出 はじめまして、Access初心者です。 右も左もわかっていないので 質問がおかしかったら申し訳ございません。 Accessのクエリを使って 住所録テーブルのデータにある住所から 都道府県、市区町村、それ以降 で分けて表示したいと思っています。 元のデータは、都道府県名が入っていないものや、都道府県名から始まっていない物、そもそも入力されていないものもあります。 都道府県一覧のテーブル(テーブル名: T_都道府県)と 市区町村一覧のテーブル(テーブル名: T_市区町村) は準備しました。 色々調べたのですが、Access不慣れな為 正しい式が書けておりません。 現在はサブクエリに 都道府県:(select[都道府県名] from T_都道府県 where [住所] like [都道府県名]&"*") 市区町村:(select[市区町村名] from T_市区町村 where [住所] like "*"& [市区町村名]&"*") それ以降:Replace (Nz([住所]," "),Nz([都道府県]," "),Nz([市区町村]," ")," ") と入力して実行したら このサブクエリでは1つのレコードしか返せません。 のエラーが出てしまいました。 (ですよね、、、) 都道府県と市区町村のテーブルを利用して どう直せば、うまく表示ができるのか わかる方教えていただけると幸いです。 どうか、よろしくお願いいたします。

  • Accessのフォームについて教えて下さい

    Access 2010のフォームについてお教え下さい。 テーブルにはテーブル名T1、フィールド「ID」、「Price」というテキストボックス。2フィールドがあります。 テーブルの各データは、 ID,Price 001,100 002,200 003,300 フォームにはにフォーム名F1、「cmb」というコンボボックスと、「price」というテキストボックスが配置されています。 「cmb」のデータは値集合ソースで、「SELECT T1.ID FROM T1;」と指定しています。 「cmb」で選択したデータのプライスを「Price」テキストボックスに表示したいと思います。 例えば、「001」を選択したら、「100」と表示されるようにしたいと思います。 色々調べているのですが、どうやってやるのかわかりません。どのように実現したらよろしいでしょうか? よろしくお願いいたします。

  • Access フォーム コンボボックス

    フォーム上のコンボボックスの選択したデータをテーブルに保存するにはどのようにすれば宜しいのでしょうか? 実際のものは、社員が複数人表示されていまして、その社員一人一人が1日ごとの出勤が可能か不可能かをコンボボックスから選択しテーブルに書き込みたいのですが、その社員一覧のテキストボックスと出勤可・不のコンボ(コントロールソースにてテーブルの各日付ごとに設定)をフォームに作ったところ、社員一覧と社員に対するコンボがずらっと表示さるのですが、コンボを選択しようとしますと下部に「このコントロールは式○○に連結しているため編集できません。」と表示されます。 長文になり、尚且つかなり分かりづらい説明で申し訳ございませんが宜しくお願い致します。

  • Accsee2003 フォームのコンボボックスの同期について

    Access2003のフォームのコンボボックスで困っています。 フォームのコンボボックスで都道府県を選んだ次のコンボには該当都道府県の市町村を表示させたいのですが、うまくできません。 都道府県テーブルには都道府県のみ、市町村テーブルには市町村のみが入っていまして、都道府県IDでリレーションシップしてあります。 同じような質問がありまして何度かやってみましたが、エラーが出て実現できませんでした。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=233843 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1969695 ご教授いただければ幸いです。よろしくお願いいたします。

  • Access フォームからの検索について

    サイトを見ても自分の合致するものが見つからなかったので、 ご教授いただけると助かります。 A,B,Cという3つのテーブルがあります。 A.エリア ---------------------- エリアコード|エリア名 ---------------------- 1|関東 2|関西 ---------------------- B.都道府県 -------------------------- 都道府県コード|都道府県名 -------------------------- 1|東京 2|大阪 -------------------------- C.商品情報 ------------------------------------------------- 商品ID|商品名|開始日付|終了日付|エリアコード|都道府県コード ------------------------------------------------- 1|みかん|20111201|20111231|1|1| 2|りんご|20111201|20111231|1|1| 3|ぶどう|20111201|20111231|2|2| ------------------------------------------------- 検索フォームにはテキストでエリア名、都道府県名、商品名をそれぞれ入力でき、 その条件に合致したデータの商品IDと商品名だけを引っ張ってこれるようなものを作りたいと思っているのですが、 まずどのようにしたらいいのかも不明です・・・・。 フォームだけは作成したのですが、それからどのように紐付すればいいのか ご教授いただけると助かります。 よろしくお願い致します。

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

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

専門家に質問してみよう