• 締切済み

Accessでの数字のデータ型

お世話になります。Access初心者です。 Access2003 OS:WindowsXP 既存のオーダー入力DBに変更を加えているのですが、行き詰まってしまい質問させていただきました。 現在USDからYENへのレートが変わる度に価格表を差し替えていますが、 レートの部分を別のテーブルで期間指定して管理できないかと考えています。 構成:(関連する部分のみ) [テーブル] tbl_注文(注文番号*,日付)*は主キー tbl_注文Sub(注文番号,ID,数量,変更後価格USD,変更後価格JPY)※注文番号でtbl_注文とリレーションシップを組んでいる tbl_価格表(ID,型番,USD,JPY,RateID) tbl_Rate(RateID,Rate,開始日,終了日)※今回新たに作成 [クエリ] qry_注文Sub 現在の構成: tbl_注文⇒tbl_注文Sub-tbl価格表 ※tbl_注文Subとtbl_価格表はIDで連結させている 表示項目: 注文番号,ID,数量,USD,JPY,USDSubTotal:IIf([Currency]=2,IIf([変更後価格USD]>0,[変更後価格USD]*[Qty],[USD]*[Qty]),0),JPYSubTotal:IIf([Currency]=1,IIf([変更後価格JPY]>0,CCur([変更後価格JPY]*[Qty]),IIf(IsNumeric(Format$([JPY],"数値")),CCur([JPY]*[Qty]),CCur(0))),CCur(0)) 考えている変更: qry_Rate Rateを入力(日付のコントロールはとりあえず後回しに) qry qry_注文Sub tbl_注文⇒tbl_注文Sub-tbl価格表-tbl_Rate 表示項目: 注文番号,ID,数量,USD,JPY:IIf(IsNumeric(Format$([USD],"数値")),[USD]*[Rate],0),USDSubTotal:IIf([Currency]=2,IIf([変更後価格USD]>0,[変更後価格USD]*[Qty],[USD]*[Qty]),0),JPYSubTotal:IIf([Currency]=1,IIf([変更後価格JPY]>0,CCur([変更後価格JPY]*[Qty]),IIf(IsNumeric(Format$([JPY],"数値")),CCur([JPY]*[Qty]),CCur(0))),CCur(0)) ※USDはNAの場合もあり、フォーマットはテキストです。 ※Rateは数値型です。 上記の変更で、qry上では正しく計算が出ますが、formになると表示されません。 Subフォームで型番を選択して数量を入力すると価格*数量が表示される設定ですが、そもそもSubフォームに何も表示されないようになってしまいます。 仮に[Rate]ではなく、[USD]*120とすると、フォームも問題なく動きます。 何かデータ型の問題ではないかと推測しているのですが、 CCurをつけてみるなど、いろいろ試してもうまくいきません。 どなたかアドバイスをいただけるとありがたいです。 どうぞよろしくお願い致します。

みんなの回答

noname#140971
noname#140971
回答No.1

一言で言えば、ステップバイステップ。 先ずは、 JPY:IIf(IsNumeric(Format$([USD],"数値")),[USD]*[Rate],0) の式から。 [イミディエイト] ?Format$(11,"数値") 数値 ? IsNumeric(Format$(11,"数値")) False 式は、イミディエイトウインドウで確認したがいいです。 そうすれば、式の無意味さが確認できます。 <tab1> ID__USD___RATE_______数量 1____113____\120.11_____10 2____119____\120.22_____10 3____null____\120.33_____10 <クエリ1> JPY 13572.43 14306.18 0.00 こういう結果を得たいのだと推察します。 SELECT Format(CCur(Nz([USD]))*[Rate],"0.00") AS JPY FROM tab1; ここで使用している Format は無駄の無駄。 SELECT CCur(Nz([USD]))*[Rate] AS JPY FROM tab1; まさか、列[USD] に 'ABC' と入力することはないでしょう。 SELECT IIf(IsNumeric([USD]),CCur([USD])*[Rate],0) AS JPY FROM tab1; ならば、このようにクエリを複雑化する必要はないのでは? 重たいクエリは、環境によっては、その動作は保障されていませんよ。

Karin2006Karin
質問者

お礼

