• ベストアンサー

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

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

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

MyMax関数というのはAccessの組み込み関数にはないものですので、 ユーザー関数として前任者(当該DB開発者)が作成されたものと思います。 戻り値が常に数値に変換できる文字列なのでしたら、MyMax関数に対して CDbl関数(→小数が含まれることがある場合)やCLng関数(→小数が含まれ ない場合)で変換してやれば、クエリ1段階で対応できると思います。 クエリのデザインビューで、以下のように変更してみて下さい: 現在: 式1: MyMax(○○,○○) 変更後: 式1: CDbl(MyMax(○○,○○)) ・・・以上です。 上記の方法なら、MyMax関数の内容には触れなくても対応できます。 もし、MyMax関数が「A1」と「A24」や「B1」のような「文字&数字」の 大小(?)の評価にまで対応しているようなら、不用意に関数の戻り値の 型を変えたりすると、同じ関数を使用している他の部分で不具合が 発生することも考えられますので、とりあえず今回は上記のような 方法で対応されるのが無難と思います。 (但し、今回作成しようとされているクエリの結果の中に、「A1」のような  データが入っている場合は、エラーが返されてしまいますので、  その点は気に留めておいて下さい)

taxi12345
質問者

お礼

ご回答ありがとうございます。 確認をしたところ、確かに前任者の自作関数でした。 どうりでヘルプなど見ても出てこないわけですね。 この方法は、わたしにもすぐできそうです。 さっそく試してみます。 留意点なども、おしえてくださり助かります。 ありがとうございました。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

MyMax関数を示していただくことは可能ですか? iif()の組み合わせだと思いますが、clng()などで数値化できそうに思います。

taxi12345
質問者

補足

回答ありがとうございます。 ようやく、モジュールを見つけてきました。 Option Compare Database Function myMax(ParamArray a()) Dim i myMax = -9999 For i = 0 To UBound(a()) If a(i) > myMax Then myMax = a(i) Next End Function となっていました。 補足が遅れてしまいました。 まだ、ご回答いただけるようなら嬉しいです。 ありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

MyMax関数が自作関数であるならば、戻り値がStringで宣言されている? 戻り値をLongなりIntegerなり、必要となさっている型で宣言すればOKなのでは?

taxi12345
質問者

お礼

さっそくのアドバイスありがとうございます。 残念ながら自作関数ではなく、クエリーのデザイン画面で、フィールドに書き込んだだけの式です。 モジュールの知識もありません。 勉強すべきとは思うのですが…。

taxi12345
質問者

補足

お礼を申し上げたあと、調べてみたら、前任者の自作関数だったようです。これを機会にすこしモジュールの勉強してみます。戻り値とか。ありがとうございました。

関連するQ&A

  • ACCESS クエリで”1”でないものを選択するには?

    ACCESS2003で排他選択("1"でないものを選択) をしたいのですが あるフィールドに”1”かブランクが入っていて ”1”以外のものを選択したいのですが クエリのデザイン画面で ------------------------- フィールド テーブル 並べ替え 表示 抽出条件  <> "1" ------------------------- 抽出条件に = "1" を入れると、"1"のレコードのみ 選択できます やりたいのは "1"以外のものを選択したいのです そこで 抽出条件に<> "1"といれると レコードがゼロ件になります また、Not "1"とか <> "1"、とか、Not = "1" と入れてみても、抽出結果はゼロ件になります 原因を教えてください

  • Access不一致クエリについて

    不一致クエリを使用して二つのテーブルにある両方のテーブルに存在しないレコードを抽出しようとしています。 各テーブルに数値が入っていてその数値に違いがある分に関しては不一致クエリによって表示されるのですが、一つのテーブルのレコードは”0”でもう一つのテーブルには ”10”と入っているレコードの抽出ができません。 初歩的な事で申し訳ないのですが、お知恵をかしてください。

  • ACCESSクエリーの抽出条件について

    OS WIN7 ACCESS 2007使用です。 クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。 コード 1 2 3 4 5 ・ ・ このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。 抽出条件はどのように書けばよいのでしょうか? いろいろ試したのですが、うまくいきません。 どなたかお助け下さい。

  • Accessのクエリでレコード追加

    Access初心者です。 バージョンは2010をつかっています。 テーブルを14テーブル含み、フィールド数が100ほどある選択クエリを作りました。 抽出条件などは設定していません。 このクエリで新しくデータを入力、レコードを追加し、上書き保存した後クエリを閉じます。 それからまた、そのクエリを開くとレコードが追加されていません。 テーブルにはその入力したデータは追加されています。 このクエリにもそのデータを追加表示させるためにはどうすればいいですか? 表示されない原因はなんなのかお教えお願いします。

  • ACCESSのクエリ:抽出条件で型が一致しません

    ACCESSでクエリを作ったのですが 実行すると、 「抽出条件で型が一致しません」のエラーが出ます 問題となっているヶ所は テーブルのフィールド定義がバイナリーになっています そして、クエリで   フィールド   テーブル   並べ替え   表示   抽出条件   または となっていますが、 この抽出条件に、1、を入れました テキスト型なら、"1" 数値系型なら、1、でいいのか、と思ったのですが バイナリ型は別の表現があるのでしょうか よろしくお願いします

  • ACCESS【更新クエリの中断ができない】

    ACCESS初心者です。質問がわかりにくかったらすみません。 ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。 クエリを実行すると、 ”更新クエリを実行すると、テーブルのデータが更新されます” と、メッセージが表示され”はい”で次に進むと ”*件のレコードが更新されます。”と正確な件数が表示されます。 ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、 レコードは更新されてしまいます。何故でしょうか?教えてください。 ______________________ フィールド:     型名 テーブル:      データ統合 レコードの更新:  Replace([型名],","," ") 抽出条件:     Like"*,*"

  • accessクエリの抽出条件

    access初心者です。 フィールド:「年」 数値型 フィールド:「月」 数値型 があり クエリの抽出条件に 年:2001 月:11 でクエリが実行できます。 これを当月分をクエリ実行できるように 年:year(date()) 月:month(date()) のように入れて当月のレコードを抽出したいのですが 「式に未定義関数dateがあります」というメッセージが出ます。どこが間違っているか助言をいただけると助かります。

  • Accessのクエリーのデザインを印刷したい

    Accessでクエリーをデザインビューで開くと、 四角い枠で囲まれて ・フィールド名 ・元のテーブル名 ・並べ替え ・表示/非表示 ・抽出条件 等が表示されますがこのままを印刷できないですか? SQLという形だとデータベース解析とかいうメニューで印刷できるのですが……枠に囲まれたクエリーのデザインビューのまま印刷したい。

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

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

  • Accessのクエリで、CStr関数を使った項目のグループ化と抽出のエラー

    アクセスで「TEST1」という名のクエリでCStr関数を使って数値を文字型にしている「項目1」という名のフィールドがあります。(他にもフィールドはあります) 別のクエリ(「TEST2」)で、「TEST1」クエリを使って、「項目1」フィールドをグループ化し、さらに抽出条件に『 "1" 』と入れて実行したところ、 『集計関数の一部として指定された式 '[TEST1].項目1="1"' を含んでいないクエリを実行しようとしました。』 とメッセージが出て実行できませんでした。 ◎ 数値を文字型にしたものをグループ化しさらに抽出条件で絞り込みたいのですが、どうしたらいいのでしょうか? 「TEST1」クエリをテーブルにしないで実行したいのですが。。。 わかる方がいらっしゃったら、教えてください。よろしくお願いします。

専門家に質問してみよう