- ベストアンサー
Accessのクエリーで、mymax関数を使ったら
1)Accessのクエリーで、1レコード内の複数フィールドの数値の最大値を表示させるため、「mymax」関数を使用しました。 その結果が数値型でなくテキスト型で表示されてしまうため、分析に不都合で 2)テーブル作成クエリーにしてテーブルにしてから、テーブルデザインで数値型に変更し、 3)それを抽出クエリーで並べ替えなどデータ分析に使用しています。 以上のように、3段階の手順をふまず、 1)の時点で、最大値を、数値型で吐き出させることはできますでしょうか。 バージョンはACCESS97です。 どうぞ、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MyMax関数というのはAccessの組み込み関数にはないものですので、 ユーザー関数として前任者(当該DB開発者)が作成されたものと思います。 戻り値が常に数値に変換できる文字列なのでしたら、MyMax関数に対して CDbl関数(→小数が含まれることがある場合)やCLng関数(→小数が含まれ ない場合)で変換してやれば、クエリ1段階で対応できると思います。 クエリのデザインビューで、以下のように変更してみて下さい: 現在: 式1: MyMax(○○,○○) 変更後: 式1: CDbl(MyMax(○○,○○)) ・・・以上です。 上記の方法なら、MyMax関数の内容には触れなくても対応できます。 もし、MyMax関数が「A1」と「A24」や「B1」のような「文字&数字」の 大小(?)の評価にまで対応しているようなら、不用意に関数の戻り値の 型を変えたりすると、同じ関数を使用している他の部分で不具合が 発生することも考えられますので、とりあえず今回は上記のような 方法で対応されるのが無難と思います。 (但し、今回作成しようとされているクエリの結果の中に、「A1」のような データが入っている場合は、エラーが返されてしまいますので、 その点は気に留めておいて下さい)
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
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 となっていました。 補足が遅れてしまいました。 まだ、ご回答いただけるようなら嬉しいです。 ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
MyMax関数が自作関数であるならば、戻り値がStringで宣言されている? 戻り値をLongなりIntegerなり、必要となさっている型で宣言すればOKなのでは?
お礼
さっそくのアドバイスありがとうございます。 残念ながら自作関数ではなく、クエリーのデザイン画面で、フィールドに書き込んだだけの式です。 モジュールの知識もありません。 勉強すべきとは思うのですが…。
補足
お礼を申し上げたあと、調べてみたら、前任者の自作関数だったようです。これを機会にすこしモジュールの勉強してみます。戻り値とか。ありがとうございました。
お礼
ご回答ありがとうございます。 確認をしたところ、確かに前任者の自作関数でした。 どうりでヘルプなど見ても出てこないわけですね。 この方法は、わたしにもすぐできそうです。 さっそく試してみます。 留意点なども、おしえてくださり助かります。 ありがとうございました。