MS ACCESSフォームで通貨の計算

このQ&Aのポイント
  • MS ACCESSフォームで通貨の合計を求める方法を教えてください。
  • 通貨の単位が変更になる場合でも対応できるように、書式をテキスト型にして数値部分だけ取り出す方法を考えましたが、エラーが出ています。
  • 通常はドルの計算を行い、他の通貨を入力する必要がある場合は別のテキストボックスを使用していますが、もっとスマートな方法はありませんか?
回答を見る
  • ベストアンサー

MS ACCESSフォームで通貨の計算

ACCESSのフォームで通貨の合計を求めようと思っています。 通貨の単位が変更になることがあるので、書式をテキスト型にして(IDR1,000,000.00などと記入)、Val関数で数値部分だけ取り出そうと考えました。 金額のテキストボックス名: Declared_Value_2 合計のテキストボックス名: T_Declared_Value_2     合計のコントロールソース: =Sum(Val([Declared_Value_2])) としてみたのですが#Errorが出ます。 これではできないのでしょうか? ちなみに、通常はドルの計算を行っていて、たまに他の通貨を入力する必要があるので(上記のインドネシアルピーのような)ドルとはテキストボックスを分けることにしました。 スマートな方法ではないですが、VBAや複雑な関数の知識がないので。。。 いい方法がありましたらアドバイス頂ければ幸いです。

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

  • ベストアンサー
回答No.5

> =Format([Declared_Value],"""[Currency_Unit]""" & "#,##0.00") > > とすると(金額は$1,200.00)、 > > [Currency_Unit]1,200.00 > > といった出方になって意図した表示になりませんでしたし。。。 前にも書きましたが、式内の " で囲まれた部分は文字列となります。 """[Currency_Unit]""" とすると、「"[Currency_Unit]"」という文字列と判断されます。 つまり、書式プロパティに "[Currency_Unit]"#,##0.00 と設定したのと同じ意味になります。よって、そのような結果になります。 式で文字列と文字列を結合するときは & を使います。 ="""" & "$" & """" & "#,##0.00" とコントロールソースに設定して確認してみてください。フォームビューにすると "$"#,##0.00 と表示されます。 他にも、テキストボックスのコントロールソースに下記のように設定してみて、 それぞれのフォームビューにした時のそれぞれの表示の違いを確認してみて、 なぜそうなるのかよく考えてみてください。 ="""[Currency_Unit]""" & "#,##0.00" ="""" & "$" & """" & "#,##0.00" ="""" & [Currency_Unit] & """" & "#,##0.00" 他にもいろいろ試してみて、どうなるか確認してみるといいでしょう。 理解するまで、ちょっと戸惑うと思いますが、 分かれば、あっ、なるほど、と納得できると思います。

jjnono
質問者

お礼

初心者の私に長く付き合ってくださってありがとうございます!! とても勉強になりました。教えていただいた知識をいろいろ活用していこうと思います。

その他の回答 (4)

回答No.4

> 一つ、"""" & [Currency_Unit] & """" ←ここの部分はtrim関数と同じ意味でしょうか? 表示書式を変更したい場合、通常は書式プロパティに設定します。 今回も、単位が固定なら、書式プロパティに "USD"#,##0.00 と設定します。 Format関数は書式プロパティと同じ書式変換を関数でするものです。 例えば、 =Format([フィールド名],"#,##0.00") と設定すれば、12345 が 12,235.00 と表示されます。 ここで、第2引数に注目してください。"" で囲んでいますね。これは、Format関数の第2引数は文字列で指定するという仕様で、式の中で文字列は""で囲む、というAccessのお約束事があるからです。 書式プロパティで、固定の文字列を表示したいという時も "" で囲むというお約束事があります。 そこで、 =Format([フィールド名],""USD"#,##0.00") とすると構文が正しくないと怒られます。 式の文字列内で " を表現するときは、"" と重ねるという約束事があります。 =Format([フィールド名],"""USD""#,##0.00") これでエラーはでなくなります。USD の部分を固定ではなくフィールドで指定したい場合は、 下記のように考えていきましょう。 まず、単位と数値書式を分割する。 =Format([フィールド名],"""USD""" & "#,##0.00") 単位文字列を分割する。 =Format([フィールド名],"""" & "USD" & """" & "#,##0.00") 単位文字列を、フィールドに変更する。 =Format([フィールド名],"""" & [Currency_Unit] & """" & "#,##0.00") これで完成。 なんかややこしいですが、ご理解いただけたでしょうか。