Husky2007さん、 早々にアドバイスいただきありがとうございます。 お教えいただいたように変更してみましたが結果は同じでした。 やはり[Rate]にするとformが正しく表示されません。qryのビューでは問題なく計算されています。 イミディエイトというものがあるのですね。初めて知りました。。 出したい結果はご察しのとおりです。ただ、月々レートが変わるので、 <tbl_Rate> RateFlag_ID_Rate_BeginDate_EndDate R_1_120.22_2007/9/1_2007/9/30 R_2_120.33_2007/10/1_null このように管理したいです。 もし同じレートが2ヶ月続いた場合には期間が2ヶ月になります。 過去のレートを保持したい理由は、過去のオーダーを検索した場合でも注文日でそのときのレートで換算された価格が出るようにするためです。 frm_注文Subで読み込んでいるqry_注文Subは以下のとおりです。 SELECT tbl注文Sub.注文番号, tbl注文Sub. ID, tblPrice.Description, tblPrice.[USD], tblPrice.型番, tbl注文Sub.Qty, tbl注文Sub.変更後価格, tbl注文.Currency, tbl注文Sub.AdjustPriceUSD, IIf([Currency]=2,IIf([変更後価格USD]>0,[ 変更後価格USD]*[Qty],[USD]*[Qty]),0) AS SubTotalUSD, IIf([Currency]=1,IIf([変更後価格JPY]>0,[ 変更後価格JPY]*[Qty],[JPY]*[Qty]),0) AS SubTotalJPY, tbl注文, CompanyID, IIf(IsNumeric(Format$([USD],"General Number")),CCur(Nz([USD]))*120,0) AS JPYFROM (tblCustomer INNER JOIN tbl注文 ON tblCustomer.CompanyID = tblPOLog.CompanyID) INNER JOIN (tblPrice INNER JOIN tbl注文Sub ON tblPrice.ID = tbl注文Sub. ID) ON tbl注文. 注文番号= tbl注文Sub.注文番号 ORDER BY tbl注文Sub. 注文番号, tbl注文Sub. ID; ※実際は価格が文字列だった場合の処理なども書かれていますがここでは割愛しています。 上記だとfrm_注文Subはちゃんと表示されますが、 IIf(IsNumeric(Format$([USD],"General Number")),CCur(Nz([USD]))*[Rate],0) AS JPY とすると表示されません。 SubフォームのIDのコンボボックスが出てこないのです。

Karin2006Karin
質問者

補足

すみません。入力が足りなかったのでこちらに続きを書かせていただきます。 「お礼」の続きとして読んでください。 なお、frm_注文Subでは下記のようにしてIDで他の情報をひっぱっています。 SELECT tblPrice.ID, tblPrice.型番, tblPrice.BginDate, tblPrice.[Expiration date] FROM tblPrice WHERE (((tblPrice.BginDate)<=Forms!frm注文!注文日) And ((tblPrice.[Expiration date]) Is Null)) Or (((tblPrice.BginDate)<=Forms!frm注文!注文日) And ((tblPrice.[Expiration date])>=Forms!frm注文!注文日)) ORDER BY tblPrice.型番; また、Formatですが、最初にこのDBを作成された方がそのように記述しており、現状そのまま使い続けているので変更していません。 不要なものは削除していきたいので、 もう少しAccessに詳しくなってきたらその辺の簡素化も図りたいと思っています。ご指摘ありがとうございます。 ちなみに価格表にはnullではなく"NA"とう文字存在します。 なぜ*120は問題なくて*[Rate]だとだめなのでしょうか。。 これらの説明で何かわかることがあればご教授いただければありがたいです。 どうぞよろしくお願いいたします。

