Microsoft Accessの質問です。組織に18歳から55歳までの人間が100人近くいて、それらの人に体力測定を行うとします。24以下&25~29、…、45~49&50以上といった具合に年齢区分し、さらにその中でタイムに応じて点数をつけたいのですが、どういった式にすればいいのでしょうか? switch関数やIIf関数を使えばよいところまではわかったのですが、それらをどのように組み合わせたらよいのかがわかりません。なお、年齢ごとにテーブルやクエリを分割することなく、一つのテーブルもしくはクエリにて、一つの数式(式が長くなるでしょうが)で計算したいです。よろしくお願いします!

回答の条件
  • 1人3回まで
  • 登録:2007/03/21 21:47:37
  • 終了:2007/03/28 21:50:03

回答(2件)

id:careplanner No.1

らいず回答回数338ベストアンサー獲得回数132007/03/21 22:39:56

ポイント35pt

クエリの中に全ての条件を組み込むのはめんどくさいし、大変なのでモジュールを1つ作成しておいて、そのモジュールをクエリ内で実行させるのがスマートだと思います。

【モジュール】
Public Function age2point(a As Integer, b As Single)
    Dim point(2, 3) As Integer
    

    'a に年齢
    'b にタイム
    
    '年齢別にポイントを設定する
    '1  -29
    point(0, 1) = 1
    point(0, 2) = 2
    point(0, 3) = 3

    '2  30-44
    point(1, 1) = 4
    point(1, 2) = 5
    point(1, 3) = 6
    
    '3  45-
    point(2, 1) = 7
    point(2, 2) = 8
    point(2, 3) = 9
    
    
    '年齢に応じたポイントを返す

    Select Case a
        Case Is < 29    '29歳以下の場合
            Select Case b
                Case Is < 10    'time 10以下
                    age2point = point(0, 1)
                Case 11 To 20   'time 11~20の間
                    age2point = point(0, 2)
                Case Else       'それ以外
                    age2point = point(0, 3)
            End Select
        Case 30 To 44   '年齢30~44まで
            Select Case b
                Case Is < 10
                    age2point = point(1, 1)
                Case 11 To 20
                    age2point = point(1, 2)
                Case Else
                    age2point = point(1, 3)
            End Select
    
    End Select
    

End Function

上のモジュール「age2point」をクエリに組み込みます。

SELECT [テーブル1].[age], [テーブル1].[time], age2point([age],[time]) AS point
FROM テーブル1;

上のSQLをクエリのデザイン画面でSQlビューに変えて貼り付ければクエリ内での記述方法が出てきます。

参考にしてみてください。

id:July_Star

ありがとうございます!

2007/03/21 23:40:20
id:ikjun No.2

ikjun回答回数155ベストアンサー獲得回数42007/03/22 00:04:00

ポイント35pt

「その中でタイムに応じて点数をつけたい」というのがなにを意味しているのか良くわかりません。想像するに同じ結果でも年齢が高い人ほど点数をよくするということだろうとは思うのですが?

VBAは使いたくないということなのかも知れませんが、次のような関数をVBAを使って書くとクエリーででも使えるので便利だと思います。

Function class(age)
  Select Case age
    Case Is < 24
      class = 1
    Case 25 To 29
      class = 2
    Case 30 To 34
      class = 3
    Case 35 To 39
      class = 4
    Case 40 To 49
      class = 5
    Case Else
      class = 6
  End Select
End Function

この程度のプログラムなら「Select Case」だけわかれば理解できます。結果は

1=class(20)

2=class(27)

6=class(60)

のようになります。これを応用すればおたずねのことは長い式を使わなくても出来るのではないかと思います。

id:July_Star

ありがとうございます!

2007/03/22 00:06:21
  • id:ikjun
    あらら、先にもっと詳しく答えられていた。すいません。careplanner の答えのほうがはるかにいいです。私のはポイントは辞退します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません