• 締切済み

抽出結果を条件に、抽出

アクセス超初心者です。 商品コードを基に、いろいろ情報を検索し、閲覧できるフォームを作りたいと思っています。 (↓説明が長いですが、お願いします↓) エクセルで 【カテゴリシート】商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 というシート(4500件くらい)(商品コード重複あり)と、 【ランキング2007シート】人気ランキング順位/商品コード/商品名/ポイント/調査日 というシート(4000件くらい)(商品コード重複なし)があります。 ※カテゴリ1 ・・・(大分類カテゴリ)/カテゴリ2 ・・・(大分類の中の詳細分類) ※カテゴリ1は1つの商品に1種ではなく、複数の場合があります。 必然的にその分カテゴリ2も複数になります。 例:キャラクターペン カテゴリ1=玩具―カテゴリ2対象小学生以上             =文具―カテゴリ2筆記用具             =文具―カテゴリ2消耗品 ※ランキングは廃盤の商品コードもあり、そこ商品に関しては順位とポイントが空欄です。 ここから、ある商品はどのカテゴリに属しているか、また同カテゴリに含まれる商品のみでの人気ランキングを出すように、と仕事で依頼されます。 いつもは、カテゴリシートでオートフィルタをかけ、必要商品コードを抽出し、作業シートを使ってランキングシートから関数で各コードのランキング/ポイントを拾い出し、昇順で並び替えては提出していました。 しかし、このデータは増える予定が無く、ランキングも年に1回更新されるだけなので、みんなが簡単に検索できるようにしたいと思います。 出来ていること フォームでコードを入力すると、その商品名が表示され、カテゴリ1がリストボックスに表示され、そのリストのいずれかをクリックすると、もうひとつのリストボックスにカテゴリ2が表示され、そのいずれかをクリックすると詳細に必要情報が表示される。 したいこと ランキング作成。 リストボックス、カテゴリ2をクリックすると詳細へ表示される、複数のコード。これを検索条件にしてランキングを抽出。 T_商品名 ID(主キー) 商品コード 商品名 生産工場 テーブル2ID※T_テーブル2のNo.とリレーション T_カテゴリ カテゴリ1 ・・・(大分類カテゴリ) カテゴリ2 ・・・(大分類の中の詳細分類) ID(主キー)※T_テーブル1のテーブル2IDとリレーション T_ランキング2007 ランキング順位 商品コード 商品名 ポイント ID(主キー)(リレーション無し) F_総合検索  ヘッダー部分   (1)コード入力欄(テキストボックス非連結)   (2)商品名(テキストボックス非連結)   (3)カテゴリ1(リストボックス)   (4)カテゴリ2(リストボックス)   (5)ボタン  詳細部分    商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 しくみ  I(1)にコードを入力する   →II(2)に商品名が表示/(同時に)(3)カテゴリ1が表示   →III(3)のどれかクリックすると、そこに属する(4)が表示   →IV(4)のクリックされたカテゴリを条件に詳細が表示    ※(5)ボタンは詳細の表示と同じものを別途クエリを作成し、開くようにしています。(今はまだランキングが出来ていないので、クエリをコピーしエクセルでランキングを作っています。) ランキングは毎年あるので過去のもものもあります。 出来ればボタンで『2007』『2006』・・・と作って、クリックすると、現在フォームヘッダーで指定されている条件を基に、クリックされたボタンの年度内でのランキングを作成したいです。 結果は順位の昇順になるようにしたいです。 また、詳細への表示を今はカテゴリ内のコード他が表示されていますが、それをラジオボタン等のチェックでランキングに切り替えたり、出来るでしょうか? VBA、マクロ、SQLは全くわかりません。 そんな私でもどうにかできないものでしょうか。。 お願いします。

みんなの回答

noname#140971
noname#140971
回答No.5

あちゃー、私の完全な誤解でした。 よって、今までの回答は全てキャンセルします。 ぜーんぶ、私の見当違いである早とちりでした。 つまりは、生のデータが一つあるということでしょう。 商品の何らかの履歴・・・商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 ランキングシートというのは、履歴データの集計評価シートなんですね。 ランキングシートというのは、履歴データを元にした作表結果なんですね。 Access を使用するのは、エクセルで第三の参照シートを作りたくないため。 その手間隙を省くために、Accessのリンク機能を利用してフォームで参照しようと企図。 なーる程、そういう使い方もあるんですね。 ならば、当初の質問通りの設計で考え直さねばなりませんね。 どうしますかね、一度、この質問は締め切られて改めてが良い気がします。 ともかく、全回答をキャンセルしり旨をお知らせします

