• ベストアンサー

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)を組み合わせたときに自動的にその比率が探し出されて表示、みたいなのが理想なんですけど・・・やっぱりそうなるとマクロ組まなきゃダメなんでしょうか・・・?