• 締切済み

Accessで表計算のMatch関数のようなもの?

いつもお世話になります。Access2007を使用しています。 表計算のMatch関数はAccessには必要ないというということをここの質問と回答で読みました。 必要なものをテーブルから読むからです。 今、IDと氏名、生年月日、性別のフィールドを持つテーブルがあります。 その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。 年齢はクエリ又はフォームの中で表示できますから、下のようなフィールドを持つテーブルを作ったとしても、関連させることができません。     年齢   男  女     20     1   2     30     2   3     40     5   7 どのような考え方をしたらよいでしょう?Accessの操作が詳しくない者に出来る方法ありましたら、よろしくお願いいたします。  

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

解決しましたか。関数を作成して判定する方法で。 テーブル名を「対象テーブル」、「判定テーブル」 とします。 (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 対象テーブル; クエリを実行すると判定というフィールドに 点数が表示されます。 分からないところがあれば補足してください。

  • umazanpai
  • ベストアンサー率38% (53/137)
回答No.1

>IDと氏名、生年月日、性別のフィールドを持つテーブルがあります。 >その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。 >年齢はクエリ又はフォームの中で表示できますから、下のようなフィールドを持つテーブルを作ったと >しても、関連させることができません。     年齢   男  女     20     1   2     30     2   3     40     5   7 上のテーブルはクエリで簡単にできるので不要。 >その人の年齢・性別によってある決められた点数を付与するというものを作りたいです。 これも演算で簡単にできるので クエリ1つですみます。

関連するQ&A

専門家に質問してみよう