jjnono
質問者

お礼

早速のお返事ありがとうございます。 難しいですね~ 確かに少しでも違うとエラーが出ますね。 文字列を分割する意味が分からなくて =Format([Declared_Value],"""[Currency_Unit]""" & "#,##0.00") とすると(金額は$1,200.00)、 [Currency_Unit]1,200.00 といった出方になって意図した表示になりませんでしたし。。。

回答No.3

> =[単位] & Format([金額],"#,##0") > > の式は、フォームではなくレポートのテキストボックスのコントロールソースに挿入するという意味でしょうか? フォームでも、レポートでも、テキストボックスのコントロールソースに設定すれば有効です。 > 金額フィールドの既定値は空白、値要求の設定は「いいえ」にしてあります。 > (レポートの体裁を整えるためそうしてます。 > 一枚のレポートに10件レコードを印刷したいが、10件に満たないレポートでもテキストボックスの形を残したい為。No#だけ振って内容のないレコードが存在している感じです。) 金額が未入力なら、非表示にしたいということなら、 上記の式を、 =Format([金額], """" & [単位] & """" & "#,##0") とすればいいですね。 これで、単位 の既定値を設定しておいても、金額が未入力なら空白になります。 フォーム上で、[単位]の入力テキストボックスにも表示させたくないというなら、VBAが必要になりますが、そこまで必要ですか。 蛇足ですが、10件に満たないレポートでも10行分の空白行を表示したいのな、 WEBで「Access レポート 罫線 最後まで」辺りをキーワードに検索すればいろいろ方法が見つかりますよ。

jjnono
質問者

お礼

いろいろと教えて頂きありがとうございます!返事が遅くなりましてすみません。 上の式でできました!都合上小数点以下2桁まで必要だったので、 =Format([Declared_Value], """" & [Currency_Unit] & """" & "#,##0.00") としました。やりたかったのはまさにこのことでした!! フォームのテキストボックスには単位だけ表示されても大丈夫です。レポートで整ったので。 VBAを使わずにできてよかったです。 1から勉強しないといけないかと思いひやひやしてました。 一つ、"""" & [Currency_Unit] & """" ←ここの部分はtrim関数と同じ意味でしょうか? 「Access レポート 罫線 最後まで」の件、アドバイスありがとうございます!! しかし、なかなか私にはハードルが高く、実際の使用者も数字の手打ちも手間でないということだったので今回は辞めておきます。

回答No.2

単位フィールドはコンボボックスするといいでしょう。 入力間違いを防ぐことができますので。 値集合ソースはマスターテーブルを作成しておいてそれを設定します。 テーブル設計例 通貨マスター 通貨コード / 記号 / 通貨名 / 国または地域 AUD / $ / オーストラリアドル / オーストラリア CAD / $ / カナダドル / カナダ CHF / S₣ / スイスフラン / スイス CNY / 元 / 元 / 中国 DKK / kr / デンマーククローナ / デンマーク EUR / € / ユーロ / EU GBP / £ / 英ポンド / イギリス HKD / $ / 香港ドル / 香港 HUF / Ft / ハンガリーフォリント / ハンガリー ISK / kr / アイスランドクローナ / アイスランド INR / Rs / インド・ルピー / インド JPY / \ / 円 / 日本 MXN / $ / メキシコペソ / メキシコ NOK / kr / ノルウェークローネ / ノルウェー NZD / $ / ニュージーランドドル / ニュージーランド PLN / zł / ポーランドズウォティ / ポーランド SEK / kr / スウェーデンクローナ / スウェーデン SGD / $ / シンガポールドル / シンガポール TRY / ₤ / トルコリラ / トルコ USD / $ / 米ドル / アメリカ ZAR / R / 南アフリカランド / 南アフリカ 通貨単位コンボボックス設定例 コントロールソース 単位 値集合ソース SELECT 通貨コード, 通貨名 FROM 通貨マスター; 連結列 1 列数 2 列幅 0.5cm;2cm リスト幅 2.6cm > 大半がドルなので、規定値として$が表示されるようにしたいのです。しかも金額が入力されたときのみ表示されるように。 既定値プロパティに設定すると、金額未入力でも表示されてしまいますので、VBAが必要になりますね。 ところで、金額フィールドの既定値は 0 に設定してあるのでしょうか。それとも空白? また、「値要求」の設定はどうなってますか。 それによってコードが異なってきますので情報提示してください。

jjnono
質問者

お礼

詳しく書いてくださってありがとうございます!! やはりコンボボックスにした方が良いのですね。 金額フィールドの既定値は空白、値要求の設定は「いいえ」にしてあります。 (レポートの体裁を整えるためそうしてます。 一枚のレポートに10件レコードを印刷したいが、10件に満たないレポートでもテキストボックスの形を残したい為。No#だけ振って内容のないレコードが存在している感じです。) ちなみに前に言われた、 =[単位] & Format([金額],"#,##0") の式は、フォームではなくレポートのテキストボックスのコントロールソースに挿入するという意味でしょうか?

回答No.1

Valは先頭から数値部分のみ取り出しますので、数字で始まる値でないとだめです。 また、カンマ区切りにすると、カンマまでしか取り出せません。 単位を後に、カンマ無しにすれば、取り出すことができます。 100000000IDR と入力するようにすれば取り出すことはできます。 =Sum(Val([Declared_Value_2])) しかし、通貨型のフィールドと単位のフィールドの2つに分けたほうがいいでしょう。 金額 通貨型 単位 テキスト型 そうすれば単純に、 =Sum([金額]) で集計できますし、処理も高速です。 単位込みで表示したい場合は、 =[単位] & Format([金額],"#,##0") というような式でお好みの表示に変換できます。 別に通貨マスターテーブルを作成しておいて、そこに為替ルートを格納しておけば、 複数通貨が混在していても集計させることも可能だったりします。

jjnono
質問者

お礼

分かりやすく教えて頂きありがとうございます。 アドバイスの通り単位と金額のフィールドを分けることにしました。 ですが、そこでさらに分からないことが出てきまして。。。 大半がドルなので、規定値として$が表示されるようにしたいのです。しかも金額が入力されたときのみ表示されるように。 テキストボックスのコントロールソースに =IIf([金額]>0,"$","") と入力すると、コントロールソースにフィールド名を入れることができないので、テーブルに$というデータを格納できないのでしょうか?

関連するQ&A

  • アクセスのフォーム上で計算させたいのですが

    Win2000、アクセス2000を使用しています。 「貸し出し状況集計」フォームで「5月に貸し出した」データを抽出させ、「貸し出し期間」ごと(1年間とか6ヶ月間とか)の合計をそれぞれ集計させるようにしたいのですが。 フォームフッターにテキストボックスを作成し、テキストボックスのプロパティのコントロールソースというところに直接関数を組むと集計できましたが、貸し出し期間が空白の場合Null値となるためだと思うんですが、集計してくれません。 「貸し出し期間」の項目が多いのでなるべく空白のままにしておきたいのですが、Null値を「0」に返すNz関数があるとヘルプに書いてありましたが、テキストボックスのプロパティのコントロールソースに使用できるんでしょうか? 私が試したらエラー出てうまくいきませんでした。 おわかりになる方がいましたら、お返事ください。 アクセス初心者のため、説明がわかりづらいと思いますが、よろしくお願いします。

  • VBAの計算について教えてください。

    お世話になります。 VBA超初心者です。 教えて頂けると助かります。 ユーザーフォームにテキストボックス1、2、3を作成し、それらを計算させて テキストボックス4に表示をさせたいと考えています。 テキストボックスに入力するパターンは以下の2種類です。 (1)すべてのテキストボックスに数値が入る (2)テキストボックス3のみに数値が入る 行いたい計算は、“(テキストボックス1 × テキストボックス2) + テキストボックス3”です。 曲りなりに作成してみましたが、テキストボックス3の数値を変えた時や削除した時などに、 テキストボックス4に入っている数値が残っていたりと、思うようにできません。 作成したものを掲載しておきます。 何卒よろしくお願いします。 テキストボックス1を変更したとき 1、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox1_Change() If TextBox1.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス2を変更したとき 2、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox2_Change() If TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス3を変更したとき 1、2、3に数値が入っていれば、以下の計算を。 1か2に数値がなく、3に数値があれば、3の数値をテキストボックス4へ。 それ以外は“0”をテキストボックス4へ Private Sub TextBox3_Change() If TextBox1.Value = True And TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) ElseIf TextBox1.Value = False or TextBox2.Value = False And TextBox3.Value = True Then TextBox4 = Val(TextBox3.Text) Else texbox24 = 0 End If End SubEnd Sub

  • access2010のフォーム上で計算したいです

    access2010 初心者です。 メインフォーム上に総合計を計算したいのですがどうしたらいいのか困ってます。 ***サブフォーム(テーブル1から表示しました)*** ・商品名(テーブル1から表示) ・金額(dlookupを使って「商品一覧表」から金額を表示しました) ・数量(テーブル1から表示) ・合計金額(コントロールリボンでテキストボックスを作り「金額」*「数量」で表示してあります) *********************** メインフォームに、サブフォームの「合計金額」の様にテキストボックスで、サブフォームの「合計金額」の『総合計』を表示したいです。 総合計がある一定の金額になるように、サブフォームの「数量」を決めて行きたいのです。だから、一定金額から『総合計』を引いて残金も表示したいのですが、『総合計』の求め方がわからなくて困っています。 総合計や合計金額はデータとしてテーブルには残らなくてもOKです。 初心者なので、できればわかりやすく簡単な方法がうれしいです うまく伝えれなくて不明な点があるかと思いますが、なにとぞお願いします

  • ACCESSのフォームについて

    40個のテキストボックスがあり、この情報を一括変換したいのですが、 Me.テキスト1.Value="1" Me.テキスト2.Value="2"  ・・・ Me.テキスト40.Value="40" としてもいいのですが、 FOR文かなにかでソースを簡潔にする方法はあるのでしょうか? よろしくお願いしますm(_ _)m (WindowsXP、ACCESS2002です) 

  • エクセル 時間計算合計(マイナス含む)

    マイナス時間のデータを扱う為、各セルではTEXTして時間を 扱っております。 マイナス表示もできております。 各セルの合計をSUMを使用して計算したいのですが TEXTデータのSUM関数で=SUM(VALUE(W13:W43))を計算式として入れましたがデータに「マイナス時間」が含まれると結果が #VALUE!となってしまいます。 「プラス時間」でけあればTEXTの合算が出来ております。 「マイナス時間」を含めたTEXT合算が出来る方法をご教示願います。

  • access Nz関数が出来ません。

    すいません、教えてください。 仕様環境 WinXP access2002 おそらくNz関数の問題だと思いますが・・ フォーム上の詳細に 「数量」「単位」「単価」「金額」とあります。 そしてフォームフッターに    「小計」・・(以下すべて通貨型のテキストボックス)    「値引き」    「値引後小計」    「消費税」    「合計」 とあります。 「小計」は=sum([数量]*[単価])でsum関数で出しています。 ただ値引きがない場合は「値引き」の項目は空(きっとNULL値?)になっていて、「値引後小計」以降の金額が表示されません。 (「値引き」に直に"0"を打ち込むと表示されるんですが) 「値引き」のテキストボックスが、常に”0”の状態にして「値引き」後の項目も出るようにしたいのですが、どうしたらよいのでしょうか? 必要な時に入力する感じにしたいのです。 Nz関数を使えば良いみたいなので、いろいろ調べて試したのですが、 どうも出来ません。 よろしくお願いします!

  • TextBoxの値を使った計算式

    皆様、こんにちは。 いくつかのテキストボックスを含んでいるユーザーフォームを作りました。ユーザーがこれらのテキストボックスに入力したデータを使った式をあるセルに設定しようとしていますが、「#NAME?」というエラーメッセージが出てしまいます。コードは以下のように書いています。 Private Sub CommandButton1_Click() Range("P24").Value = TextBox8.Value Range("Z24").Formula = "=Val(TextBox8.Text)*37.86" Range("AA24").Formula = "=Val(TextBox8.Text)*57.86/1000*44/12" Range("AB24").Formula = "=Val(TextBox1.Text)*37.86/1000*0.25+Val(TextBox3.Text)/0.11*0.013+Val(TextBox4.Text)*/0.12*0.0076+Val(TextBox5.Text)/0.25*0.015+Val(TextBox6.Text)/0.31*0.017+Val(TextBox7.Text)/0.22*0.013"  Unload 軽油の消費量 End Sub 何方か詳しい方に正しい書き方を教えていただければ非常に助かります。 どうぞよろしくお願いいたします。

  • アクセスフォームにて連携したテキストボックス「の数値識別

    はじめまして。 煮詰まってしまってどうすればいいかわからないのでよろしければ教えて下さい。 アクセスの ID(オートナンバー型)|商品名(テキスト)|値段(通貨) ============================= というテーブルをフォームにしたと仮定します。 コンボボックスを利用し、商品名をコンボボックス(値集合ソースで商品名と値段を選択) に、値段を横にテキストボックス(通貨書式)で表示させています。 =[商品名1].[Column](1) 上記と同じ形を3つ作り最後にすべての値段を合計させる テキストボックス(=[値段1]+[値段2]+[値段3])としようとしているのですが 1+1の計算が2ではなく、11になってしまいます。 文字として読み込んでいるようなのですが、 どこを変更すればいいのでしょうか? どうかご教授よろしくお願いします

  • バリ旅行 日本円 ルピー 計算方法(換算)

    この度、バリ島へ旅行に行くことになりました。 そこで大変お恥ずかしい質問になりますが・・・ 日本円、ルピーの換算方法をご教授頂きたく書き込みました(^_^.) 自分、為替とはかけ離れた生活を送っていたので、 本当に正しいのかさえわからなくなってしまって(笑) 計算機がなくても頭ですぐに計算できる簡単な計算法など あるのでしょうか? 今は「1.00 日本円 (JPY) = 73.0022 インドネシア ルピア (IDR)」ですよね? お恥ずかしい質問ですが宜しくお願い致します。 追記:出来れば、バリへ行く際はドル、円だけでいいんですかね? ルピアは現地で両替した方がいいって聞いたんですが・・・。 実際のところどうなんでしょうか?

  • AJAXの計算式の中にIF文を入れて表示したい

    下記の2つのファイルで、フォームから入力した数値同士の「足し算の結果」をAJAXで表示できます。 ******************************************** 【HTMLフォーム】 <script language="JavaScript" type="text/javascript" src="js/culc.js"></script> <form name="f1"> <input type="text" id="text1" name="text1" size="10" maxlength="10" /> + <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="足す" onclick="readText()" /> </form> <p id="message"></p> ******************************************* 【JAVASCRIPT(culc.js)】 function readText() { var text1 = document.getElementById("text1"); var text2 = document.getElementById("text2"); var message = document.getElementById("message"); var str_val1 = text1.value; var str_val2 = text2.value; var sum; if (isNaN(str_val1) || str_val1 == "" || isNaN(str_val2) || str_val2 == "") { textMessage = "数値以外の文字が入っています"; } else { //sum = str_val1 + str_val2; sum = parseFloat(str_val1) + parseFloat(str_val2); textMessage = "合計は、" + sum + "です"; } message.innerHTML = textMessage; } ************************************************ 【質問】 このjavascriptを改造し、入力した数値についての「足し算の結果」が正の数だった場合には「正の数」、負の数だった場合は「負の数」と表示すべく改造しております。下記の改造を施したのですが、うまく表示されません。 下記の文のどこが誤りか修正頂けませんでしょうか? 宜しくお願い致します。 【JAVASCRIPT(culc2.js)】 function readText() { var text1 = document.getElementById("text1"); var text2 = document.getElementById("text2"); var message = document.getElementById("message"); var str_val1 = text1.value; var str_val2 = text2.value; var sum; if (isNaN(str_val1) || str_val1 == "" || isNaN(str_val2) || str_val2 == "") { textMessage = "数値以外の文字が入っています"; } else { //sum = str_val1 + str_val2; sum = parseFloat(str_val1) + parseFloat(str_val2); textMessage = "(if((sum > 0) { document.write("正の数"); } else((sum <= 0) { document.write("負の数"); } ))"; } message.innerHTML = textMessage; }

    • ベストアンサー
    • AJAX

専門家に質問してみよう