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

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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで、コード実行中に、フォームのテキストボックスの値をデータソースとしたクエリーフィールドの値を取得したい

Accessにおいて、frmMENUというフォームを作成し、txtYearというテキストボックスを配置しました。"式1: [Forms]![frmMENU]![txtYear]"というフィールドを含むクエリーを作成しました。
フォームを起動し、txtYearに値を入れた後、そのクエリーを開くと、"式1"には正しく値が入っているのですが、コードの実行中(例えばボタンクリック処理の間など)にクエリを開くと何も入っていません。このとき、クエリーに対するSQL(select 式1 from クエリ1)を実行しようとすると「パラメータが少なすぎます。1を指定してください。」というエラーが発生してしまいます。コード実行中にクエリーから"式1"の値を取得することはできないのでしょうか?

Aベストアンサー

補足に対してアドバイスします。

>テキストボックスの値を一旦テーブルに書き込む処理を入れ、そのテーブルを参照するクエリーを作成して対処しようかと思い始めています。

テーブルに書きこまなくてもクエリの定義を直接変更することが出来ます。
CurrentDb.QueryDefs("クエリ名称").SQL プロパティーに直接SQLを設定してみてください。

Q最大値と最小値を自動記録したい

DDE通信によりリアルタイムの株価データを取得し、
エクセルに株価を表示できる状態になっています。
(株価が変動すると自動的にセルの値が変わる)

これを使い2銘柄間の差をあるセルに表示しているのですが、
1日の中における差の最大値と最小値を他のセルに記録し、
値が更新されるのに伴い随時置き換えたいと思っています。

例)
日立280円
東芝260円
の場合は2銘柄間の差は20円。

この値が変化して最大値(最小値)を更新したら置き換え。
それ以外はそれまでの最大値(最小値)の値をセルに保持する、
という感じで記録していきたいのですが実現可能でしょうか?

(イメージ)
(A1セル=2銘柄間の差)
(B1セル=最大値)
(C1セル=最小値)

A1セルの値の変化
20(B1セルもC1セルも20)
23(B1セルを23に更新)
25(B1セルを25に更新)
22
21
15(C1セルを15に更新)
18
24
26(B1セルを26に更新)
20

当方の環境は
エクセル2000
OSはwinXP
DDE通信は楽天証券のリアルタイムスプレッドシート
を使用しています。

これがエクセルで可能なのかどうかもわからないのですが、
もし方法をおわかりの方がいましたらよろしくお願い致します。

DDE通信によりリアルタイムの株価データを取得し、
エクセルに株価を表示できる状態になっています。
(株価が変動すると自動的にセルの値が変わる)

これを使い2銘柄間の差をあるセルに表示しているのですが、
1日の中における差の最大値と最小値を他のセルに記録し、
値が更新されるのに伴い随時置き換えたいと思っています。

例)
日立280円
東芝260円
の場合は2銘柄間の差は20円。

この値が変化して最大値(最小値)を更新したら置き換え。
それ以外はそれまでの最大値(最小値)の値をセ...続きを読む

Aベストアンサー

ちょっとだけ変更します。

'****ここから
Option Explicit
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
On Error GoTo error_shori
With ThisWorkbook.Sheets("Sheet1")
.Range("A1") = Abs(日立のセル - 東芝のセル)
If Not IsNumeric(.Range("B1")) Or .Range("B1") = "" Then
''''''数字以外か、ブランクのとき・・・
.Range("B1") = .Range("A1")
.Range("C1") = .Range("A1")
End If
If .Range("B1") < .Range("A1") Then .Range("B1") = .Range("A1")
If .Range("C1") > .Range("A1") Then .Range("C1") = .Range("A1")
End With
On Error GoTo 0
Application.EnableEvents = True
Exit Sub
error_shori:
MsgBox "エラーが発生しました。Err.Number..." & Err.Number
On Error GoTo 0
Application.EnableEvents = True
End Sub
'****ここまで

ちょっとだけ変更します。