関連するQ&A

  • 指値のできない範囲

    USD/JPYで買い注文のとき、現在の取引レートが116.50-54だとすると、指値ができない範囲はどうなるでしょうか。50-53は、入らないでしょうか。 会社によって違う場合もあるでしょうが、外為どっとコムとFXCMジャパンを知りたいです。 レートは仮定ですので、会社によってスプレッドが違うのは知っています。

  • VBA Functionについて

    アクセスです。 サンプルコードを見ていてよくわからないので教えてください。 サンプルコードはこちらです↓ ------------------------------------------- Public Function kakaku(cost As Currency, rate As Double) As Currency kakaku = cost / (1 + rate) End Function Sub M0108() Dim Zeikomi As Currency Dim Zeiritu As Double Zeikomi = InputBox("内税の価格を入力してください。") Zeiritu = InputBox("税率を入力してください。") MsgBox (kakaku(Zeikomi, Zeiritu) & "円") End Sub ------------------------------------------- M0108を実行してみたら納得いく結果になったので問題ないのですが kakaku関数についてよくわかりません。 cost / (1 + rate) とはどういう意味なのでしょうか? costもrateも値が代入されていませんが、 この二つの変数は何の意味があるのでしょうか? ご教授よろしくお願いします。

  • 為替変動による価格付け業務の悩みについて

    会社で悩ましいことに直面しています。うまく説明できないかもしれませんが、誰かに助けてほしい。 実は会社で 価格付けの仕事をしております。商品は多数があり、四半期ごとに同業と競争するために、必ず値下を行っています。問題は、レートの変換基準にあります。基準通貨はUSドルで日本円に変換してお客さんに出していますから、そこは問題。 実際の例を見てみると: (商品A)         USドル                     JPY 11Q4     0.0005USD   (現レート:77円/USD)      0.0375 → 今後、円安になって85円/USDとしよう。        0.00045USD                     0.03825 以上のように、今後円高から円安に大きく変われば、たとえこの商品のUSドル価格を下げても、円に変換したらかえって高くなります。 当然、1商品でしたら、すぐに対応できますが、何万になれば、その事態になんとかうまい基準を作っていけたらと思っています。 何かいい方法があるかな!? 

  • FXにおける注文数量の決め方

    ご質問いたします。 FXにおいて常に1pips5000円の損益になるような注文数量の決め方をしたいのですが、どのような計算をしたら良いのでしょうか。計算式を教えてください。 たとえば、GBP/USDにおいて売45lotの場合、約定価格1.56511ドル, 決済値1.56303だとpip損益は20.8となり、円では72990円の利益になります。 これでは72990/20.8=約3509円となり、1pips5000円にはなりません。 はじめから1pips5000円の損益になるように注文数量を決めて、新規の注文をだしたいのですが、どのように計算をしたらよいのでしょうか?教えてください。 よろしくお願いいたします。

  • 指値と約定価格との乖離についての質問です。

    指値と約定価格との乖離についての質問です。 「岡三オンラインくりっく365」を利用しているのですが、例えば、USD/JPYを85円で 指値売り注文したとします。相場が急騰し、85.2円とかで約定することがあります。 これは岡三オンラインだけなのでしょうか? 他の会社にも口座を作ろうかと考えているのですが、岡三オンライン以外にも ご存知の方がいらっしゃいましたら、教えていただけると幸いです。 よろしくお願いします。

  • FX 売りから入るってどういう意味?

    FX練習中のOLです。 デモトレード5日目、毎日ちょっとずつ利益が出てきました☆ でも、納得いかないことがあります。 それは、なんでFXは売りからスタートできるの?・・・ってこと。 だって円しか持ってないのにドルを売るところからスタートするのっておかしくないですか?? 現在のレートが1ドル=100円とします。 昨夜、USD/JPY、99円でリミット買い、101円でリミット売り、期間は1日だけでセットして眠りました。 zzzzzz・・・ さーてレートはどうなったかな? 翌朝、そう思ってパソコンを開くと、あららら? いつの間にか1ドル=100円だったレートは1ドル102円に! もちろんリミット売りは101円で注文出してるから成立。 残念なことに99円リミット買いの注文は素通りされちゃった・・・。(どうやら一度も99円にはならなかったみたい) レートが102円でそのまま決済☆ 結局、101円でドルを売っただけで終わった・・・って、よく考えたらちょっとおかしくないですか? ドルを買った覚えは無いのに、売り注文だけが成立して決済・・・?これってどういう意味なんでしょう? この場合、損してますか? へぇ~、FXは売りからでも入れるんだ。 本を読んでる時はなんとなく理解してましたけど、いざ数字が変わったのを見ると何のこっちゃ??(笑)

  • FXA 注文約定

    FXAでスキャルピングをしているのですが、 今週の月曜20日の日本時間27時くらいから、 それまでは、注文を出してから一瞬で約定していたのですが、 その時間帯からは、 注文を出してから約定するまでに5~8秒くらいの時間が かかるようになってしまいました。もしくは新レートが変わって拒否 になるか。 通貨はUSD/JPYで50万通貨でやっています。 最初は時間帯が原因かなと思ったのですが、 その次の日のNY時間のピーク時日本時間22時にやっても相変わらずでした。 それから通貨数が問題かとおもって、1万通貨にしたのですが、それでも約定までに時間がかかってしまいます。 FXAでやられている方、約定はいつもどおり一瞬ですか? 原因がわかりません。 どなたか詳しい方、よろしくおねがいします。

  • マウスコンピュータの無料クーポンで

    マウスコンピュータのvistaへの無料クーポンで https://upgradeweb.moduslink.com/Vista/ConsumerWebsite/(S(j0qgt42cln5mgz55h0v55p55))/OrderEntry.aspx (上のアドレスはアップグレード申し込みのところなのですが 値段のところが 注文数量 アップグレード版製品名 言語 単価(円) 価格(送料、消費税込み)(円) 1 2 3 4 5 * Windows Vista Home Premium 32-bit DVD 日本語 JPY 3150.00 JPY 3150円のところが↑のようになっています このJPYというのが入っていると3150円は上のようにかくのでしょうか?

  • FX取引で上限lot数(枚数)が多いFX業者を教え下さい。

    FX取引で上限lot数(枚数)が多いFX業者を教え下さい。 現在当方が利用している外為オンラインさんだと、一回の注文の上限lot数は500lotです。 ちなみに1万通貨単位を1Lotとし、USD/JPYの場合です。 いくつか業者を調べても大体上限300~600lotまでです。 複利で取引していくと決め、口座資金が4~500万円あった場合、USD/JPYで500lot注文すれば, 今のレートでレバレッジが100倍くらいになると思いますが、口座資金がそれ以上増えていった場合に500lotが上限だと、レバレッジが少なくなっていき、FXの醍醐味が失われていく気がします。 当方、まだ口座資金もそんなにあるわけでもなく、500lotも使う機会はないかもしれませんが、FXで一攫千金の夢を馳せるときに、上限500lotだと少し寂しい気もするのです。 FXで何億も稼ぐ人がいるとよく聞きますが、そういった方々も限界500lotで稼いでいったのでしょうか? (為替で安定して長期間勝ち続けるのは至難の業だと思えます。)もしくはFX上級者の方用の一つランクが上で上限lot数も何千というFX業者というものがあるのでしょうか? どうぞ宜しくお願いいたします。

  • 許容損失額を元にロット計算する方法について

    ドルストレート・クロス円の通貨ペア以外の通貨ペアでの、 許容損失額を元にロット計算する方法を教えてください。 現在までの試した計算条件、計算式、確認方法は以下の通りです。 [計算条件] ・許容損失額: 100,000[JPY] ・通貨ペア: [EURGBP] ・現在のレート: 0.86357[EURGBP], 108.194[USDJPY], 1.39346[GBPUSD] ・損切り値幅: 50.0[pips] ・通貨ペアの1pips辺りの最小変動値幅: 0.0001[EURGBP] ・1ロット辺りの取引数量: 100,000[通貨単位] [計算手順] 1) 許容損失額の通貨をJPYからUSDへ変換 100,000[JPY] / 108.194[USDJPY] = 924.266[USD] 2) 許容損失額の通貨をUSDからGBPへ変換 924.266[USD] / 1.39346[GBPUSD] = 663.28850[GBP] 3) 許容損失額の通貨をGBPからEURへ変換 663.28850[GBP] / 0.86357[EURGBP] = 768.07728[EUR] 4) ロット数の計算 計算式: 許容損失額 / (損切り値幅 * 通貨ペアの1pips辺りの最小変動値幅) / 1ロット辺りの取引数量 768.07728[EUR] / (50.0[pips] * 0.0001[EURGBP]) / 100,000[通貨単位] = 1.53615456[ロット] -------- [計算したロット数から実際の許容損失額を確認する] XMの[損益計算機]の[損切り/利益確定レベル]を使用して、 実際の許容損失額を確認できます。 https://www.xmtrading.com/jp/forex-calculators/profit-loss#levels [入力内容] 口座の基本通貨: JPY 通貨ペア: EURGBP 口座タイプ: スタンダード (1 lot=100,000) ロット数量: 1.54(少数第2に切り上げ) 損切り設定値: 500[pointなのでpips*10を指定] 利益確定設定値 : 500[pointなのでpips*10を指定] [計算結果] 損失: 116,059.02 利益: 116,059.02 (計算タイミングの通貨の価格により結果が微妙にずれます) -------- ドルストレート・クロス円の通貨ペアでの計算だとほぼ誤差はないのですが、 それ以外の通貨ペアだと実際の許容損失額が1割程度も誤差が生じてしまいます。 ドルストレート・クロス円の通貨ペア以外の通貨ペアでの、 許容損失額を元にロット計算する方法を教えてください。 宜しくお願いいたします。