式の構文の概要

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Microsoft Access を使用する場合、多くの場合、データに直接含まれていない値を操作する必要があります。 たとえば、注文の売上税を計算したり、注文自体の合計値を計算したりすることが必要な場合があります。 これらの値は、式を使って計算できます。 式を使うには、適切な構文を使って式を記述します。 構文とは、式の単語と記号を正しく組み合わせるルールのセットです。 初めは、Access の式は少し読みにくいものです。 ただし、式の構文をよく理解し、少し練習すれば、もっと簡単にわかるようになります。

この記事の内容

式の概要

式は、組み込みまたはユーザー定義の関数、識別子、演算子、値、定数のいずれか、またはすべての組み合わせです。これらは、単一の値に評価されます。

式の構成要素

たとえば、次の式は一般的な構成要素を含んでいます。

=Sum([Purchase Price])*0.08 
  • Sum() は組み込み関数です
  • [Purchase Price] は識別子です
  • * は数学演算子です
  • 0.08 は定数です

この式をフォーム フッターまたはレポート フッターのテキスト ボックスで使用して、アイテム グループの売上税を計算することができます。

この例よりもさらに複雑な式や単純な式も作成できます。 たとえば、このブール式は、演算子と定数だけで構成されます。

>0

この式は、次の値を返します。

  • True が 0 より大きい数値と比較される場合。
  • False が 0 未満の数値と比較される場合。

この式をコントロールまたはテーブルのフィールドの入力規則プロパティで使用して、正の値のみが入力されるようにすることができます。 式は、計算の実行、文字列の操作、データのテストのために、さまざまな場所で使用されます。 テーブル、クエリ、フォーム、レポート、マクロはすべて、式を指定するプロパティを備えています。 たとえば、コントロールのコントロール ソース プロパティと既定値プロパティで式を使用することができます。 また、テーブルのフィールドの入力規則プロパティでも式を使用することができます。

ページの先頭へ

式の構成要素

式を作成するには、関数、演算子、定数、値を使って識別子を組み合わせます。 有効な式には、1 つ以上の関数または 1 つ以上の識別子が含まれている必要があり、定数や演算子を含めることもできます。 また、別の式の一部として式 (通常は関数の引数として) を使用することもできます。 これは、式の入れ子と呼ばれます。

  • 識別子 一般的な形式は、次のとおりです。

    [Collection name]![Object name].[Property name]
    

    式のコンテキストにおいて識別子を一意にするために十分な部分だけを指定する必要があります。 識別子が [Object name]形式になるのは珍しくありません。

  • 関数 一般的な形式は、次のとおりです。

    Function(argument, argument)
    

    通常、引数の 1 つは識別子または式です。 引数を必要としない関数もあります。 特定の関数を使用する前に、その関数の構文を確認します。 詳細については、「関数 (カテゴリ順)」を参照してください。

  • 演算子 一般的な形式は、次のとおりです。

    Identifier operator identifier
    

    この形式には例外があります。詳細については、「演算子」セクションを参照してください。

  • 定数 一般的な形式は、次のとおりです。

    Identifier comparison_operator constant
    
  • 値は、式の複数の場所で使用することができます。

ページの先頭へ

オブジェクト、コレクション、プロパティ

Access データベース内のすべてのテーブル、クエリ、フォーム、レポート、フィールドは、それぞれオブジェクトと呼ばれます。 すべてのオブジェクトには名前があります。 Microsoft Office Access Contacts テンプレートから作成されるデータベースの Contacts テーブルなどのように、既に名前が付いているオブジェクトもあります。 新しいオブジェクトを作成するときは、オブジェクトの名前を指定します。

特定の種類のオブジェクトのすべてのメンバーのセットは、コレクションと呼ばれます。 たとえば、データベース内のすべてのテーブルのセットはコレクションです。 データベースのコレクションのメンバーであるオブジェクトが、他のオブジェクトを含むコレクションになっていることもあります。 たとえば、テーブル オブジェクトはフィールド オブジェクトを含むコレクションです。

オブジェクトにはプロパティがあります。プロパティは、オブジェクトの特性を記述し、変更する方法を提供します。 たとえば、クエリ オブジェクトの既定のビュー プロパティでは、クエリを実行したときのクエリの表示方法が記述されているだけでなく、ユーザーが指定することもできます。

