映画のエンドロール観る派?観ない派?

(1)ある特定の商品区分IDに属する商品だけ、(2)商品ID別に、それぞれ売上数量に応じた単価(例:100個以下、100~500個、500個以上)を設定し、(3)その商品区分ID以外の商品については、商品テーブルにある単価(売上数量に関係なくそれぞれ一定)を使用したい。
小生は、(2)についてユーザ定義関数を作成し、VBAの中で(1)の条件内で、このユーザ定義関数を適用し、(3)の条件の時は、商品テーブルを参照するよう考えましたが、具体的にどうすれば良いか、よくわかりませんので、ご教示くだされば幸いです。特にVBAの中で、テーブルのデータを参照する方法が、よくわかりませんのでよろしくご指導ください。

A 回答 (4件)

追加です



たぶん売上入力フオームで「売上数」を入力すると
思います。そのときに売上の新規レコードが作成される
という仮定で説明します

***********************************************
それともイベントプロパティでイベントプロシージャを
作成するのでしょうか?
***********************************************
イベントプロパティでイベントプロシージャを作成します
売上数を入力したときに動くプログラムですから
売上数のイベントで「更新前処理」のところでイベントプロシージャをつくります

SUBのなかで

If Me!数量>=1 and Me!数量<100 then
me!単価=Dlookup("単価A","T商品","me!商品ID=商品ID")
Endif
If Me!数量>=100 and Me!数量<500 then
me!単価=Dlookup("単価B","T商品","me!商品ID=商品ID")
Endif
If Me!数量>=500 then
me!単価=Dlookup("単価C","T商品","me!商品ID=商品ID")
Endif

金額の計算が必要なら
me!金額=me!数量 * me!単価

とします

途中での計算、記憶が必要ならそのための一時的な
項目として

DIM WK11 AS SINGLE
DIM WK21 AS STRING
DIM WK31 AS VARIANT

などとSUBの中で定義します

***********************************************

"me!商品ID=商品ID" は同一キーでT商品を読むための
命令ですが、書き方についてはペルプを見てください
項目の性格がテキストか数値かで " の必要度が異なり
ますから注意が必要です
"me!商品ID=" & "商品ID" などとしなければならないこともあり、小生もやや自信がありません。。。
    • good
    • 0

数量別単価テーブルで運用されれば良いと思います。



商品ごとの開始個数は 0個から必ず始める。
商品ごとの終了個数は 9999999個まで必ず設定する。

--数量別単価テーブル--
商品名 開始個数 終了個数  単価
商品A    0      100   1,000
商品A   101      500   500
商品A   501   9999999   100
商品B    0   9999999   100
商品C    0      500   200
商品C   501   9999999   100

上記テーブル から 単価を拾い出す方法。

但し、 売上数量 の部分は、環境により違います。
ご自分の環境に合わせて変更してください。

SQL文の場合 (SQL文の方が一括で処理するため一般的だと思います。)
select A.[単価] from xxテーブル As A where (A.[開始個数] >= 売上数量) AND (A.[開始個数] < 売上数量)

