- ベストアンサー
Accessでの数値の表示について
- Windows7のOSでAccess2007を使用しています。フォーム内のテキストボックスに数値を表示しており、平均値をリアルタイムで算出しています。しかし、特定の条件で表示が上手くされず困っています。項目Aの下限値を0.1、項目Bの下限値を0.5と設定していますが、0.09や0.49といった値を入力した場合に特定の記号を表示したいと考えていますが、上手く表示できません。
- フォーム内のテキストボックスに数値を表示し、平均値を算出しています。数字の表示には特定の条件があり、項目Aの下限値を0.1、項目Bの下限値を0.5と設定しています。しかし、0.09や0.49といった値を入力した場合に特定の記号を表示する方法が分かりません。何かアイデアやアドバイスがありましたら、教えていただけますか?
- Accessのフォーム内で数値の表示を行っています。特定の条件で表示を変更したいと考えており、項目Aの下限値を0.1、項目Bの下限値を0.5と設定しています。しかし、0.09や0.49といった値を入力した場合に特定の記号を表示する方法がわかりません。どなたか教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、もう少し仕様を厳密に検討しましょう。 入力値が、上限、下限を超えていたら、テーブルに格納する値を変更してしまっていいのか、どうか。 変更してしまうと、例えば、最初から 0.1 と入力したのか、0.09 と入力してから自動で下限値に修正されたのか、後から判断できません。 テーブルに格納するのは入力値で、表示するときに下限値に修正する、平均などの集計時に修正値を利用する、という仕様がいいのではないかと思いますが、どうでしょうか。 あと、平均など集計するときに、元の入力値でするのか、修正値を使用するのか、どちらでしょうか。 次に、0.1↓ という表示ですが、↓を付加してしまうと、数値ではなく、文字列になります。文字列にしてしまうと、集計できません。 ↓や↑は別のテキストボックスに表示させるようにしたほうがいいでしょう。 集計には修正値を使用するとして回答すると、 フォームのレコードソースをクエリにして、フィールド欄に下記の式を設定します。 項目A: IIf([テーブル名].[項目A]<0.1,0.1,[テーブル名].[項目A]) 項目B: IIf([テーブル名].[項目B]<0.5,0.5,[テーブル名].[項目B]) ※[テーブル名]の部分は実際のテーブル名にしてください。 フォーム上の、項目A、項目B と連結したテキストボックスを配置します。 その右横にテキストボックスを配置して、コントロールソースを下記のように設定します。 =IIf([項目A]<0.1,"↓","") =IIf([項目B]<0.5,"↓","") フォームフッターの平均のテキストボックスのコントロールソースは、下記でOKです。 =Round(Avg([項目A])) =Round(Avg([項目B]))
その他の回答 (3)
- naoto0216
- ベストアンサー率46% (183/391)
>・項目A、項目Bにデータを入力しようとすると、「フィールド項目Aは、式に基づいているので、編集できません。」と表示され、入力が不可能な状態になりました。 レコードソースにされている「Q_TranData」が更新出来ない状態になっているのではないでしょうか。 <クエリからのデータ更新について> http://www.accessclub.jp/actips/tips_30.htm
補足
naoto0216様 ご回答ありがとうございます。 リンクを拝見させて頂きました。 クエリからテーブルへの更新の不可条件がこんなにあるものとは、初めて知りました。 今回の場合、リンク先の内容からしますと、「演算フィールド」と言う項目が該当し、 理由が判明しました。
- panacon
- ベストアンサー率31% (214/679)
kei_t さんへ 表示(数字+文字=文字)と計算元(数字)の両方を同じテキストボックスに表現することはしないと思います。テーブルから表示用のフィールドを追加して、計算用と表示用のテキストボックスの両方を作ると良いです。先に紹介した更新後マクロの文章の中に、追加したフィールドにも表示を代入すればできますね。 平均ですが、下限値で丸めたものを平均するのか、元データを使って平均するのかでフィールド数は違ってくると思います。元データを使うのであれば、フィールド(テキストボックス)は3つ必要だと思います。つまり、元データのフィールド、下限値を含むフィールド、矢印のフィールドです。データに矢印など入ってしまっては、数字になりませんので計算できなくなりますし、若し、計算結果が出たとしても信用できないものとなります。
補足
panacon様 ご回答ありがとうございます。 検討をさせて頂きたいと思います。
- panacon
- ベストアンサー率31% (214/679)
kei_t さんへ 項目Aと項目B用に値の代入マクロをそれぞれ作って、それぞれの更新後処理イベントに付けたらいかがですか。 マクロを作るときに、すべてのマクロを表示させると値の代入が出現します。 最初にIFを選択して、項目A<0.1 Then 値の代入で、代入される側が項目A、代入する値が0.1 ELSEを書くとしたら、項目Aとする。書かなくても同じだと思いますが。 同様に、項目B<0.5 Then 値の代入で、代入される側が項目B、代入する値が0.5 ELSE 項目B こんな感じでしょうか。
お礼
panacon様 早速の回答ありがとうございます。 明日、会社で組み込んでみます。
補足
panacon様 早速試させて頂きました。 データに関しましては、上手くいきましたが、下記2項目がうまく表示できませんでした。 (1) 項目Aにつきましては、0.1未満の時、0.1↓と矢印が表示できないこと。 (2) 入力後、再表示をした際、データ自身を書き換えている為、0.1未満のデータか判断ができず、 「↓」を表示できないこと。 せっかく、ご回答を頂きましたが、わたしの説明が下手なせいで、あと少しやりたいことまで、 たどり着くことができませんでした。 また、お知恵を拝借出来るようでありましたら、よろしくお願い致します。
お礼
hatena1989様 長期間なやんでおりました問題の解決にお力添えを頂きまして、ありがとうございました。 結果的に、イメージ通りの処理が出来るようになりました。 心から感謝をさせて頂いております。 最終的に、クエリ経由の方法につきまして上手く動作しませんでしたが、下記のように組み込みをさせて頂きました。 (1) 「↓」用のテキストボックスを配置し、コントロールソースにより、データの表示非表示をさせて頂きました。 (2) フォームのレコードソースは、T_TranDataのままにしました。 (3) 基準値未満の入力データに関しまして、更新後処理イベントにて、項目Aの時、0.1未満が入力されると、強制的に0.09にデータを変換し、テキストボックスの書式で#,##0.0とし、四捨五入させました。また、項目Bに関しましては、0.5未満が入力されると、0.49にデータを変換し、テキストボックスの書式で#,##0.0とし、四捨五入させました。現在の所、平均値に誤差は発生しておりません。 この度は本当にありがとうございました。
補足
hatena1989様 早速のご教示ありがとうございます。 >テーブルに格納するのは入力値で、表示するときに下限値に修正する、平均などの集計時に修正値を利用する、という仕様がいいのではないかと思いますが、どうでしょうか。 → その通りです。 >あと、平均など集計するときに、元の入力値でするのか、修正値を使用するのか、どちらでしょうか。 → 修正値で平均を取りたいと思っております。 >↓や↑は別のテキストボックスに表示させるようにしたほうがいいでしょう。 → その通りにさせて頂きます。 >フォーム上の、項目A、項目B と連結したテキストボックスを配置します。 → フォームのレコードソース用のクエリのフィールドで作成した式に連結させました。 ○教えて頂きましたとおり、やってみました。 ・フォームのレコードソースのクエリは、T_TranDataを元にQ_TranDataを作成しました。 ・Q_TranDataの項目A,項目Bにつきまして、項目A: IIf([T_TranData].[項目A]<0.1,0.1,[T_TranData].[項目A])に書き換え、項目B: IIf([T_TranData].[項目B]<0.5,0.5,[T_TranData].[項目B])と式に書き換えました。 ・項目Aと項目Bの隣に「↓」表示用のテキストボックスを配置しました。 ○組み込みました結果です。 ・既に入力されているデータに関しましては、正しく表示され、↓も連動して表示されるようになりました。 ・項目A、項目Bにデータを入力しようとすると、「フィールド項目Aは、式に基づいているので、編集できません。」と表示され、入力が不可能な状態になりました。 これは、私がhatena1989様のやり方を、どこか間違って理解しているでしょうか。 間違っている箇所がございましたら、ご指摘して頂きたく、よろしくお願い致します。