yellow-
質問者

お礼

質問が下手で本当にすいません。 いろいろと考えてくださったのに、、、 今回は時間を割いていただいたので、ポイントつけさせてもらいます。

noname#140971
noname#140971
回答No.4

よく判らないのですが・・・。 [商品マスター]があって、個々の商品に対応する[ポイント]データが複数あるということ。 でなきゃー、主テーブルと従テーブルとに分割する意味はないですよね。 T_商品名 ID(主キー) 商品コード 商品名 生産工場 テーブル2ID※T_テーブル2のNo.とリレーション T_ランキング2007 ランキング順位 商品コード 商品名 ポイント ID(主キー)(リレーション無し) これは、[商品コード]で連結していますが、普通は主キーで連結します。 [商品コード][商品名]の重複登録は禁止ですから、それらの列は追放。 そうすると、下記のテーブル構造が出現。 先ず、ここが正しいかどうか? T_商品名: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID(主キー)____長整数 カテゴリ1______整数 カテゴリ2______整数 商品コード______テキスト16文字 商品名__________テキスト36文字 生産工場________整数 T_ランキング: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID(主キー)____長整数 T_商品名_ID_____長整数 年度____________整数 ランキング順位__整数 ポイント________整数 正しいなら、次のフォームはAccess が自動生成します。 ---------------------------- ID_________[____1] カテゴリ1__[ 大分類1] カテゴリ2__[ 中分類1] 商品コード_[A1_________] 商品名_____[AAA____________________] 生産工場___[________工場1] ---------------------------- ランキング_ポイント ---------------------------- [________1][_____90] [________3][_____70] [________3][_____70] ---------------------------- 「エクセル先にありき!」が問題なのか? 私がテーブル設計で誤解をしているのか? 前者ならば、テーブル設計を優先しデータのロードは後回しが宜しいと思います。 それは、CSV化してロードすれば比較的容易(?)に出来ると思います。

yellow-
質問者

お礼

ありがとうございます。 >よく判らないのですが・・・。 申し訳ないです。。。 >[商品マスター]があって、個々の商品に対応する[ポイント]データが複数あるということ。 『質問文より・・・ 【カテゴリシート】商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 というシート(4500件くらい)(商品コード重複あり)と、 【ランキング2007シート】人気ランキング順位/商品コード/商品名/ポイント/調査日 というシート(4000件くらい)(商品コード重複なし)があります。』 と、T_商品名の方が商品コードが重複しており、T_ランキングは商品コードが重複していない状態です。 出来れば商品コードで連結したいと思うのですが、厳しいでしょうか。 >「エクセル先にありき!」が問題なのか? 出来ればそこに問題が無いことを祈りたいです…  >>エクセルで「商品コード/商品名/生産工場/カテゴリ1/カテゴリ2/ランキング/ポイント」というシートを作成しました。  >>それをアクセスの外部からインポートで、テーブルを作成しました。 これが、まず、問題でしょうか? テーブルの枠を作ってから、底にCSVにしたデータを入れ込む?ということでしょうか? インポート以外でアクセスでテーブルをいちから作ったことがありません。 >私がテーブル設計で誤解をしているのか? いえ、私が、誤解しているんだと思います。 すいません。うまく伝えられず。。。

noname#140971
noname#140971
回答No.3

補足:少し訂正。 テーブルだけでウィザードしても同じようなフォームは出来ます。 だが、[ランキング]を求める式を組み込んだクエリを用意すると先の回答のフォームが。 [年度]もメインに表示してが良いかも知れなかったですね。 以上、不正確で曖昧な表現の部分を訂正しておきます。

yellow-
質問者

補足