Dlookupの場合(dlookupは1レコードづつの処理なので速度に問題あるかも?)
Dlookup("[単価]","[xxテーブル]","([開始個数] >= 売上数量) AND ([開始個数] < 売上数量)"
    • good
    • 0
この回答へのお礼

ryuu001様
早速ご教示いただきまして大変ありがとうございました。
ryuu001様のご教示につきましても、やってみたいと思います。
これからもよろしくお願い申し上げます。

お礼日時:2003/03/19 21:52

DLookup関数でテーブル内のデータを参照出来ます。

抽出条件も付けられます。
しかし関数を定義しなくてもフォーム上でもできます。

商品テーブルを例えば下記のように作成し

商品区分ID 商品名 単価 単価A 単価B 単価C 特定(Yes/No型)
0001    商品A  100  90   80  70  True
0002    商品B   90  80   70  60  False
0003    商品C   80  70   60  50  True

(1)にあたる賞品は[特定]にTrueのフラグを立てる。
(2)の場合は[特定]がTrueのものだけフォーム上の[数量]が100以下なら単価A、100
から500の間であれば単価B、500以上なら単価Cをフォーム上の[単価]に取得する。
(3)の商品は[特定]がFalseのものは[単価]に単価を取得する。
こんな感じでしょうか。
フォーム上でIIf関数をネストして使ってその商品の単価を取得するか、関数を定義
して使うかは作る人によるのでご自分の好きなやり方で良いと思います。

この回答への補足

O_cyan様
早速ご教示いただきまして大変ありがとうございました。
実は、O_cyan様のご回答につきまして、補足を投稿したつもりだったのですが、小生の勘違いで、ttk11様あてに補足をだしてしまいました。ttk11様からは、すぐにご回答をいただきまして、大変勉強になりましたが、遅ればせながら、同一の補足質問をさせていただきたいと思いますので、よろしくご教示のほどお願い申し上げます。

小生、Access初心者で恐縮ですが、ご教示の趣旨は、理解できたつもりですが、具体的にどうすればよいのかよくわかりませんので、お願いします。
フォーム上で設定可能、とのことですが、
フォーム:F受注
テーブル:T商品
として、「数量」がF受注にあるとした場合、Dlookup関数をF受注フォームの「単価」に設定することになると思いますが、「単価」のどのプロパティに設定するのでしょうか?コントロールソースプロパティでしょうか?
それともイベントプロパティでイベントプロシージャを作成するのでしょうか?
また、Dlookup関数の書き方ですが、
Dlookup("単価A","T商品",""&Me!数量&"<100")
これは、数量が100個より少ない場合は、単価Aを取得する、という
意味ですが、この書き方でよろしいのでしょうか?
以上、初歩的質問で恐縮ですが、ご教示方よろしくお願い申し上げます。

補足日時:2003/03/19 21:29
    • good
    • 0

>特にVBAの中で、テーブルのデータを参照する


>方法が、よくわかりませんのでよろしくご指導
>ください。

dlookupを使用すればいと思います
各条件の設定は
if でします

if xxxx="zz" then
if xxx<100 then
zzz=dlookup(---,---,---,----)
if xxx>=100 and xxx<500 then

この回答への補足

ttkk11様
早速ご教示ありがとうございました。
小生、Access初心者で恐縮ですが、ご教示の趣旨は、理解できたつもりですが、具体的にどうすればよいのかよくわかりませんので、お願いします。
フォーム上で設定可能、とのことですが、
フォーム:F受注
テーブル:T商品
として、「数量」がF受注にあるとした場合、Dlookup関数をF受注フォームの「単価」に設定することになると思いますが、「単価」のどのプロパティに設定するのでしょうか?コントロールソースプロパティでしょうか?
それともイベントプロパティでイベントプロシージャを作成するのでしょうか?
また、Dlookup関数の書き方ですが、
Dlookup("単価A","T商品",""&Me!数量&"<100")
これは、数量が100個より少ない場合は、単価Aを取得する、という
意味ですが、この書き方でよろしいのでしょうか?
以上、初歩的質問で恐縮ですが、ご教示方よろしくお願い申し上げます。

補足日時:2003/03/19 00:07
    • good
    • 0
この回答へのお礼

ttk11様
早速ていねいなご回答ありがとうございました。
ご教示内容を参考にして、これからやってみたいと思いますので
これからもよろしくお願い申し上げます。
また、小生の不手際から、実は、小生の補足内容の前提は、O_cyan様の
ご回答を前提に書いたのですが、あて先を勘違いしてttk11様に出してしまいました。このため、ttk11様も少し、内容的に?の部分があったのではないかと思いまして、大変ご迷惑をおかけしてしまったことお詫び申し上げます。
いずれにいたしましても、今回のご教示内容は、大変勉強になりましたので、心から御礼申し上げます。このような事情から、同一内容の補足をO_cyan様にもお伺いしたいと思いますので、あしからずご了解お願い申し上げます。
本当にありがとうございました。

お礼日時:2003/03/19 21:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!