- ベストアンサー
ACCESSのMax(Min)関数使用方法
お忙しい中すいませんが、教えてください。 クエリーデザイン中で式ビルダを使って、最大値(最小値)を表示させるフィールドを作成する方法を検討しています。 例えば3つのレコードの中から最大値(最小値)を抽出して新しいフィールドに表示させたいのです。 簡単で良い方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
先ほど回答した者ですが、答えた式が間違ってました。 多分下記でよいと思います。 最大点数: Choose(IIf(([国語]>=[算数] And [国語]>=[理科]),1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])
その他の回答 (4)
- ARC
- ベストアンサー率46% (643/1383)
自作関数を作ってもいいですね。 モジュールを新規作成して、下記の内容をコピー、貼り付けして、名前を付けて保存してください。(名前は何でも構いません。モジュールの内容が分からなくても大丈夫です。とにかく、コピー、貼り付けさえすれば動きます。) で、クエリの[フィールド]の部分に、 =ChooseMax([国語],[算数],[理科]) のように、比較するフィールドをコンマで区切って入力してください。 これで、仰る機能が実現できるはずです。 ----切り取り線---- Public Function ChooseMax(ParamArray Values() As Variant) As Variant Dim i As Long On Error Resume Next ChooseMax = Values(0) For i = 1 To UBound(Values) If Values(i) > ChooseMax Then ChooseMax = Values(i) End If Next i End Function ----切り取り線----
お礼
大変ありがとうございました。 とりあえずやってみます!
先に回答された方のようにテーブル構造を変えたほうが汎用性はあると思いますし、またVBAを使えばより簡単に実現できると思います。 が、あえて補足の例だけのフィールドだと仮定した場合、次のように式ビルダ内に入力すれば科目に関係無く最大値の点数がでます。最小値は不等号を逆にすれば解決すると思いますので、省きます。 最大点数: Choose(IIf([国語]>=[算数],1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])
- AkiraND
- ベストアンサー率52% (10/19)
ごめんなさい。現状のテーブル構造では簡単に要求事項を解決する方法が見つけられませんでした。 (VBAで書いてもいいなら別ですが・・・) テーブル構造を変更していいなら Name,Subject,Scoreからなるテーブルだと非常に簡単です。 NameをWhere条件に設定(抽出条件を名前) Scoreの集計を最大、最小
お礼
ありがとうございます。テーブル構造の見直しが必要かもしれませんね。考えてみます。
- AkiraND
- ベストアンサー率52% (10/19)
式ビルダーを使わない方法?です。 クエリーデザイン中に表示->集計をチェックします。 最大値、最小値を求めたいフィールドを出して、 集計欄を最大、最小として、クエリーを実行します。 これでどうでしょう?
補足
すみません。質問内容に不備がありましたことお詫びいたします。 フィールド毎の最大値、最小値ではなく、1つのレコードのうちの各フィールドの中から選び出すという手順です。 例えば、リストの状態でAさん、Bさん、Cさん(名前フィールド)それぞれの国語フィールド、算数フィールド、理科フィールドの点数のうち、科目に関係なくAさん、Bさん、Cさんそれぞれの最大値、最小値の点数を抽出したいのです。 すみませんが、宜しくお願い致します。
お礼
ありがとうございます。うまくいきました!でも科目数が多くなってくると式がみずらいですね。今後のことを考えて、別の方法(テーブル構造再考)もためしてみます。