'****ここから
Option Explicit
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
On Error GoTo error_shori
With ThisWorkbook.Sheets("Sheet1")
.Range("A1") = Abs(日立のセル - 東芝のセル)
If Not IsNumeric(.Range("B1")) Or .Range("B1") = "" Then
''''''数字以外か、ブランクのとき・・・
.Range("B1") = .Range("A1")
.Range("C1") = .Range("A1")
End If
If .Range("B1") < .Range("A1") Then .Range("B1") = .Range("A1")
If .Range("...続きを読む

Qクエリーであるフィールドの値が空欄の時には空欄を表示したい時の方法

選択クエリーにて売上高フィールドと土日祝フィールドがあります。
いま、新しく「計算用」フィールドをもうけました。
これには、売上高フィールドにデータが入っていて、かつ、土日祝フィールドの数値が1ときには1を、そうじゃない時には2を、そして、売上高フィールドに数値が入ってないときには空欄を表示したいと思います。

これを、
計算用: IIf(Len([売上高])>=1,IIf([土日祝]=1,1,2),"")


と記述したら、プロパティにて、書式がブランクで表示され、これにより、フォームなどにもいろんなところに影響が出てしまいました。

単純に、売上高フィールドが空欄ならばという表現を記述したかったのですが、「空欄」という記述方法が分からなかったのでこのような方法をとりました。

しかしながら、結果として、こんなおかしな現象が生じてしまいました。

どなたか解決方法をお願いいたします。

Aベストアンサー

> そのやり方でもプロパティの書式が出てこないのです。

テキスト型と認識されるために、書式プロパティが使えないということかな?

> IIF(IsNull([売上高]),"",IIF([土日祝]=1,1,2))

IIF(IsNull([売上高]),Null,IIF([土日祝]=1,1,2))
とか
IIF(IsNull([売上高]),0,IIF([土日祝]=1,1,2))
のようにしたら、どうでしょうか?

Q別シートのフィールドから同一値検索、隣フィールド値取得の関数を教えてください。

■シート1
----------------
□分類□名 称□
----------------
|果物|りんご|
----------------
|果物|バナナ|
----------------
|果物|みかん|
----------------
|野菜|トマト|
----------------
|野菜|セロリ|
----------------
|野菜|レタス|
----------------

■シート2
----------------
□名 称□分類□
----------------
|りんご|  |
----------------
|トマト|  |
----------------
|バナナ|  |
----------------
|セロリ|  |
----------------
|みかん|  |
----------------
|レタス|  |
----------------

シート2の名称にてシート1の名称を検索して、シート2に分類を取得することは可能でしょうか。
よろしくお願いします。

■シート1
----------------
□分類□名 称□
----------------
|果物|りんご|
----------------
|果物|バナナ|
----------------
|果物|みかん|
----------------
|野菜|トマト|
----------------
|野菜|セロリ|
----------------
|野菜|レタス|
----------------

■シート2
----------------
□名 称□分類□
----------------
|りんご|  |
----------------
|トマト|  |
----------------
|バナナ|  |
----------------
|セロリ|  |
---------...続きを読む

Aベストアンサー

シート2のB2セルに次の式を入力して下方にオートフィルドラッグします。
=IF(OR(A2="",COUNTIF(Sheet1!B:B,A2)=0),"",INDEX(Sheet1!A:B,MATCH(A2,Sheet1!B:B,0),1))

QExcel ピボットテーブル平均・最大・最小値

いつも回答ありがとうございます。

今学校のテキストで今ボットテーブルをやっています。

そこで、平均と最大値、最小値を出したいのですが、
何度やっても#DIV/0!とエラーが出てしまいます。

どのようにやったらエラーが出ずに行えるのでしょうか。

答えは、
    平均/カロリー  最大値/カロリー2  最小値/カロリー3
甘口 142.6666667    198 114
辛口 223.5 254 204
中辛 258.4 470 132
総計 217.8333333 470 114

になるらしいです。


どなたかわかる方がいらっしゃいましたら、教えて頂けないでしょうか。

いつも回答ありがとうございます。

今学校のテキストで今ボットテーブルをやっています。

そこで、平均と最大値、最小値を出したいのですが、
何度やっても#DIV/0!とエラーが出てしまいます。

どのようにやったらエラーが出ずに行えるのでしょうか。

答えは、
    平均/カロリー  最大値/カロリー2  最小値/カロリー3
甘口 142.6666667    198 114
辛口 223.5 254 204
中辛 25...続きを読む

Aベストアンサー

こんばんは!

#DIV/0 というエラーは「0」で割ったときのエラーです。
#DIV/0とエラーが出るのは平均値の時だけで、最大値・最小値の場合は「0」と表示されますか?

もしそうであれば、kcalの列が文字列になっているものと思われます。
(内容量の列も同様かと・・・)

どうしても「g」や「kcal」と表示したい場合は
列すべてを範囲指定 → 右クリック → セルの表示形式 → ユーザー定義から 「G/標準」となっている欄に
0kcal
のように入力して、セルには数値のみを入力してみてください。

これで解決しないでしょうか?

他の原因ならごめんなさいね。m(_ _)m


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

人気Q&Aランキング

おすすめ情報