ありがとうございます。 下記アドバイスを元に私なりにやってみました。 が、思うようにいきません。。 やったこと(と、わからないこと) 【テーブル】 エクセルで「商品コード/商品名/生産工場/カテゴリ1/カテゴリ2/ランキング/ポイント」というシートを作成しました。 それをアクセスの外部からインポートで、テーブルを作成しました。 T_商品名(ID主キー/商品コード/商品名/ルックアップカテゴリ1ID/ルックアップカテゴリ2ID/ルックアップ生産工場ID/ルックアップランキングID) T_ランキング(ID主キー/ランキング/ポイント/年度) T_カテゴリ1 T_カテゴリ2 T_生産工場 リレーションが全てT_商品名側が∞で、もう一方(ルックアップ~ID)が1です。  *分からない点*   ■T_ランキングの方にT_商品名IDというものが出来ません。   ■>手直し1、テーブル[T_商品名]と[T_ランキング]とを連結。    >[T_商品名]![ID]<->[T_ランキング]![T_商品名_ID]    >手直し1、[カテゴリ1][カテゴリ2][生産工場]にルックアップ設定。      これはリレーションと受け取りましたが、上記の解釈で合っていますか?   ■>1、[カテゴリ1]や[生産工場]の列の型は整数なのに実際は分類名で表示されている。      ルックアップから引っ張っているという解釈で合っていますか? -------------------------- 【クエリ】 T_商品名とT_ランキングを元に、デザインウィザードで「クエリ1」を作成しました。 T_商品名_カテゴリ1/T_商品名_カテゴリ2/T_商品名_商品コード/T_商品名_商品名/T_商品名_生産工場/T_ランキング_ランキング/T_ランキング_ポイント  *分からない点*   ■>2、[クエリ1]の作り方が判らない。     上記で合っていますでしょうか? --------------------------- 【フォーム】  *分からない点*   ■>と、このようなフォームが生成されました。     クエリ1を基にフォームウィザードで作成しました。     しかし、メインとサブが「このようなフォーム」の点線区切りでいうと、上下逆転していまして、メインにランキングとポイント、サブにその他が入っております。   ■>3、クエリと参照フォームの関係が判らない。     すいません。フォームがご教示いただいた形になっていないのでそこまでいってないのですが、ご教示いただいているフォームは、最初の質問文において自分なりに作成した経過を記述していますが、このフォームで考えると、【詳細】にランキングも含めて表示しよう。という考えになるのでしょうか? ■>で、この場合、[順位]は<式>で生成しています。 レコードが追加・削除する都度に順位データを更新するのは至難でしょう。 また、このように式一つで生成できる値を列として持つ必要はないかと思います。  すいません。<式>というのがわかりません。  基本的にランキングに追加・削除はありません。  年度ごとに固定したデータになっています。  同点なら同位にして、そのレコード分次点のレコードの順位を繰り下げる。という関数がある。という考えで合っていますでしょうか? 出来が悪く申し訳ありません。 現在はイベントプロシージャ、とか、マクロとか、一応触っています。 というのも下記URLを参考に作っており、真似事をしているだけなので、理解度は低いのです。 http://www.accessclub.jp/beginer/cd/part_07.htm というか、ほぼこれと同じような形に出来上がっています。 これが質問文にある自分で作ったフォームです。 このように検索かけて表示して行きたいと思います。 (完成させたい形です。) 質問もまともに出来ずすいません。 これで、また何かご教示いただけたら大変助かります。 よろしくお願いいたします。

noname#140971
noname#140971
回答No.2

