• ベストアンサー

アクセスに移行したいのですが

はじめまして エクセルで納品書発行プログラムを自作しています。 入力は日付、時間、販売先、商品名、数量、配送先、等 単価表シートと組み合わせ金額を表示していますが 月次繰越処理をしないとエクセルでは重たくなり (1日60件位の入力で年間20,000件程度) アクセスで年度処理だけで済まそうと思いアクセスを 勉強中です。 参考書には1物1価の価格表でのクエリーは見当たるのですが、 当方では販売先ごとに商品単価が違います エクセルだとindex関数等で解決しているのですが アクセスではどの様に考えればよいのでしょうか? (関数でもあればお教え下さい) 質問が漠然としていて伝わりにくいかも知れませんが 考え方だけでもお願いします。

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

  • ベストアンサー
  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.2

>入力マスタ(日付、時間、販売先コード、販売先、商品コード、商品名、数量、配送先) 正しく正規化するならば 入力マスタ(日付、時間、販売先コード、商品コード、数量、配送先) です。(販売先名、商品名は不要) >(1) 商品マスタ(商品コード)→入力マスタ(商品コード) >(2) 販売先マスタ(販売先コード)→入力マスタ(販売コード) >(3) 販売単価マスタ(商品コード)→入力マスタ(商品コード) >(4) 販売単価マスタ(販売先コード)→入力マスタ(販売コード)で良いでしょうか? (2)(4)は重複してますので、片方だけで良いです。 また矢印は便宜上右向きに表記されたのだと思いますが、基本的に等結合だと思うので問題ないです。 >フィールド:販売先、  商品名、  数量、   販売単価、   明細金額 >テーブル :入力マスタ、入力マスタ、入力マスタ、販売単価マスタ フィールド:販売先、  商品名、  数量、   販売単価、   明細金額 テーブル :販売先マスタ、商品マスタ、入力マスタ、販売単価マスタ 上記の正規化を意識して、が正解でしょう。

acenoh
質問者

補足

ご説明ありがとうございます アクセスでの作成中で補足説明の応答が遅くなりまして失礼いたしました ご回答の通り組んでみましたが、うまく目的のデータが抽出されません ただ、テーブルはエクセルデータをインポートしたものですが、なにか不都合がありますでしょうか?(自動的にIDフィールドが作られ主キーが設定されてます) 明細金額の式ビルダは下記で良いのですよね?   明細金額: [入力マスタ]![数量]*[販売単価マスタ]![単価] よろしくお願いいたします。

その他の回答 (4)

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.5

>ところで、クエリーの所での結合とリレーションシップとはどんな違いがあるのですか、今回の場合リレーションシップを解除しても変化ありませんでしたが? SQLの基礎的なもので「等結合」と「外部結合」の違いです。 下記のURLが参考になると思います。

参考URL:
http://orakumiko.hp.infoseek.co.jp/yougo/q_louter.html
acenoh
質問者

お礼

PCFREAKさんありがとうございます。 紹介いただいたHPは大変参考になりました。 エクセルのHPは沢山見つかりますが、アクセスについては余り見つかりませんでしたから 今後、アクセスについて勉強していきたいと思いますのでよろしくおねがいします。

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.4

>ご回答の通り組んでみましたが、うまく目的のデータが抽出されません どのようにおかしいのでしょうか? 具体的に分かれば回答が付けやすいのですが。 >ただ、テーブルはエクセルデータをインポートしたものですが、なにか不都合がありますでしょうか?(自動的にIDフィールドが作られ主キーが設定されてます) 入力マスタについてはキーがありませんので、自動的に作られた主キーで問題ありません。 しかし、商品マスタ、販売先マスタ、販売単価マスタについては自動で作られた主キーではダメです。 商品マスタは商品コード、販売先マスタは販売先コード、販売単価マスタは商品コード、販売先コードの2つが主キーとなります。 恐らくこのキー付けがおかしくて正しいデータ抽出が出来てないのでしょう。 >明細金額の式ビルダは下記で良いのですよね? >明細金額: [入力マスタ]![数量]*[販売単価マスタ]![単価] これは問題ありません。

acenoh
質問者

補足

ご回答ありがとうございます 明細クエリーの結合が間違っていたようです。 わからぬままに以下のようにしましたら目的データが得られました (1)販売単価マスタ(販売先コード)→販売先マスタ(販売先コード) (2)販売単価マスタ(商品先コード)→商品マスタ(商品先コード) (3)商品マスタ(商品先コード)→入力マスタ(商品先コード) (4)販売先マスタ(販売先コード)→入力マスタ(販売先コード) ところで、クエリーの所での結合とリレーションシップとはどんな違いがあるのですか、今回の場合リレーションシップを解除しても変化ありませんでしたが? 初歩的な質問ですみません

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

エクセルではVBAを除くと、関数で処理をせざるを得ない場合(それしかない)が多い。 しかしMSアクセスでは、関数は主役たりえず、変わってSQLが陰に陽に出番を 持つようになります。 SQLのSELECT文でWHEREの条件が販売先と商品名(それぞれコードで扱う場合が多いと思いますが)で価格表を検索すれば済むことです。3段の検索 たとえば販売先+商品+他の状態(購入数量や信用状態や購入実績や配送距離コードなど?) に増えても、同じ延長線で処理できます。 ここがアクセスを使う(エクセルから切り替える)大きな動機でしょう。 プロが組むアクセスVBAやSQLサーバー関係のコードなどを見ると、SQL文の長さ(条件の数やJoinなどで増える)は驚くほど長いものを見かけます。しかし正しく作成すれば1発で結果が出るのは、やはり驚きです。

acenoh
質問者

補足

ありがとう御座います 表題にありますようにアクセスに移行中で クエリーを手動で操作する程度で満足しているアクセス初心者です。 早くSQLを駆使しアプリケーションを自動実行させるまでになりたいと思っておりますので、宜しくご指導下さい。

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.1

マスタを3つに分ける必要があります。 商品マスタ(商品コード、商品名) 販売先マスタ(販売先コード、販売先名) 販売単価マスタ(商品コード、販売先コード、販売単価) その上で販売単価マスタを参照するクエリで販売単価を取得すれば良いでしょう。

acenoh
質問者

補足

早速ありがとうございます 入力する日付、時間、販売先、商品名、数量、配送先、等を入力マスタテーブルとしますと お教えいただいた、下記マスタのリレーションは 入力マスタ(日付、時間、販売先コード、販売先、商品コード、商品名、数量、配送先)、 商品マスタ(商品コード、商品名) 販売先マスタ(販売先コード、販売先名) 販売単価マスタ(商品コード、販売先コード、販売単価) (1) 商品マスタ(商品コード)→入力マスタ(商品コード) (2) 販売先マスタ(販売先コード)→入力マスタ(販売コード) (3) 販売単価マスタ(商品コード)→入力マスタ(商品コード) (4) 販売単価マスタ(販売先コード)→入力マスタ(販売コード)で良いでしょうか? また、選択クエリでは 明細クエリとして フィールド:販売先、  商品名、  数量、   販売単価、   明細金額 テーブル :入力マスタ、入力マスタ、入力マスタ、販売単価マスタ 明細金額の式ビルダでは 明細金額 販売単価マスター!販売単価*入力マスタ!数量 であっていますか? うまく動作しましたら補足投稿いたします。

関連するQ&A