• ベストアンサー

ACCESSのMax(Min)関数使用方法

お忙しい中すいませんが、教えてください。 クエリーデザイン中で式ビルダを使って、最大値(最小値)を表示させるフィールドを作成する方法を検討しています。 例えば3つのレコードの中から最大値(最小値)を抽出して新しいフィールドに表示させたいのです。 簡単で良い方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#420
noname#420
回答No.4

先ほど回答した者ですが、答えた式が間違ってました。 多分下記でよいと思います。 最大点数: Choose(IIf(([国語]>=[算数] And [国語]>=[理科]),1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])

kitaosa
質問者

お礼

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

その他の回答 (4)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.5

自作関数を作ってもいいですね。 モジュールを新規作成して、下記の内容をコピー、貼り付けして、名前を付けて保存してください。(名前は何でも構いません。モジュールの内容が分からなくても大丈夫です。とにかく、コピー、貼り付けさえすれば動きます。) で、クエリの[フィールド]の部分に、 =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 ----切り取り線----

kitaosa
質問者

お礼

大変ありがとうございました。 とりあえずやってみます!

noname#420
noname#420
回答No.3

先に回答された方のようにテーブル構造を変えたほうが汎用性はあると思いますし、またVBAを使えばより簡単に実現できると思います。 が、あえて補足の例だけのフィールドだと仮定した場合、次のように式ビルダ内に入力すれば科目に関係無く最大値の点数がでます。最小値は不等号を逆にすれば解決すると思いますので、省きます。 最大点数: Choose(IIf([国語]>=[算数],1,IIf([算数]>=[理科],2,IIf([理科]>=[国語],3,1))),[国語],[算数],[理科])

  • AkiraND
  • ベストアンサー率52% (10/19)
回答No.2

ごめんなさい。現状のテーブル構造では簡単に要求事項を解決する方法が見つけられませんでした。 (VBAで書いてもいいなら別ですが・・・) テーブル構造を変更していいなら Name,Subject,Scoreからなるテーブルだと非常に簡単です。 NameをWhere条件に設定(抽出条件を名前) Scoreの集計を最大、最小

kitaosa
質問者

お礼

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

  • AkiraND
  • ベストアンサー率52% (10/19)
回答No.1

式ビルダーを使わない方法?です。 クエリーデザイン中に表示->集計をチェックします。 最大値、最小値を求めたいフィールドを出して、 集計欄を最大、最小として、クエリーを実行します。 これでどうでしょう?

kitaosa
質問者

補足

すみません。質問内容に不備がありましたことお詫びいたします。 フィールド毎の最大値、最小値ではなく、1つのレコードのうちの各フィールドの中から選び出すという手順です。 例えば、リストの状態でAさん、Bさん、Cさん(名前フィールド)それぞれの国語フィールド、算数フィールド、理科フィールドの点数のうち、科目に関係なくAさん、Bさん、Cさんそれぞれの最大値、最小値の点数を抽出したいのです。 すみませんが、宜しくお願い致します。

関連するQ&A

  • Accessのクエリーで、mymax関数を使ったら

    1)Accessのクエリーで、1レコード内の複数フィールドの数値の最大値を表示させるため、「mymax」関数を使用しました。 その結果が数値型でなくテキスト型で表示されてしまうため、分析に不都合で 2)テーブル作成クエリーにしてテーブルにしてから、テーブルデザインで数値型に変更し、 3)それを抽出クエリーで並べ替えなどデータ分析に使用しています。 以上のように、3段階の手順をふまず、 1)の時点で、最大値を、数値型で吐き出させることはできますでしょうか。 バージョンはACCESS97です。 どうぞ、よろしくお願いします。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • ACCESS2003:2番目に大きい値を1レコードのみ抽出

    氏名、ポイントと2つのフィールドをもつテーブル1をもとにクエリ1を作成し、クエリデザインでDMax("[ポイント]","クエリ1","[ポイント]<=" & DMax("[ポイント]","クエリ1"))といった2番目に大きい値(1番目の値が2つ以上ある場合はその値で可)を抽出する式をつくりました。抽出条件に任意の氏名を指定した結果、2番目に大きい値は抽出できましたが、ポイントのデータ数ぶんだけ複数のレコードを表示してしまいます。できれば別のクエリを作成したりせずに、1つのレコードのみ表示させたいのですがどのようにしたらよいか分からず困っております。よろしくお願いします。

  • Accessの選択クエリから最終日付のデータのみ抽出したい

    Access2002を使用しています。 初心者ですのでよろしくお願いします。 アクセスで選択クエリを作成しました。 このクエリのフィールドは「日付」と「金額」です。 この選択クエリから最終日付のレコードのみを抽出する選択クエリを作製したいのですが、何か方法はありませんでしょうか? 最終日付に対応する金額を抽出したいイメージです。 なお、レコードの作製順番は、必ずしも日付順とはなっていません。(例えば、7/2付でレコードを作成後、7/1付で次のレコードを作製している場合もあります。) 一つの方法として、選択クエリのデザインフォームで集計ボタンを押して日付フィールドの集計項目(グループ化)で「最後」を選択しているのですが、「金額」が全レコード表示されてしまいます。 また、同様にして、金額フィールドの集計項目で「最後」を選択すると、最後に作成したレコードが表示されてしまいます。(上記の例では、7/2ではなく7/1のレコードが表示されます。7/2に対応する金額を抽出したいのですが…) アドバイスよろしくお願いします。

  • アクセス、クエリでの式作成方法

    テーブル内の2つのフィールドの値を、クエリの式ビルダを使って結合(アンパサンドで表示したい)のですが、式の作成方法がわかりません。 どのように式を立てたらよいのでしょうか?

  • ACCESSのクエリの関数について

    ACCESSのクエリの関数について 列の標準偏差はテーブルの集計で出来ますが、レコードの標準偏差を求めたいと思います。 クエリの関数で、StDev(expr)のexprにレコードの[テーブルの名前]![フィールド名前]を 入れる時には","で続けるのか? この方法では式が作成出来ません。

  • Accessクエリ

    お世話になります。 Access初学者です。 グループごとに日付が最大のレコードを、それぞれ1件抽出するクエリを作成したいと思っています。 IDを表示させなければできるのですが、IDを表示させると全レコードが抽出されます。どのようにすればいいのでしょうか? よろしくお願いします。

  • アクセス クエリ

    アクセス クエリの抽出について教えて下さい。例えば、1つのクエリの中に数値のフィールドが5つ作成してあり、それぞれ違うフィールドの抽出条件をしています。それぞれの条件を入れてしまうと5つのフィールド条件全てに合ったものしか抽出できません。 5つのフィールドのうち、どれでも1つ一致したら抽出できるようにしたいのですが良い方法を教えて下さい。宜しくお願いします。

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • min について

    こんにちは 宜しくお願いします。 ID 商品名 コードNO という3個のフィールドがあります。コードNOは172636,383636,172828,288388などランダムな数値です。 コードNOが100000~200000までをwhere条件で抽出し、 上の場合だと(172636,172828)この中から更に最小値 (172636)を求めコードNOが最小値であるレコードを表示したいのですがお願いします。 以下のコードでは駄目でした。 select min(codeno) from uder_tbl where codeno between 100000 and 200000;

    • ベストアンサー
    • MySQL

専門家に質問してみよう