クエリ1: クエリ カテゴリ1_カテゴリ2_商品コード_商品名_生産工場_ポイント_順位 大分類1____中分類1____A1_________AAA_工場1_________90_____1 大分類2____中分類2____B1_________BBB_工場2_________80_____2 大分類1____中分類1____A1_________AAA_工場1_________70_____3 大分類1____中分類1____A1_________AAA_工場1_________70_____3 大分類2____中分類2____B1_________BBB_工場2_________60_____5 まず、回答は全てAccessでテーブルを作成しデータを入力してクエリを作成してのこと。 で、この場合、[順位]は<式>で生成しています。 レコードが追加・削除する都度に順位データを更新するのは至難でしょう。 また、このように式一つで生成できる値を列として持つ必要はないかと思います。 Q、どうにか完成できないものでしょうか? A、何を完成されたいのでしょうか? 考えようによっては、今、私のPCには所望のシステムが既に完成しているとも言えます。 ということは、説明で端折った部分が不明ということでしょうか? 1、[カテゴリ1]や[生産工場]の列の型は整数なのに実際は分類名で表示されている。 2、[クエリ1]の作り方が判らない。 3、クエリと参照フォームの関係が判らない。 今、ここまで用意したテーブルでフォームウィザードでフォームを生成します。 ---------------------------- ID_________[____1] カテゴリ1__[ 大分類1] カテゴリ2__[ 中分類1] 商品コード_[A1_________] 商品名_____[AAA____________________] 生産工場___[________工場1] ---------------------------- ランキング_ポイント ---------------------------- [________1][_____90] [________3][_____70] [________3][_____70] ---------------------------- と、このようなフォームが生成されました。 さて、このフォームのヘッダかフッタに[年度][カテゴリ1][カテゴリ2]を用意するとします。 これが、いわば<抽出条件>です。 この抽出条件をメインに反映させる術が判らないということでしょう。 この抽出条件をサブのランキングを求める式に反映する術が判らないということでしょう。 既に、私のPCでは残すところはその作業のみ。 で、10分もあれば終る作業。 が、ですよ!問題は、この手前までのテーブル設計とフォームの考え方が一致しているかどうか? で、先ずは、フォームを生成するために用意した二つのクエリで意見一致するかどうかです。 <ランキングを求める式>は、皆目判られなくても結構です。 と、ここまで! で、次は、フォームを生成する二つのクエリですね。

noname#140971
noname#140971
回答No.1

T_商品名: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID(主キー)____長整数 カテゴリ1______整数 カテゴリ2______整数 商品コード______テキスト16文字 商品名__________テキスト36文字 生産工場________整数 T_ランキング: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID(主キー)____長整数 T_商品名_ID_____長整数 年度____________整数 ランキング順位__整数 ポイント________整数 と、先ずは、テーブル設計の多少の手直しが必要。 手直し1、テーブル[T_商品名]と[T_ランキング]とを連結。 [T_商品名]![ID]<->[T_ランキング]![T_商品名_ID] ・[T_ランキング]![商品コード]と![商品名]とは不要。 手直し1、[カテゴリ1][カテゴリ2][生産工場]にルックアップ設定。 T_商品名: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID_カテゴリ1_カテゴリ2_商品コード_商品名_生産工場 1__大分類1____中分類1____A1_________AAA_工場1 2__大分類2____中分類2____B1_________BBB_工場2 T_ランキング: テーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ID_T_商品名_ID_年度_ランキング順位_ポイント 1____________1_2007______________1_______90 2____________1_2007______________3_______70 3____________2_2007______________2_______80 4____________2_2007______________4_______60 このように登録されてデータを参照してみましょう。 カテゴリ1_カテゴリ2_商品コード_商品名_生産工場_ランキング順位_ポイント 大分類1____中分類1____A1_________AAA_工場1_________________1______90 大分類2____中分類2____B1_________BBB_工場2_________________2______80 大分類1____中分類1____A1_________AAA_工場1_________________3______70 大分類2____中分類2____B1_________BBB_工場2_________________4______60 ※列[T_ランキング]![ランキング順位]は、不要ですね。 ※なくても、同じ値は生成できます。 と、先ずは、アクセスの機能を使った場合のやり方の確認が先決かと・・・。

yellow-
質問者

お礼

ありがとうございます。 まずはテーブルの設定ですか。 >※列[T_ランキング]![ランキング順位]は、不要ですね。 ランキングは同ポイントの場合は同位が付いているので重複があります。説明不足ですいません。 >と、先ずは、アクセスの機能を使った場合のやり方の確認が先決かと・・・。 本当にすいません。 やり方の確認が先決。ごもっともです。 しかし、そんな中で出来ないものかと思ってしまい。。 今回アクセスに手を付けたことをきっかけに、一から勉強してみたいと思ってはいるのですが、今回の質問内容に関しては、出来るだけ早く完成させたいと思っています。 追々理解出来ればと思いますが、どうにか完成できないものでしょうか。 わがまま放題すいません。。。 よろしくお願いします。

yellow-
質問者

補足

テーブル設計の手直しについて、 ランキングは商品コードに重複がありませんが、 カテゴリの方には商品コードが重複しています。 T_ランキングのT_商品名IDは1レコードに複数となると思うのですが、どのようにやったらいいのでしょうか。 元のデータはエクセルで上記にあるとおりです。 ご教示お願いします。