プロが教えるわが家の防犯対策術!

Accessのフォームで複数条件でフィールドの値を表示する方法を教えてほしいです。
フィールドは以下のようになっています。

氏名CD
氏名
部課CD
所属
性別  
握力右
握力左
握力平均
握力得点
※その他フィールドは省略

今回フォームで表示したいのが「握力得点」フィールドの値で、

性別が「男」でかつ握力平均が0~31のとき、握力得点は「1」
性別が「男」でかつ握力平均が32~36のとき、握力得点は「2」
性別が「女」でかつ握力平均が0~18のとき、握力得点は「1」
性別が「女」でかつ握力平均が19~20のとき、握力得点は「2」
と表示されるようにしたいです。
「性別は」すでに入力済で、「握力平均」の値を入力すると「握力得点」に自動で値が入るようにしたいです。

説明が下手で申し訳ございませんが、わかる方がいましたら教えてほしいです。
よろしくお願いします。

A 回答 (4件)

こんにちは



これらを定義してからテキストLostFocusイベントを走らせればいけると思います
LostFocusの発生させ方はデザインビューでテキストボックスプロパティの
イベントのフォーカス喪失後の…をクリックしてコードビルダーを選択

【定義】
性別:txtGender
握力:txtGrip
ポイント:txtPoint

【ソース】
Private Sub txtGrip_LostFocus()
Dim iValue As Integer
Dim strGender As String
Dim iPoint As Integer
iValue = Val(txtGrip.Value)
strGender = txtGender.Value
iPoint = 0
If strGender = "男" Then
Select Case iValue
Case 0 To 31
iPoint = 1
Case 32 To 36
iPoint = 2
Case Else
iPoint = 3
End Select
ElseIf strGender = "女" Then
Select Case iValue
Case 0 To 18
iPoint = 1
Case 19 To 20
iPoint = 2
Case Else
iPoint = 3
End Select
End If
txtPoint.Value = iPoint
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
定義の仕方がわからなかったので教えてほしいです。
また定義の部分で握力:texGripは質問のフィールドでいうと「握力平均」
ポイント:texPointは「握力得点」のことでよろしいでしょうか?
いろいろ質問して申し訳ないですがよろしくお願いします。

お礼日時:2022/07/21 17:07

連投すみません。

帰宅して確認してみました。

よく読んだら、テーブルの[握力得点]フィールドに値を代入したいんですね。勘違いしました。
それなら更新クエリでできますよ。テーブル名はご自分のものに合わせて下さい。

[Accessメニュー]-[作成]-[クエリデザイン]
[テーブル/クエリ選択]はキャンセル
[右クリック]-[SQLビュー]で下のSQLを貼付け
[握力得点更新クエリ]と名前を付けて保存

UPDATE [テーブル1] SET
[握力得点] = ABS(
(([性別]='男') * IIf([握力平均]<32,1,2))+(([性別]='女') * IIf([握力平均]<19,1,2))
);

これで保存したクエリをダブルクリック(実行)すると一発で更新します。

#余談

テーブルの正規化という観点から言えば、
 「計算できる項目はテーブルに保存しない」
となります。今回の件だと握力得点フィールドですね。

テーブルから[握力得点]フィールドを削除し、表示を計算で行うにはクエリのSQLビューで次を貼付けし、保存、ついでこれを元にフォームウィザードを起動すると一発かもしれません。
一応、[握力得点2]とフィールド名は変更してます。

SELECT *, (([性別]='男') * IIf([握力平均]<32,1,2))+(([性別]='女') * IIf([握力平均]<19,1,2)) AS [握力得点2]
FROM [テーブル1];
    • good
    • 0

こんにちは。

横入り失礼します。

表示だけの問題ですよね?

既ご回答以外では、非連結のテキストボックスなどのコントロールを Form に配置し、その ControlSource プロパティに Excel の様な IIF関数の式を埋め込むのはどうですか?

https://docs.microsoft.com/ja-jp/office/vba/api/ …

出先なので確認してませんが、多分できるはず。
他にはAccessらしく、得点フィールドを追加したクエリを作成(IIF関数で表示内容は分岐させます)、それを Form の RecordSource に指定するやり方でもいけたと思います。
    • good
    • 0

お疲れ様です



>また定義の部分で握力:texGripは質問のフィールドでいうと「握力平均」
>ポイント:texPointは「握力得点」のことでよろしいでしょうか?
仰る通りのイメージです
テキストボックス名・イベント処理名を調整して頂けると助かります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!