アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
アクセス初心者です。宜しくお願い致します。

今回は3つのデータを比較し、値の大きさに順位をつけられるユーザー定義関数をつくれないかご相談です。
具体的には、製品テーブルのフィールド縦、横、高さを比較し、最長辺、短辺、最短辺を求めた結果をクエリで出力したいと考えてます。

等符号でちまちまやっていたのですがうまくいかず。。
解決できる関数をご存知の方がいらっしゃったらご教授ください。
宜しくお願い致します。

A 回答 (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/al …
    • good
    • 0
この回答へのお礼

ありがとうございました!!
うまくできました!
すっごく助かります!

参考URLも拝見しました。
これからは少しづつVBAもとりいれて行きたいと思います。

今後とも宜しくお願い致します。

お礼日時:2007/06/20 08:55

複数の値を返す関数は作れないので


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

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

お礼日時:2007/06/13 00:02

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