次の図は、コレクション、オブジェクト、プロパティの関係を示したものです。

コレクションとオブジェクトとプロパティの関係 3 A プロパティ


2 オブジェクト


1 コレクション

ページの先頭へ

識別子

式でオブジェクト、コレクション、プロパティを使うときは、識別子を使って要素を参照します。 識別子には、識別している要素の名前と、それが属する要素の名前が含まれます。 たとえば、フィールドの識別子には、フィールドの名前と、フィールドが属しているテーブルの名前が含まれます。 このような識別子の例を次に示します。

[Customers]![BirthDate]

場合によっては、要素の名前自体が識別子として機能します。 これは、作成している式のコンテキスト内で要素の名前が一意である場合に成り立ちます。 識別子の他の部分は、コンテキストによって暗黙的に示されます。 たとえば、テーブルを 1 つだけ使うクエリを設計する場合、テーブルのフィールド名はそのテーブル内で一意でなければならないため、フィールド名だけで識別子として機能します。 使っているテーブルが 1 つだけなので、フィールドを参照するためにクエリで使っている識別子では、テーブル名は暗黙的に指定されます。

それ以外の場合は、参照が機能するためには、識別子の各部分を明示的に指定する必要があります。 これは、式のコンテキスト内で識別子が一意ではない場合に当てはまります。 あいまいさがある場合は、識別子の十分な部分を明示的に指定して、識別子をコンテキスト内で一意にする必要があります。 たとえば、Products テーブルと Orders テーブルを使うクエリを設計していて、両方のテーブルに ProductID フィールドがあるものとします。 このような場合、どちらかの ProductID フィールドを参照するためにクエリで使う識別子は、フィールド名だけでなくテーブル名も含む必要があります。 次に例を示します。

[Products]![ProductID]

識別子演算子 識別子では、次の 3 つの演算子を使うことができます。

  • bang 演算子 (!)
  • ドット演算子 (.)
  • 角かっこ演算子 ([ ])

識別子の各部分を角かっこで囲み、感嘆符演算子またはドット演算子を使って各部分を結合します。 たとえば、Employees という名前のテーブルの Last Name という名前のフィールドの識別子は、 [Employees]![Last Name]として表すことができます。 感嘆符演算子は、後に続く部分が感嘆符演算子の前にあるコレクションに属するオブジェクトであることを、Access に伝えます。 この例では、[Last Name] は [Employees] コレクションに属するフィールド オブジェクトであり、[Employees] 自体はテーブル オブジェクトです。

厳密にいえば、識別子または部分識別子を囲む角かっこを常に記述する必要はありません。 識別子にスペースまたは他の特殊文字が含まれない場合は、式が読み取られるときに角かっこが自動的に追加されます。 ただし、ブラケットを自分で入力することをお勧めします。これは、エラーを回避するのに役立ち、また、式の特定の部分が識別子であるという視覚的な手掛かりとしても機能します。

ページの先頭へ

関数、演算子、定数、値

式を作成するには、識別子以上のものが必要です。何らかのアクションを実行する必要があります。 式の中でアクションを実行するには、関数、演算子、定数を使います。

関数

関数は、式の中で使うことができる手続きです。 Date などの一部の関数は、入力がなくても機能します。 ただし、ほとんどの関数では、引数と呼ばれる入力が必要です。

この記事の先頭にある例では、DatePart 関数は、2 つの引数を使用します。interval 引数は、値が "yyyy" で、日付引数は [Customers]![BirthDate] です。 DatePart 関数は、これら 2 つの引数 (区間と日付) は必須ですが、最大 4 つの引数を受け取ることができます。

