アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。Access2007を使用しています。
表計算のMatch関数はAccessには必要ないというということをここの質問と回答で読みました。
必要なものをテーブルから読むからです。

今、IDと氏名、生年月日、性別のフィールドを持つテーブルがあります。
その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。
年齢はクエリ又はフォームの中で表示できますから、下のようなフィールドを持つテーブルを作ったとしても、関連させることができません。

    年齢   男  女
    20     1   2
    30     2   3
    40     5   7

どのような考え方をしたらよいでしょう?Accessの操作が詳しくない者に出来る方法ありましたら、よろしくお願いいたします。  

A 回答 (2件)

>IDと氏名、生年月日、性別のフィールドを持つテーブルがあります。


>その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。
>年齢はクエリ又はフォームの中で表示できますから、下のようなフィールドを持つテーブルを作ったと
>しても、関連させることができません。

    年齢   男  女
    20     1   2
    30     2   3
    40     5   7
上のテーブルはクエリで簡単にできるので不要。
>その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。
これも演算で簡単にできるので
クエリ1つですみます。
    • good
    • 0

解決しましたか。

関数を作成して判定する方法で。

テーブル名を「対象テーブル」、「判定テーブル」
とします。


(1) テーブル

対象テーブル:
ID(オートナンバー、主キー)
氏名(テキスト型)
生年月日(日付/時刻型)
性別(テキスト型)


判定テーブル:
判定ID(オートナンバー、主キー)
年令(数値型)
男(数値型)
女(数値型)


(2) 関数

以下の関数をコピーして標準モジュールに
貼り付け、保存してください。
DAOを使っているので、コード表のツールから参照設定
を選択して、Microsoft DAO xx Object Library に
チェックを入れて、優先順位ボタンで上がるところまで
移動してください。


Function funcJudge(ByVal myage As Integer, ByVal mysex As String)
Dim db As Database
Dim rs As Recordset
Dim fld As Field
Dim i As Integer

Set db = CurrentDb
Set rs = db.OpenRecordset("判定テーブル")

If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
'クエリの年代と判定テーブルの年令が同じものを探す
If myage = rs!年令 Then
'対象テーブルの性別と判定テーブルのフィールド名が同じものを
'探して関数に返す
For Each fld In rs.Fields
If mysex = fld.Name Then
funcJudge = fld.Value
Exit Do
End If
Next fld
End If
rs.MoveNext
Loop
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Function


(3) クエリの作成

以下のSQL文を新しいクエリのSQLビューに貼り付け
保存してください。


SELECT 対象テーブル.ID, 対象テーブル.氏名, DateDiff("yyyy",[生年月日],Date())-(Format([生年月日],"mmdd")<Format(Date(),"mmdd")) AS 年令, 対象テーブル.性別, ([年令]\10)*10 AS 年代, funcJudge([年代],[性別]) AS 判定
FROM 対象テーブル;




クエリを実行すると判定というフィールドに
点数が表示されます。

分からないところがあれば補足してください。
    • good
    • 0

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