| 【各フィールドの最大値を取り出す】 |
| たくさんの数字の中から最大値を取り出す方法はいくつかあります。ひとつのフィールドの中の最大値を取り出すのは、集計クエリーをつかって「最大」を指定するか、Dmax関数などを使えば簡単にできます。しかし、横に並んだフィールドの中から最大値を取り出す場合は、どうしたらいいのでしょう。 ここでは、そのやり方を研究してみましょう。「数値1」「数値2」「数値3」のフィールドから最大値を取り出す方法です。 まず、クエリーに最大値というフィールドをつくり、最大値: Switch([数値1]>[数値2] And [数値1]>[数値3],[数値1],[数値2]>[数値3] And [数値2]>[数値1],[数値2],[数値3]>[数値1] And [数値3]>[数値2],[数値3])としてみましたが、これの欠点は最大値が2つあった場合、またどれかが空白(Null値)であった場合などに答えを返しません。 そこで、次のようなモジュールを作成して、クエリーに呼び出してみました。 ------------------------------------------------------------------ Public Function saidai(数値1, 数値2, 数値3) Select Case True Case Nz(数値1) >= Nz(数値2) And Nz(数値1) >= Nz(数値3) saidai = 数値1 Case Nz(数値2) >= Nz(数値1) And Nz(数値2) >= Nz(数値1) saidai = 数値2 Case Nz(数値3) >= Nz(数値1) And Nz(数値3) >= Nz(数値2) saidai = 数値3 Case Else Exit Function End Select End Function ------------------------------------------------------------------ これだと当初の部分の欠点をカバーできます。またクエリーにフィールドとして作成するときには、CLng関数を使って、最大値:CLng(saidai(数値1, 数値2, 数値3))のように長整数にすると扱いやすいでしょう。 |
| 【条件による分岐】 |
| 数値の条件によって別のフィールドに適合する言葉を表示させます。二通りの分岐です。 ここでは数値が100未満であれば「百未満です」100以上であれば「百以上です」というメッセージを数字の横に出すようにIIf関数で単純に分岐させています。 表示: IIf([数値]<100,"百未満です","百以上です") とフィールドに記入しています。しかし、この場合仮に数値がNull値(空白)だった場合でも「百以上です」という答えを返してしまいますね。そこで、VBで次のようなモジュールを作ってみましょう。 ------------------------------------------------------------------ Public Function bunki(数値) If 数値 >= 100 Then bunki = "百以上です" ElseIf 数値 < 100 Then bunki = "百未満です" Else bunki = "" End If End Function ------------------------------------------------------------------ つまり、もし(If) 変数(数値) が 式(>=100)だったなら(Then) 結果(bunki="百以上です") そうでなければもし(ElseIf)〜結果 そうでなければ(Else)〜結果 おしまい(End If) という式になっている訳です。 |
| このように条件分岐はIf〜Then〜Elseを使う方法とSelect Caseを使う方法があります。この二つを覚えておくだけでも応用範囲が広がってきます。 |