16

VBA for Access には、Max(x,y)2 つ以上の値の数学的最大値を見つける単純な関数がありません。私は、perl/php/ruby/python などの他の言語からのベース API に既にそのような関数を持っていることに慣れています。

私はそれができることを知っています: IIf(x > y, x,y). 他に利用可能なソリューションはありますか?

4

8 に答える 8

9

質問を解釈して読みます:

数値配列の最大値/最小値を返す関数を Access に実装するにはどうすればよいですか? これが私が使用するコードです(IIfとの類推により「iMax」と名付けられました、つまり、「Immediate If」/「Immediate Max」):

  Public Function iMax(ParamArray p()) As Variant
  ' Idea from Trevor Best in Usenet MessageID rib5dv45ko62adf2v0d1cot4kiu5t8mbdp@4ax.com
    Dim i As Long
    Dim v As Variant

    v = p(LBound(p))
    For i = LBound(p) + 1 To UBound(p)
      If v < p(i) Then
         v = p(i)
      End If
    Next
    iMax = v
  End Function

  Public Function iMin(ParamArray p()) As Variant
  ' Idea from Trevor Best in Usenet MessageID rib5dv45ko62adf2v0d1cot4kiu5t8mbdp@4ax.com
    Dim i As Long
    Dim v As Variant

    v = p(LBound(p))
    For i = LBound(p) + 1 To UBound(p)
      If v > p(i) Then
         v = p(i)
      End If
    Next
    iMin = v
  End Function

Access がそれを実装しない理由については、あまり一般的ではないように思えます。それはあまり「データベース」でもありません。ドメイン全体および行のセットで最大/最小を見つけるために必要なすべての関数を既に取得しています。また、実装するのも、必要なときに 1 回限りの比較としてコーディングするのもそれほど難しくありません。

たぶん、上記は誰かを助けるでしょう。

于 2011-07-10T02:12:01.030 に答える
1

彼らはおそらく、DMAXとDMIN、またはsql MAXを使用し、アクセス時にデータベースのみを操作すると考えていたのでしょうか。

理由についても興味があります。一時テーブルを作成し、テーブルにフォーム値を追加してから、テーブルでDMAXまたはMAXクエリを実行して結果を取得するのはやり過ぎのようです...

于 2009-08-31T02:26:03.130 に答える
1

これらに対処するためだけに小さな projMax() 関数を作成することが知られています。VBA が強化されることはおそらくありませんが、適切な Max (および Min) 関数が追加された場合に備えて、私の関数と競合することはありません。ところで、元のポスターはIIFを行うことを提案しています...それはうまくいきますが、私の関数では、通常、nullが関数を台無しにするのを防ぐために、いくつかのNz()をスローします。

于 2009-08-31T10:12:23.770 に答える
1

どちらの関数も Null に問題があります。これで良くなると思います。

Public Function iMin(ParamArray p()) As Variant
  Dim vVal As Variant, vMinVal As Variant

  vMinVal = Null
  For Each vVal In p
    If Not IsNull(vVal) And (IsNull(vMinVal) Or (vVal < vMinVal)) Then _
      vMinVal = vVal
  Next

  iMin = vMinVal
End Function
于 2016-03-22T08:53:12.460 に答える