こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access 一定以下の数値の表示(長文)

いつもお世話になっております。

OSはWindows7、Access2007で作成しております。

まず、以下の票形式をAccessので作成しています。各項目は、テキストボックスです。
入力者   項目A  項目B
-------------
入力者1  0.3   0.07
入力者2  0.1↓  0.05↓
-------------
平均     0.2   0.06    

(平均の計算式は、=Round(Avg([項目A]))の様に、リアルタイムに平均を算出したい為、フォームの値で計算をしております。)

項目Aの下限値を0.1、項目Bの下限値を0.5と下限値を設定します。

項目Aに0.09と入力された場合に0.1↓と表示され、項目Bに0.49と入力された場合に0.5↓と
表示させたいと考えておりますが、なかなか上手く表示されません。

ちなみに、テキストボックスの書式に、エクセルのユーザー設定と同じように、[>=0.1]G/標準;[<0.1]"0.1↓";や、コントロールソースに、=IIf([項目A] >= 0.1,Format([項目A],"#,##0.0"),Format([項目A],"#,##0.0↓")などを試しましたが、上手く表示してくれませんでした。

長文となりましたが、どちら様か、おわかりになる方がいらっしゃれば、ご教授の程よろしくお願い致します。

投稿日時 - 2015-10-26 17:12:51

QNo.9070171

すぐに回答ほしいです

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

まず、もう少し仕様を厳密に検討しましょう。

入力値が、上限、下限を超えていたら、テーブルに格納する値を変更してしまっていいのか、どうか。
変更してしまうと、例えば、最初から 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]))

投稿日時 - 2015-10-27 09:22:34

補足

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様のやり方を、どこか間違って理解しているでしょうか。
間違っている箇所がございましたら、ご指摘して頂きたく、よろしくお願い致します。

投稿日時 - 2015-10-27 15:01:43

お礼

hatena1989様

長期間なやんでおりました問題の解決にお力添えを頂きまして、ありがとうございました。

結果的に、イメージ通りの処理が出来るようになりました。
心から感謝をさせて頂いております。

最終的に、クエリ経由の方法につきまして上手く動作しませんでしたが、下記のように組み込みをさせて頂きました。

(1) 「↓」用のテキストボックスを配置し、コントロールソースにより、データの表示非表示をさせて頂きました。

(2) フォームのレコードソースは、T_TranDataのままにしました。

(3) 基準値未満の入力データに関しまして、更新後処理イベントにて、項目Aの時、0.1未満が入力されると、強制的に0.09にデータを変換し、テキストボックスの書式で#,##0.0とし、四捨五入させました。また、項目Bに関しましては、0.5未満が入力されると、0.49にデータを変換し、テキストボックスの書式で#,##0.0とし、四捨五入させました。現在の所、平均値に誤差は発生しておりません。

この度は本当にありがとうございました。

投稿日時 - 2015-10-27 17:40:19

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>・項目A、項目Bにデータを入力しようとすると、「フィールド項目Aは、式に基づいているので、編集できません。」と表示され、入力が不可能な状態になりました。

レコードソースにされている「Q_TranData」が更新出来ない状態になっているのではないでしょうか。
<クエリからのデータ更新について>
http://www.accessclub.jp/actips/tips_30.htm

投稿日時 - 2015-10-27 15:52:14

補足

naoto0216様

ご回答ありがとうございます。

リンクを拝見させて頂きました。
クエリからテーブルへの更新の不可条件がこんなにあるものとは、初めて知りました。

今回の場合、リンク先の内容からしますと、「演算フィールド」と言う項目が該当し、
理由が判明しました。

投稿日時 - 2015-10-27 17:20:19

ANo.3

kei_t さんへ
表示(数字+文字=文字)と計算元(数字)の両方を同じテキストボックスに表現することはしないと思います。テーブルから表示用のフィールドを追加して、計算用と表示用のテキストボックスの両方を作ると良いです。先に紹介した更新後マクロの文章の中に、追加したフィールドにも表示を代入すればできますね。
平均ですが、下限値で丸めたものを平均するのか、元データを使って平均するのかでフィールド数は違ってくると思います。元データを使うのであれば、フィールド(テキストボックス)は3つ必要だと思います。つまり、元データのフィールド、下限値を含むフィールド、矢印のフィールドです。データに矢印など入ってしまっては、数字になりませんので計算できなくなりますし、若し、計算結果が出たとしても信用できないものとなります。

投稿日時 - 2015-10-27 11:41:57

補足

panacon様
ご回答ありがとうございます。

検討をさせて頂きたいと思います。

投稿日時 - 2015-10-27 17:17:29

ANo.1

kei_t さんへ
項目Aと項目B用に値の代入マクロをそれぞれ作って、それぞれの更新後処理イベントに付けたらいかがですか。
マクロを作るときに、すべてのマクロを表示させると値の代入が出現します。
最初にIFを選択して、項目A<0.1 Then
値の代入で、代入される側が項目A、代入する値が0.1
ELSEを書くとしたら、項目Aとする。書かなくても同じだと思いますが。
同様に、項目B<0.5 Then
値の代入で、代入される側が項目B、代入する値が0.5
ELSE 項目B
こんな感じでしょうか。

投稿日時 - 2015-10-26 21:31:07

補足

panacon様

早速試させて頂きました。
データに関しましては、上手くいきましたが、下記2項目がうまく表示できませんでした。

(1) 項目Aにつきましては、0.1未満の時、0.1↓と矢印が表示できないこと。
(2) 入力後、再表示をした際、データ自身を書き換えている為、0.1未満のデータか判断ができず、
  「↓」を表示できないこと。

せっかく、ご回答を頂きましたが、わたしの説明が下手なせいで、あと少しやりたいことまで、
たどり着くことができませんでした。

また、お知恵を拝借出来るようでありましたら、よろしくお願い致します。

投稿日時 - 2015-10-27 08:52:32

お礼

panacon様
早速の回答ありがとうございます。
明日、会社で組み込んでみます。

投稿日時 - 2015-10-26 22:01:49

あなたにオススメの質問