Microsoft Access では、数値計算の実行、テキストの結合または抽出、データの検証などさまざまな作業で式を使用できます。 ここでは、どのようなときに式を使用するのか、式の構成要素は何か、Microsoft Excel の数式との比較など、式に関する概要を説明します。
この記事の内容
式の概要
Access に何かをしてもらいたい場合は、Access の言語で指示する必要があります。 たとえば、"Customers テーブルの BirthDate フィールドを参照して、顧客の生年月日の年を取得する" ように Access に指示したいものとします。 この場合の式は、次のように記述できます。
DatePart("yyyy",[Customers]![BirthDate])
この式は、DatePart 関数と 2 つの引数の値 "yyyy" と [Customers]![BirthDate] で構成されます。
この式を詳しく見ていきましょう。
1 DatePart は、日付を調べて特定の部分を返す関数です。 この場合、最初の 2 つの引数が使用されます。
2 この場合は、"yyyy" によって Access で日付の年の部分のみを返すように指示しています。
3 この場合は、[Customers]![BirthDate] によって Access に Customers テーブルの BirthDate フィールドの日付を参照するように指示しています。
式の使用方法
式は次のように使用できます。
-
データ内に直接存在しない値を計算する。 テーブルやクエリのフィールドで値を計算することも、フォームやレポートのコントロールで値を計算することもできます。
-
テーブル フィールドの既定値、またはフォームやレポート上のコントロールの既定値を設定する。 これらの既定値はテーブル、フォーム、レポートを開くたびに表示されます。
-
入力規則を作成し、ユーザーがフィールドやコントロールにどのような値を入力できるかを制御します。
-
クエリの抽出条件を定義して、希望のサブセットに結果を制限します。
値の計算
Access で式を使用する最も一般的な方法の 1 つは、そのままの状態ではデータに存在しない値を計算することです。 そのような計算の結果であるテーブル列またはクエリは、集計フィールドと呼ばれます。 集計フィールドは、2 つ以上のテーブルのフィールドを組み合わせて作成できます。 たとえば、多くのテーブルでは名と姓が別のフィールドに格納されています。 それらの名と姓を結合して、1 つのフィールドに表示する場合、テーブルまたはクエリに集計フィールドを作成します。
[FirstName] & " " & [LastName].
この場合、アンパサンド (&) が、 [FirstName] フィールドの値、空白文字 (引用符で囲まれたスペース)、 [LastName] フィールドの値を結合します。
既定値の定義
Access で式を使用して、テーブルのフィールドの既定値やコントロールの既定値を設定することもできます。 たとえば、日付フィールドの既定値を現在の日付に設定するには、そのフィールドの [既定値] プロパティ ボックスに次のように入力します。
Date()
入力規則の作成
さらに、式を使用して入力規則を設定することができます。 たとえば、コントロールまたはテーブル フィールドで入力規則を使用し、現在の日付以降の日付の入力を強制することができます。 この場合、[入力規則] プロパティ ボックスに値を次のように入力します。
>= Date()
クエリの抽出条件の定義
最後になりますが、式を使用して、クエリの条件を設定することもできます。 たとえば、特定の期間に注文を受けて出荷した製品の売上を確認したいとします。 日付範囲を定義する条件を入力すると、条件に一致する行のみが返されます。 たとえば、式は次のようになります。
Between #1/1/2017# And #12/31/2017#
クエリに条件を追加してからクエリを実行すると、指定した日付に一致する値だけが返されます。
式の例
次の表に、Access 式のサンプルとそれらの一般的な使い方を示します。
式 |
用途 |
---|---|
=[RequiredDate]-[ShippedDate] |
レポート上の 2 つのテキスト ボックス コントロール (RequiredDate と ShippedDate という名前) の日付値の差異を計算します。 |
Date() |
日付/時刻テーブル フィールドの既定値を現在の日付に設定します。 |
Between #1/1/2017# And #12/31/2017# |
クエリ内の日付/時刻フィールドの条件を指定します。 |
=[Orders Subform].Form!OrderSubtotal |
Orders フォーム上の Orders サブフォームにある OrderSubtotal コントロールの値を返します。 |
>0 |
テーブル内の数値フィールドの入力規則を設定します。— ユーザーは 0 より大きい値を入力する必要があります。 |
等号 (=) 演算子で始まる式と、そうではない式があります。 フォームやレポート上のコントロールの値を計算するときには、式の先頭に = 演算子を付けます。 それ以外の場合、たとえば、クエリ内、またはフィールドやコントロールの DefaultValue プロパティや ValidationRule プロパティ内に式を入力するときは、テーブル内のテキスト フィールドに式を追加する場合を除いて、 = 演算子は使用しません。 時には、たとえば式をクエリに追加すると、Access は = 演算子を自動的に削除します。
式の構成要素
式は、使用可能な複数の構成要素で構成され、単独で、または組み合わせて使用して、結果を得ることができます。 これらの構成要素は次のとおりです。
-
識別子 フォームまたはレポートのテーブルのフィールド名やコントロール名、フィールドまたはコントロールのプロパティ。
-
演算子 たとえば、+ (プラス) または - (マイナス)。
-
関数 たとえば、SUM または AVG。
-
定数 テキスト文字列や、式によって計算されるものではない数値などの変更のない値。
-
値 " などの文字列、または 1、254 などの操作で使用される数値。
以降のセクションでは、これらのコンポーネントについてさらに詳しく説明します。
識別子
識別子はフィールド、プロパティ、またはコントロールの名前です。 式の中の識別子は、フィールド、プロパティ、コントロールに関連付けられられている値を参照するために使用します。 たとえば、式 =[RequiredDate]-[ShippedDate] について考えてみましょう。 この式は、ShippedDate フィールドまたはコントロールの値を RequiredDate フィールドまたはコントロールの値から減算します。 この式では、RequiredDate と ShippedDate の両方が識別子の働きをします。
演算子
Access ではさまざまな演算子がサポートされています。一般的な算術演算子として、+、-、* (乗算) および / (除算) などがあります。 値を比較するのための < (より小さい)、> (より大きい) などの比較演算子、テキストを連結する (結び付ける) ための & および + などのテキスト演算子、true または false の値を決めるための Not や And などの論理演算子のほか、他の Access 固有の演算子も使用できます。
関数
関数とは、式の中で使用できる組込み手続です。 関数は、値の計算、テキストや日付の操作、データの要約などさまざまな操作で使用します。 たとえばよく使われる関数の 1 つが DATE で、これは現在の日付を返します。 DATE 関数は、テーブル内のフィールドの既定値を設定する式など、さまざまな形で使用できます。 この例では、誰かが新しいレコードを追加するたびに、フィールドの値が現在の日付に既定で設定されます。
引数が必要な関数もあります。 引数とは、関数に渡される入力値です。 関数に複数の引数が必要な場合、引数をコンマで区切ります。 たとえば、次の例の DATE 関数について見てみましょう。
=Format(Date(),"mmmm d, yyyy")
この例では、2 つの引数が使用されています。
-
最初の引数は、現在の日付を返す Date() 関数です。 引数がない場合でも、関数のかっこは入れる必要があります。
-
最初の引数とコンマで区切られた 2 番目の引数 "mmmm d, yyyy" は、返された日付値を書式設定する方法を FORMAT 関数に指示するテキスト文字列を指定します。 テキスト文字列は、引用符で囲む必要があります。
この式では、ある関数から返された値を、別の関数の引数として、入れ子にできることの多い例も示しています。 この場合、 Date() が引数の役割を果たします。
定数
定数とは、Access が実行されるときに変わらない値です。 式では、True、False、および Null の定数がよく使用されます。
値
式の中で数字 1,254 や文字列 "Enter a number between 1 and 10." などのリテラル値を使用できます。 一連の数字である数値 (必要に応じて符号や小数点を含む) も使用できます。
テキスト文字列値を使用する場合は、Access で正しく解釈されるようにそれらを引用符で囲みます。 状況によっては、Access が自動的に引用符を付けてくれます。 たとえば、入力規則またはクエリ条件の式にテキストを入力すると、Access によって自動的にテキスト文字列が引用符で囲まれます。
日付/時刻の値を使用するには、値をシャープ記号 (#) で囲みます。 たとえば、#3-7-17#, #7-Mar-17# と #Mar-7-2017# はいずれも有効な日付/時刻の値です。 Access は # 文字で囲まれた有効な日付/時刻の値を見つけると、この値を自動的に日付/時刻データ型として扱います。
Access の式と Excel の数式の比較
Access の式と Excel の数式は、どちらも同じような要素を使って結果を算出するという点で似ています。 Excel の数式と Access の式はどちらも次の要素を 1 つ以上含んでいます。
-
識別子 Excel では、識別子は A1、B3:C6、Sheet2!C32 のように、ブック内の個々のセルまたはセルの範囲の名前です。 Access では、識別子は、テーブルのフィールドの名前 ([Contacts]![First Name] など)、フォームやレポート上のコントロールの名前 (Forms![Task List]![Description] など)、またはそれらのフィールドやコントロールのプロパティの名前 ( Forms![Task List]![Description].ColumnWidth など) です。
-
演算子 Access と Excel のどちらも、演算子は値を比較したりデータについて単純な計算を実行するために使用します。 たとえば + (プラス) や - (マイナス) があります。
-
関数 Access と Excel のどちらも、関数と引数は演算子を使用するだけではできないタスクを実行するために使用します。たとえば、フィールドで値の平均を検出したり、計算結果を通貨形式に変換したりすることができます。 関数の例として、SUM や STDEV などがあります。 引数は、関数に情報を提供する値です。 Access と Excel のどちらでも多数の関数を選べますが、同じような関数でもプログラムによって名前が異なることがあります。 たとえば、Excel の AVERAGE 関数は Access の AVG 関数に相当します。
-
定数 Access でも Excel でも、定数は変化しない値です。つまり、式で計算されないテキスト文字列や数字です。
-
値 Access でも Excel でも、値は同じように使用されます。
Access の式で使用する演算子と定数は Excel の数式で使用するものと似ていますが、Access の式で使用する識別子と関数は違います。 Excel の数式が通常はワークシートのセル内でのみ使用されるのに対し、Access の式は、次のように Access 内の多くの場面でさまざまな目的に使用されます。
-
フォームやレポート上に演算コントロールを作成する
-
テーブルやクエリ内に集計フィールドを作成する
-
クエリで条件として使用する
-
フィールドやフォーム上のコントロールに入力されるデータを検証する
-
レポート内のデータをグループ化する
Access 式または Excel 数式を使用すると、算術演算子を使って数値や日時を計算できます。 たとえば、顧客に対する割引価格を計算するには、Excel 数式 =C2*(1-D2) または Access 式 = [Unit Price]*(1-[Discount]) を使用します。
Access 式または Excel 数式を使用すると、文字列演算子を使って文字列を結合や分割したり、その他の操作を行うこともできます。 たとえば名と姓を一緒にして 1 つの文字列にする場合には、Excel 数式 =D3 & " " & D4 または Access 式 = [First Name] & " " & [Last Name] を使用できます。