dポイントプレゼントキャンペーン実施中!

1)Accessのクエリーで、1レコード内の複数フィールドの数値の最大値を表示させるため、「mymax」関数を使用しました。
その結果が数値型でなくテキスト型で表示されてしまうため、分析に不都合で
2)テーブル作成クエリーにしてテーブルにしてから、テーブルデザインで数値型に変更し、
3)それを抽出クエリーで並べ替えなどデータ分析に使用しています。

以上のように、3段階の手順をふまず、
1)の時点で、最大値を、数値型で吐き出させることはできますでしょうか。

バージョンはACCESS97です。

どうぞ、よろしくお願いします。

A 回答 (3件)

MyMax関数というのはAccessの組み込み関数にはないものですので、


ユーザー関数として前任者(当該DB開発者)が作成されたものと思います。

戻り値が常に数値に変換できる文字列なのでしたら、MyMax関数に対して
CDbl関数(→小数が含まれることがある場合)やCLng関数(→小数が含まれ
ない場合)で変換してやれば、クエリ1段階で対応できると思います。

クエリのデザインビューで、以下のように変更してみて下さい:

現在:
式1: MyMax(○○,○○)

変更後:
式1: CDbl(MyMax(○○,○○))


・・・以上です。

上記の方法なら、MyMax関数の内容には触れなくても対応できます。

もし、MyMax関数が「A1」と「A24」や「B1」のような「文字&数字」の
大小(?)の評価にまで対応しているようなら、不用意に関数の戻り値の
型を変えたりすると、同じ関数を使用している他の部分で不具合が
発生することも考えられますので、とりあえず今回は上記のような
方法で対応されるのが無難と思います。
(但し、今回作成しようとされているクエリの結果の中に、「A1」のような
 データが入っている場合は、エラーが返されてしまいますので、
 その点は気に留めておいて下さい)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
確認をしたところ、確かに前任者の自作関数でした。
どうりでヘルプなど見ても出てこないわけですね。

この方法は、わたしにもすぐできそうです。
さっそく試してみます。
留意点なども、おしえてくださり助かります。

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

お礼日時:2008/07/02 07:53

MyMax関数を示していただくことは可能ですか?



iif()の組み合わせだと思いますが、clng()などで数値化できそうに思います。

この回答への補足

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

ようやく、モジュールを見つけてきました。

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

となっていました。

補足が遅れてしまいました。
まだ、ご回答いただけるようなら嬉しいです。
ありがとうございました。

補足日時:2008/07/02 07:38
    • good
    • 1

MyMax関数が自作関数であるならば、戻り値がStringで宣言されている?



戻り値をLongなりIntegerなり、必要となさっている型で宣言すればOKなのでは?

この回答への補足

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

補足日時:2008/07/02 07:43
    • good
    • 0
この回答へのお礼

さっそくのアドバイスありがとうございます。

残念ながら自作関数ではなく、クエリーのデザイン画面で、フィールドに書き込んだだけの式です。

モジュールの知識もありません。
勉強すべきとは思うのですが…。

お礼日時:2008/06/26 23:03

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