式でよく使われる関数を次に示します。 その関数で使用する構文の詳細については、各関数のリンクをクリックしてください。

  • Date 関数は、システムの現在の日付を式に挿入するために使います。 Format 関数と共に使われるのが一般的であり、日時データを含むフィールドのフィールド識別子との組み合わせでも使われます。

    =Date()
    
  • DatePart 関数は、日付の一部 (通常はフィールド識別子から取得されますが、Date などの別の関数によって返される日付値) を決定または抽出するために使用されます。

    DatePart ( "yyyy", Date())
    
  • DateDiff 関数は、通常、フィールド識別子から取得された日付と Date 関数を使用して取得される日付の 2 つの日付の差を判断するために使用されます。

    =DateDiff("d", Now(), [Orders].[ReceiveBefore])-10 
    
  • Format 関数は、識別子や別の関数の結果に書式を適用するために使われます。

    Format([Date],"ww")=Format(Now(),"ww")-1 
    
  • IIf 関数は、式を true または false として評価し、式が true と評価された場合は 1 つの値を返し、式が false と評価される場合は別の値を返します。

    =IIf([CountryRegion]="Italy", "Italian", "Some other language")
    
  • InStr 関数は、別の文字列内の文字または文字列の位置を検索するために使用されます。 通常、検索対象の文字列はフィールド識別子から取得されます。

    InStr(1,[IPAddress],".")
    
  • LeftMidRight 関数は、左端の文字 (Left)、中間の特定の位置にある文字 (Mid)、または右端の文字 (Right) から始めて、文字列から文字を抽出するために使われます。 一般に、InStr 関数と共に使われます。 通常、これらの関数が文字を抽出する元となる文字列は、フィールド識別子から取得されます。

    Left([ProductName], 1)
    Right([AssetCode], 2) 
    Mid([Phone],2,3) 
    
    

関数の一覧については、「関数 (カテゴリ順)」をご覧ください。

演算子

演算子は、式の他の要素間の特定の算術関係または論理関係を示す単語または記号です。 次の演算子があります。

  • 正符号 (+) などの算術演算
  • 等号 (=) などの比較
  • 論理 ( Notなど)。
  • 連結 ( &など)。
  • Likeなど、特殊です

一般に、演算子は 2 つの識別子の間の関係を示すために使われます。 次の表では、Access の式で使うことができる演算子について説明します。

算術

2 つ以上の数値から 1 つの値を計算したり、数値の記号を正から負に変換したりするには、算術演算子を使います。

演算子 用途 使用例
+ 2 つの数値の和を求めます。 [小計]+[販売税]
- 2 つの数値の差を求めたり、数値の負の値を示したりします。 [価格]-[割引金額]
* 2 つの数値を乗算します。 [数量]*[単価]
/ 最初の数値を 2 番目の数値で除算します。 [合計]/[アイテム数]
\ 両方の数値を四捨五入したり、最初の数値を 2 番目の数値で除算して、結果を整数に切り捨てたりします。 [登録人数]\[部屋数]
Mod 最初の数値を 2 番目の数値で除算して、余りだけを返します。 [登録人数] Mod [部屋数]
^ 指数で累乗した数値に変換します。 Number ^ Exponent

比較

値を比較し、True、False、または Null (未知の値) の結果を返すには、比較演算子を使います。

演算子 用途
< 1 番目の値が 2 番目の値より小さいかどうかを判定します。
<= 1 番目の値が 2 番目の値以下かどうかを判定します。
> 1 番目の値が 2 番目の値より大きいかどうかを判定します。
>= 1 番目の値が 2 番目の値以上かどうかを判定します。
= 1 番目の値が 2 番目の値と等しいかどうかを判定します。
<> 1 番目の値が 2 番目の値と等しくないかどうかを判定します。

いずれの場合も、最初の値または 2 番目の値が Null場合、結果も Nullされます。 Nullは不明な値を表しているため、Nullとの比較の結果も不明です。

論理

論理演算子を使って 2 つの値を組み合わせると、結果として True、False、または Null が返されます。 論理演算子は、ブール演算子とも呼ばれます。

演算子 用途 説明
And Expr1 And Expr2 Expr1 と Expr2 が True の場合、True になります。
Or Expr1 Or Expr2 Expr1 または Expr2 のいずれかが True の場合、True になります。
Eqv Expr1 Eqv Expr2 Expr1 と Expr2 の両方が True か、Expr1 と Expr2 の両方が False の場合、True になります。
Not Not Expr Expr が True でない場合、True になります。
Xor Expr1 Xor Expr2 Expr1 または Expr2 のいずれか一方だけが True で、両方が True でない場合、True になります。

連結演算子

