- ベストアンサー
テキスト型の数字の書式についての相談
- テキスト型の数字を通貨型で表記する方法について相談です。循環参照のエラーが起きてしまい、解決策がわかりません。
- コントロールソースに=iif(isnameric([料金a])=true,fomat([料金a],\#,##0),[料金a])と指定してみましたが、循環参照エラーが発生してしまいます。
- isnameric関数が正しく機能していないため、テストでfalseの場合の処理を省くと全てが空白になってしまいます。解決策を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 料金aが変動、固定、個別とあり固定の場合は毎月決まった金額ですので集計が必要となっています。 > それを実現する為にiif関数でフィールドを1つにまとめ処理したクエリを > レポートのソースにしています。 そのような仕様なら、一つのフィールドで処理しようとするは無理があると思います。 料金a は通貨型にして、別に 種別 というフィールドを追加するのがいいと思います。 種別 フィールドは下記のように設定します。 データ型 数値型 フィールドサイズ バイト型 ルックアップ 表示コントロール コンボボックス 値集合タイプ 値リスト 値集合ソース 1;"1変動";2;"2固定";3;"3個別" 連結列 1 列数 2 列幅 0cm これで、種別フィールドで 1 と入力すれば 1変動、2で 2固定、3で 3固定 と表示されます。もちろんマウスでドロップダウンリストから選択してもOKです。 この方が入力もしやすいと思います。 レポートでは、詳細のテキストボックスのコントロールソースを下記のようにします。 =Choose([種別],Fomat([料金a],"\\#,##0"),"固定","個別")
その他の回答 (6)
- bin-chan
- ベストアンサー率33% (1403/4213)
#3です。 まさか[テーブルorクエリ名]をそのまま使用してはいないでしょうね? [テーブルorクエリ名]の部分は「参照しているテーブルorクエリ名」と置き換えてくださいね。
- hatena1989
- ベストアンサー率87% (378/433)
> もしかするとグループフッターの部分に合計があるのでそれでかもしれません。 > 料金aの合計=Sum(Val(Nz([txt料金a]))) > コントロールソースにはこのようになっています。 > それから計算結果が0になってしまいました。\がついたのでValが数値を読めなくなったのかな。。。 Sumなどの集計関数の引数にはフィールド名を指定してください。 =Sum(Val(Nz([料金a]))) もし、テーブルに入ってるデータそのものに\がついているのなら、下記のように\を削除してから集計します。 =Sum(Val(Mid([料金a],2))) \132,456 のようにカンマも入っているなら、 =Sum(Val(Mid(Replace([料金a],",",""),2))) 以下は別案ですので参考程度に。 金額 か"固定"の表示をさせたいのなら、 フィールドのデータは通貨型にして、書式プロパティを \\#,##0;-\\#,##0;\\0;"固定" とします。これで、数値を入力すれば通貨表示、 未入力(Null)なら「固定」と表示されます。 集計操作をするときに文字列を数値に変換して集計するより、数値のままのほうが高速に処理できます。
お礼
長い間お礼もせず申し訳ありませんでした。この業務自体がなくなってしまいました… ただ今後も勉強を続けていきたいと思います。ありがとうございました。
補足
>\\#,##0;-\\#,##0;\\0;"固定" 全く思いつかなかった方法でした。とても参考になりました。 ありがとうございます。 >\132,456 のようにカンマも入っているなら、 >=Sum(Val(Mid(Replace([料金a],",",""),2))) 補足をした後、=Sum(Val(Mid([料金a],2)))と取り出す方法を考えて実行しました。 カンマまでは気づかなかったです^^; ただ「抽出条件で型が一致しません」のエラーでした。 確かに今後データが増えたときも考えると処理速度は気になります。 もう少し詳細を説明させていただくと、毎月の状況の把握の為、レポートで出力するのですが、 料金aが変動、固定、個別とあり固定の場合は毎月決まった金額ですので集計が必要となっています。 それを実現する為にiif関数でフィールドを1つにまとめ処理したクエリを レポートのソースにしています。 もっと賢いやり方があればアドバイスいただければ幸いです。
- chayamati
- ベストアンサー率41% (260/624)
コーディングしなくとも テキストボックスのプロパティーの書式タグで[通貨]と設定できます。 その他タグで ・IME入力モード(On,Off) ・IME変換モード(一般、人名/地名) の設定も出来ます。 ※テーブルのデザインで設定しておくとフォーム、レポートの 作成時に反映されます。
お礼
長い間お礼もせず申し訳ありませんでした。この業務自体がなくなってしまいました… ただ今後も勉強を続けていきたいと思います。ありがとうございました。
補足
回答ありがとうございます。 テーブルのフィールドとしてはテキストと数字の両方が存在するのでこのような形となりました。 フィールドの書式は通貨にしてみましたが、数字がテキスト型として認識されるようでしたので、 Format関数をと考えた次第です。循環参照のエラーは回避できたようです。
- bin-chan
- ベストアンサー率33% (1403/4213)
> isnameric関数の考え方が変なのでしょうか。 isnumericなのでは? > =iif(isnameric([料金a])=true,fomat([料金a],\\#,##0),[料金a]) > このようにすると循環参照のエラーが起きてしまいます。 =iif(isnameric([テーブルorクエリ名]![料金a])=true,fomat([テーブルorクエリ名]![料金a],\\#,##0),[テーブルorクエリ名]![料金a]) とするとどうなりますか?
お礼
長い間お礼もせず申し訳ありませんでした。この業務自体がなくなってしまいました… ただ今後も勉強を続けていきたいと思います。ありがとうございました。
補足
ご指摘ありがとうございます! お恥ずかしいことに3つも転機ミスがありますね・・・ コントロールソースとしてはちゃんと入力されてました^^; >=iif(isnameric([テーブルorクエリ名]![料金a])=true,fomat([テーブルorクエリ名]![料金a],\\#,##0), [テーブルorクエリ名]![料金a]) とするとどうなりますか? 指定してやってもみたのですが、パラメータの入力が求められたので困ってしまった次第です。 循環参照はなんとか回避できました。
- hatena1989
- ベストアンサー率87% (378/433)
> コントロールソースに > =iif(isnameric([料金a])=true,fomat([料金a],\\#,##0),[料金a]) > このようにすると循環参照のエラーが起きてしまいます。 循環参照エラーなら、そのテキストボックスの名前が、「料金a」になっているのだと思いますので、 別の名前に変更してください。例えば「txt料金a」とか。
補足
あちらこちらでお世話になっております。 hatena1989様のご指摘通り「txt」をつけると循環参照のエラーはでませんでした。 しかし、パラメータの入力「txt料金a」が求められてしまいます。 何も入力せずにOKをするとほしい結果は得られました。 もしかするとグループフッターの部分に合計があるのでそれでかもしれません。 料金aの合計=Sum(Val(Nz([txt料金a]))) コントロールソースにはこのようになっています。 それから計算結果が0になってしまいました。\がついたのでValが数値を読めなくなったのかな。。。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
クエリで、 =iif(isnameric([料金a])=true,fomat([料金a],\\#,##0),[料金a]) のように書き換えて、それをレポートのレコードソースにするか、 モジュールにファンクションをつくり、レポートでそれを呼び出すか、、、
補足
ご回答ありがとうございます。 なかなかモジュールの作成レベルまで私が追いついておらず、 踏み込めない状態です(涙) クエリで式も考えたのですが料金a自体がすでに式になっていて、 自分でややこしくなるなーと思ったのでレポートでの書式にしたいと思いました。 循環参照はなんとかエラーが出なくなりました・・・けど・・・といったところでしょうか。 もうひとがんばりしてみます。
お礼
長い間お礼もせず申し訳ありませんでした。この業務自体がなくなってしまいました… ただ今後も勉強を続けていきたいと思います。ありがとうございました。