• ベストアンサー

アクセス関数 3つの値を比較する

お世話になります。 アクセス初心者です。宜しくお願い致します。 今回は3つのデータを比較し、値の大きさに順位をつけられるユーザー定義関数をつくれないかご相談です。 具体的には、製品テーブルのフィールド縦、横、高さを比較し、最長辺、短辺、最短辺を求めた結果をクエリで出力したいと考えてます。 等符号でちまちまやっていたのですがうまくいかず。。 解決できる関数をご存知の方がいらっしゃったらご教授ください。 宜しくお願い致します。

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

  • ベストアンサー
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

閉じてないので、メモ代わりで申し訳ありません 参考URLのクイックソートのJAVAを単純にVBAへ書き換えた代物です Function usOrder(GetOrder As Long, ParamArray usData() As Variant) As Variant Dim AryMin As Integer Dim AryMax As Integer Dim usAry As Variant AryMin = LBound(usData) AryMax = UBound(usData) usAry = usData Call JaQuickSort(AryMin, AryMax, usAry) usOrder = usAry(GetOrder - 1) End Function Sub JaQuickSort(AryMin As Integer, AryMax As Integer, usAry As Variant) Dim R As Integer Dim L As Integer Dim K As Integer Dim S As Variant Dim X As Variant If AryMin >= AryMax Then Exit Sub K = AryMin + 1 Do While K <= AryMax If usAry(AryMin) <> usAry(K) Then Exit Do K = K + 1 Loop If K > AryMax Then Exit Sub If usAry(AryMin) >= usAry(K) Then X = usAry(AryMin) Else X = usAry(K) End If L = AryMin R = AryMax Do While L <= R Do While L <= AryMax If usAry(L) >= X Then Exit Do L = L + 1 Loop Do While R >= AryMin If usAry(R) < X Then Exit Do R = R - 1 Loop If L > R Then Exit Do S = usAry(L) usAry(L) = usAry(R) usAry(R) = S L = L + 1 R = R - 1 Loop Call JaQuickSort(AryMin, L - 1, usAry) Call JaQuickSort(L, AryMax, usAry) End Sub で、モジュールの所に記載すれば、関数として使用できます 基本的に3つの値を並べるのであれば、ここまでする必要があるか? 疑問では、ありますが・・・とりあえずね 最長辺 : usOrder(3, [縦], [横], [高さ]) 短辺 : usOrder(2, [縦], [横], [高さ]) 最短辺 : usOrder(1, [縦], [横], [高さ]) で、出てきます

参考URL:
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/
tochou4848
質問者

お礼

ありがとうございました!! うまくできました! すっごく助かります! 参考URLも拝見しました。 これからは少しづつVBAもとりいれて行きたいと思います。 今後とも宜しくお願い致します。

その他の回答 (1)

回答No.1

複数の値を返す関数は作れないので 3つのユーザ定義関数、Get1st(),Get2nd(),Get3rd()を作成します。 各ユーザ定義関数は3つの引数を取り、それぞれ最大値,中間値,最小値を返す関数です。 各ユーザ定義関数の中から、3つの値をソートする関数を呼べば作業効率が良くなります。

tochou4848
質問者

お礼

早速ありがとうございます! ただ、アクセス初心者でしてVBAですとか関数の作り方はいまいちよくわかってません。 いま少しご教示ください。 また、初心者でこの関数を作成するのが難しいということであれば、あきらめて等符号で全パターン作成してみます。

関連するQ&A