2 つのテキスト値を 1 つの文字列に組み合わせるには、連結演算子を使います。

演算子 用途 説明
& string1 & string2 2 つの文字列を組み合わせて、1 つの文字列を作成します。
+ string1 + string2 2 つの文字列を組み合わせて、1 つの文字列を作成し、Null 値を伝達します。

特殊演算子

特殊演算子は、次の表に示すように使います。

演算子 説明 詳細情報
Is Null or Is Not Null 値が Null か Null でないかを決定します。
Like "pattern" ワイルドカード演算子 ?*を使用して、文字列値と一致します。 Like 演算子
Between val1 And val2 数値またはデータ値が一定範囲内にあるかどうかを判別します。 Between...And 演算子
In(string1,string2...) 文字列値が、文字列値のセットの範囲内に含まれるかどうかを判別します。 In 演算子

定数

定数とは、変化せず、式の中で使うことができる、既知の値です。 Access にはよく使われる定数が 4 つあります。

  • True は、論理的に真であることを示します。
  • False は、論理的に false であるものを示します。
  • Null は、既知の値がないことを示します。
  • "" (empty string) は、空であることがわかっている値を示します。

定数は関数の引数として使うことができ、条件の一部として式で使うこともできます。 たとえば、クエリの列の条件の一部として空の文字列定数 ("") を使用して、その列のフィールド値を評価するには、条件として次のように入力します: <>""。 この例では、 <> は演算子であり、 "" は定数です。 一緒に使うと、適用対象の識別子を空の文字列と比較する必要があることを示します。 識別子の値が空の文字列以外である場合、式は True になります。

Null定数を使用する場合は注意してください。 ほとんどの場合、 Null を比較演算子と組み合わせて使用すると、エラーが発生します。 式内の値と Null を比較する場合は、 Is Null または Is Not Null 演算子を使用します。

式には、1,254 などの数値や "1 から 10 の間の数値を入力する。" などの文字列のリテラル値を使用することができます。必要に応じて、記号と小数点を含む一連の数字などの数値を使用することもできます。 符号がない場合は、正の値と見なされます。 負の値にするには、マイナス記号 (-) を含めます。 指数形式も使用できます。 そのためには、"E" または "e" と指数の記号を加えます (例: 1.0E-6)。

テキスト文字列を使用する場合は、Access で正しく解釈されるようにそれらを引用符で囲みます。 状況によっては、Access が自動的に引用符を付けてくれます。 たとえば、入力規則またはクエリ条件の式にテキストを入力すると、Access によって自動的にテキスト文字列が引用符で囲まれます。

たとえば、 Parisテキストを入力すると、式に "Paris" と表示されます。 式で実際に引用符で囲まれた文字列を生成する場合は、入れ子になった文字列を単一引用符 (') または 3 組の二重引用符 (") で囲みます。 たとえば、次の 2 つの式は同じです。

Forms![Contacts]![City]. DefaultValue = ' "Paris" ' 
Forms![Contacts]![City].DefaultValue = " " "Paris" " " 

日付/時刻の値を使用するには、値をポンド記号 (#) で囲みます。 たとえば #3-7-17#、#7-Mar-17#、#Mar-7-2017# はいずれも有効な日付/時刻の値です。 Access は # 文字で囲まれた有効な日付/時刻の値を見つけると、この値を自動的に日付/時刻データ型として扱います。

ページの先頭へ

Web データベースでは式の入れ子の制限は 65

深さ 65 レベルを超える入れ子になった式はブラウザーでは機能しないため、Access Web データベースでそのような式を使用しないでください。 エラー メッセージは表示されません。式は機能しません。

&ANDOR演算子を使用すると、Access クライアントに反映されない追加の入れ子レベルをサーバーに作成できます。 たとえば、式 "a" & "b" & "c" は式ビルダーでは入れ子になりませんが、SharePoint では concatenate.Db("a", concatenate.Db("b", "c") )になります。 この場合、1 レベルの入れ子が作成されます。 1 つの式で多数の連続する &AND、または OR 演算子を使用すると、サーバーの入れ子の制限である 65 を超える可能性があります。この時点で、式はブラウザーでは機能しません。

ページの先頭へ

式ビルダーを使用する式の概要式を作成する式の例