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

お忙しい中すいませんが、教えてください。

クエリーデザイン中で式ビルダを使って、最大値(最小値)を表示させるフィールドを作成する方法を検討しています。

例えば3つのレコードの中から最大値(最小値)を抽出して新しいフィールドに表示させたいのです。

簡単で良い方法があれば教えてください。

A 回答 (5件)

先ほど回答した者ですが、答えた式が間違ってました。


多分下記でよいと思います。
最大点数: Choose(IIf(([国語]>=[算数] And [国語]>=[理科]),1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])
    • good
    • 3
この回答へのお礼

ありがとうございます。うまくいきました!でも科目数が多くなってくると式がみずらいですね。今後のことを考えて、別の方法(テーブル構造再考)もためしてみます。

お礼日時:2000/12/21 12:10

自作関数を作ってもいいですね。



モジュールを新規作成して、下記の内容をコピー、貼り付けして、名前を付けて保存してください。(名前は何でも構いません。モジュールの内容が分からなくても大丈夫です。とにかく、コピー、貼り付けさえすれば動きます。)

で、クエリの[フィールド]の部分に、

=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
----切り取り線----
    • good
    • 1
この回答へのお礼

大変ありがとうございました。

とりあえずやってみます!

お礼日時:2000/12/21 08:46

先に回答された方のようにテーブル構造を変えたほうが汎用性はあると思いますし、またVBAを使えばより簡単に実現できると思います。


が、あえて補足の例だけのフィールドだと仮定した場合、次のように式ビルダ内に入力すれば科目に関係無く最大値の点数がでます。最小値は不等号を逆にすれば解決すると思いますので、省きます。
最大点数: Choose(IIf([国語]>=[算数],1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])
    • good
    • 0

ごめんなさい。

現状のテーブル構造では簡単に要求事項を解決する方法が見つけられませんでした。
(VBAで書いてもいいなら別ですが・・・)

テーブル構造を変更していいなら
Name,Subject,Scoreからなるテーブルだと非常に簡単です。
NameをWhere条件に設定(抽出条件を名前)
Scoreの集計を最大、最小
    • good
    • 0
この回答へのお礼

ありがとうございます。テーブル構造の見直しが必要かもしれませんね。考えてみます。

お礼日時:2000/12/21 12:11

式ビルダーを使わない方法?です。


クエリーデザイン中に表示->集計をチェックします。
最大値、最小値を求めたいフィールドを出して、
集計欄を最大、最小として、クエリーを実行します。

これでどうでしょう?

この回答への補足

すみません。質問内容に不備がありましたことお詫びいたします。

フィールド毎の最大値、最小値ではなく、1つのレコードのうちの各フィールドの中から選び出すという手順です。

例えば、リストの状態でAさん、Bさん、Cさん(名前フィールド)それぞれの国語フィールド、算数フィールド、理科フィールドの点数のうち、科目に関係なくAさん、Bさん、Cさんそれぞれの最大値、最小値の点数を抽出したいのです。

すみませんが、宜しくお願い致します。

補足日時:2000/12/20 12:49
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A