• 2015年8月12日

Access 関数 講座 Vol.6

Access 関数 講座 Vol.6

Access 関数 講座 Vol.6 424 283 パソコン生活サポート Pasonal

さて、今回はAccessの関数です。

難しいですよね~、関数。関数の種類はたくさんあり、また、書式に従って記述しないと正しく動作しません。しかし、使い方さえ分かっていれば、テクニックの幅が一段と広がります。必ず役に立つときがくるので、この機会に、ぜひ勉強しておきましょう!

この講座ではステップbyステップで簡単に進めることができます。

是非、ご参考に!

 

関連講座

  1. Access データベースの正規化 講座 Vol.1
  2. Access データ型の決定とフィールドの構築 講座 Vol.2
  3. Access ルックアップウィザード 講座 Vol.3
  4. Access リレーションシップ 講座 Vol.4
  5. Access クエリ作成 講座 Vol.5
  6. Access 関数の使い方 講座 Vol.6 ← ココ

 

オススメの参考書

Accessクエリ&フォーム&レポート辞典―2010/2007対応 (Office2010 Dictionary Series)

著者 日野間 佐登子
出版 秀和システム
発行日 2010年10月
総ページ数 498ページ
ダウンロードファイル あり

この本の良い所

簡単なクエリから、複雑な条件、関数を利用したクエリまで幅広く網羅されているオススメの参考書。約500ページ近いボリュームの3分の2以上が、クエリについて記載されています。ページの随所に、「操作のヒント」や「ワンポイント」といった記載がされており、ユーザーに配慮した作りといえます。さらに、ページの下部には関連項目があり、ページの索引がしやすくなっているのも特徴です。

何より、476ページ以降には「関数の構文一覧」が載っており、困った時に大いに役立つでしょう。サンプルデータがある点も○です。ある程度知識のある中級者以上ならば、概ね満足する内容となっているハズです。Accessの関数の参考書は、あまり多くないので、貴重な一冊といえます。

※Access 2010 / 2007対応となっていますが、Access2013でも問題なく使用できます。

 

【ちょっと残念な所】

本書は普通の参考書よりも、やや小さいため、文字が多少ちいさくなっています。人によっては読みにくいと感じることがあり、少しごちゃごちゃした印象を受けます。参考書というより、専門書に近いため、初級者には向いてないので注意です!

「これから関数を勉強してみようかな・・・」というレベルなら問題ないでしょう。

 

算術演算子

これから関数やクエリを使用していくにあたり、計算が必要になります。最も基本的な知識がこの算術演算子です。

ぜひ、覚えましょう。

演算子 目的 使い方
*(アスタリスク) 2つの数値を乗算する 10*5
/(スラッシュ) 最初の数値を2番目の数値で除算する 10 / 5
Mod 最初の数値を2番目の数値で除算し、余りを返す 10 Mod 3
+(プラス) 2つの数値を加算する 10 + 5
ー(マイナス) 2つの数値を減算する 10 ー 5

 

 

比較演算子

数値を比較するための演算子です。大切なのは、「含む」「含まない」の違いです。この違いをしっかり覚えておかないと、クエリの問い合わせ結果は全く違うものになります。

気を付けて使用しましょう!

演算子 目的 使い方
より小さい(含まない) [小計] < 1000
<= 以下(含む) [小計] <= 1000
より大きい(含まない) [小計] > 1000
>= 以上(含む) [小計] >= 1000
等しい [小計] = 1000
<> 等しくない [小計] <> 1000

 

 

論理演算子

中学生の時に習ったベン図と同じです。

  • 「A And B」はAとBの両方を含むレコード。
  • 「A or B」は、AかBのどちらか一方を含むレコード。
  • 「Not A」は、A以外のレコード。

といった感じになります。

ほかにも「Xor」や「Eqv」などがあるのですが、ほぼ使わないので割愛します。

演算子 使い方 説明
And >=#2015/08/09# And <=#2015/12/30# 2015/08/09~2015/12/30
Or 300 Or 500 数値が300または500のレ―コード
Not Not 500 数値が500以外のレ―コード

 

連結演算子

文字列と文字列をつなげる演算子です。通常は「&(アンパーサント)」を使用しますが、「+」でも利用可能です。[顧客名] + [単価]のように、「文字列 + 数値」をつなげることはできません。

(※基本的に実行エラーとなるが、数値を文字列に変換すれば可能)

演算子 使い方 説明
[住所1] & [住所2] 複数の文字列を連結させます(Null値は反映されない)
[住所1] + [住所2] 複数の文字列を連結させます(Null値を反映する)

 

Access 関数

ここでは、用途に応じた関数の一覧を表示しています。また、見やすいように、括弧は全角で表示しています。関数名、括弧、コンマ、ダブルコーテーションなどは全て半角で入力してください。

 

★「金額」や「単価」、「数量」などの<数値>に使えるもの

関数例 or 抽出条件 の記述例 実行結果と説明
In(500,1000) In(数値) 複数の場合はカンマ区切り
Avg([合計] ) [合計] の平均値を算出 / 集計関数
DAvg(”単価”,”M_商品”) 「M_商品」の「単価」の平均値を算出 / 定義域集計関数
Count([商品名]) [商品名]フィールドのデータ数をカウント / 集計関数
DCount(”[顧客名]” , “M_顧客”) [顧客名]フィールドのデータ数をカウント / 定義域集計関数
Sum([単価] * [数量] ) 単価 × 数量の合計 / 集計関数
Partition([金額] , 1 , 500 , 100) 1~100 101~200・・・ / データベース関数
IIf([金額] >= 10000 , “ポイント2倍” ) 金額が10,000円以上ならば、「ポイント2倍」と表示

 

集計関数と定義域集計関数の違い

集計関数はSQLステートメント(SQL文)に記述できますが、VBから直接呼び出すことはできません。定義域集計関数は、SQLステートメント(SQL文)に記述でき、VBから直接呼び出すこともできます。これらの関数は、列のデータの項目を<グループ化>した後、その列に対して使用する関数です。

よって、集計関数定義域集計関数も、<グループ集計>や<クロス集計>などで主に使用します。

集計関数の使い方

 

集計関数-SQLビュー

 

 

DAvg関数

DAvg(”単価”,”M_商品”)

「フィールド名」と「レコードセット名」は必ず指定する必要があります。レコード設定名は「テーブル名」でも、「クエリ名」でもOKです。

DAvg関数

 

DCount関数

「フィールド名」と「レコードセット名」は必ず指定する必要があります。レコード設定名は「テーブル名」でも、「クエリ名」でもOKです。

DCount関数

 

Partition関数

Partition(数値 , 最小値  , 最大値 , 間隔)

時間帯: Replace(Partition(Format([注文時刻],”h”),0,24,3),”:”,”~”) & “時”

上記の例では、Format関数で[注文時刻]を「時」のみに変換し、Partition関数で「時間帯」を設定しています。さらに、Replace関数を使用し、「:」を「~」に置き換えています。

Partition関数-実行

 

Partition関数の説明

 

 

IIf関数

比較的良く使うIIf関数。条件に一致したレコードに対して、何かを操作することができます。Yesの場合は「必須」ですが、Noの場合は「任意」となっています。

 

IIf関数

 

【記述例 1】

IIf([金額] >= 10000 , “ポイント2倍” , “ポイント無し” )

上記の例では、金額が「10,000円以上」であれば、「ポイント2倍」と表示します。そうでなければ(10,000円未満)、「ポイント無し」と表示します。

 

◆IIf関数で使える記述例

記述例 実行例
IIf([金額] >= 10000 , “ポイント2倍” ) 10,000円以上なら、ポイント2倍と表示
判定: IIf(Format([注文日],”yyyymd”)=2015618,”ラッキー”) 2015/6/18日なら、「ラッキー」と表示
判定: IIf([小計]<=10000,Format([小計]*1.05,”#,###”)) 金額が10,000円以下なら、5%の配送料上乗せ
IIf( Format([注文日],”yyyymd”)=2015618,”セール”) 注文日が2015/06/18なら、「セール」と判定させる

 

★「注文日」「時刻」などに使えるもの

関数例 or 抽出条件 の記述例 実行結果と説明
#2015/08/09# 2015/08/09のレコードを抽出 日付の前後を#で囲む
<#2015/08/09# 2015/08/09 以前のレコードを抽出
>=#2015/08/09# And <=#2015/12/30# 2015/08/09~2015/12/30のレコードを抽出
Between #2015/08/09# And #2015/12/30# 上記と同じレコードを抽出
Not Between #2015/08/09# And #2015/12/30# 2015/08/09~2015/12/30以外のレコードを抽出
Year( [注文日] ) = 2015 注文日が2015年のレコードを抽出
Month( [注文日] )= 7 注文日が7月のレコードを抽出
Date( [注文日] )= 21 注文日が21日のレコードを抽出
Format( [注文日] , “yyyy¥年” ) 注文日(2015 / 08 /12)を2015年に変換して表示
DatePart(”q” , [注文日]) = 1 注文日が第一四半期(1月~3月) のレコードを抽出
1(1月~3月) 2(4月~6月) 3(7月~9月) 4(10月~12月)
CDate(”平成27年08月09日”) 日付けと認識できる文字列を「2015/08/09」に変換する
DateDiff(”m” , #2010/01/01# , #2010/07/01#) 指定された日付から日付を引き、結果を返す(mは月を表す)
Datepart(”y” , #2010/7/15#) 196(1月1日から数えて196日)
DateSerial(2015,08,09) 2015/08/09 指定した数値から日付値を返す。
IIf( Format([注文日],”yyyymd”)=2015618,”セール”) 注文日が2015/06/18なら、「セール」と判定させる

 

Year関数

日付型のデータを操作する関数です。

「Year関数」の他に、「Month関数」、「Date関数」も同様です。

Year関数

 

【記述例 1】

Year( “2015 / 08 / 12” ) or Year( [注文日] )

上記の例では、日付けに設定されたものから年のみを抜出します。つまり、「2015」年のみを取得します。

 

【記述例 2】

Year (”2015 / 08 / 12”) & ”年”

上記の例では、抜出した「2015」に、文字列「年」を連結しています。

つまり、「2015年」となります。

 

Format関数

Format関数は、書式により、様々な形式に変換することができます。詳細は、書式文字一覧を参照してください。関数の中で最も頻繁に使用する関数です。

書式文字は全て覚えるのは困難なので、その都度、参照して使用しましょう。

Format関数

 

【記述例 1】

Format( [注文日] , “yyyy¥年” )

上記の例では、注文日(例えば 2015 / 08 /12)を「2015年」に変換して表示します。

 

◆書式文字一覧

書式文字 説明
: (コロン) 時刻の区切り文字を表示します。区切り記号は、Windows の地域の設定で指定します。
/ 日付の区切り記号を表示します。
c 定義済み書式の [General Date/日付 (標準)] と同じです。
d 日を 1 桁または 2 桁の数字で表示します (1 ~ 31)。
dd 日を 2 桁の数字で表示します (01 ~ 31)。
ddd 曜日を英語の省略形 3 文字で表示します (Sun ~ Sat)。
dddd 曜日を英語のフル スペルで表示します (Sunday ~ Saturday)。
ddddd 定義済み書式の [Short Date/日付 (S)] と同じです。
dddddd 定義済み書式の [Long Date/日付 (L)] と同じです。
w 曜日を表す数字を表示します (1 ~ 7)。
ww その日が 1 年のうちの何週目であるかを表示します (1 ~ 53)。
m 月を 1 桁または 2 桁の数字で表示します (1 ~ 12)。
mm 月を 2 桁の数字で表示します (01 ~ 12)。
mmm 月を英語の省略形 3 文字で表示します (Jan ~ Dec)。
mmmm 月を英語のフル スペルで表示します (January ~ December)。
oooo 月の名前を日本語で表示
q その日が属する四半期を表示します (1 ~ 4)。
g 年号の頭文字を表示(M、T、S、H)
gg 年号の先頭の頭文字を漢字で表示(明、大、昭、平)
ggg 年号を表示(明治、大正、昭和、平成)
e 年号に基づく和暦の年を表示。1桁の場合、先頭に0はつかない
ee 年号に基づく和暦の年を2桁の数値で表示。1桁の場合、先頭に0がつく
y 同じ年の 1 月 1 日からの日数を表示します (1 ~ 366)。
yy 西暦の下 2 桁を表示します (01 ~ 99)。
yyyy 西暦を 4 桁で表示します (0100 ~ 9999)。
h 時を 1 桁または 2 桁の数字で表示します (0 ~ 23)。
hh 時を 2 桁の数字で表示します (00 ~ 23)。
n 分を 1 桁または 2 桁の数字で表示します (0 ~ 59)。
nn 分を 2 桁の数字で表示します (00 ~ 59)。
s 秒を 1 桁または 2 桁の数字で表示します (0 ~ 59)。
ss 秒を 2 桁の数字で表示します (00 ~ 59)。
ttttt 定義済み書式の [Long Time/時刻 (L)] と同じです。
AM/PM 12 時間制の時刻に、大文字の “AM” または “PM” を付加して表示します。
am/pm 12 時間制の時刻に、小文字の “am” または “pm” を付加して表示します。
A/P 12 時間制の時刻に、大文字の “A” または “P” を付加して表示します。
a/p 12 時間制の時刻に、小文字の “a” または “p” を付加して表示します。
AMPM 12 時間制の時刻に、”午前”と”午後”の識別子を付加して表示します。

 

◆時間の変換でつかえる記述例

[注文時刻]には「08 : 05 : 01」(時:分:秒)の形式でデータが挿入されているとします。記述例は「クエリのフィールド」に記述します。

実行例は、「実際に表示される結果」となります。

Format関数 日付 実行例

 

記述例 実行例
時刻: Format([注文時刻] ,”hh : nn”) 20 : 05
時刻: Format([注文時刻],”h\時”) 8時(一桁表示)
時刻: Format([注文時刻],”hh\時”) 08時(二桁表示)
時刻: Format([注文時刻],”AM/PMhh\時”) PM08時(二桁表示)
時刻: Format([注文時刻],”hh””時(””am/pm)”) 08時(pm)
時刻: Format([注文時刻],”ampmhh\時”) 午後08時
時刻: Format([注文時刻],”hh\時nn\分”) 20 時 00 分

 

◆日付の変換で使える記述例

[注文日]には「2015 / 08 / 12」(年:月:日)の形式でデータが挿入されているとします。記述例は「クエリのフィールド」に記述します。

実行例は、「実際に表示される結果」となります。

Format関数 年月日 実行例

 

記述例 実行例
注文日付: Format([注文日],”yyyy\年”) 2015年
注文日付: Format([注文日],”yyyy\年mm\月”) 2015年08月
注文日付: Format([注文日],”yyyy\年mm\月dd\日”) 2015年08月12日
注文日付: Format([注文日],”yyyy\年mm\月dd(aaa)”) 2015年08月02(水)
注文日付: Format([注文日],”yyyy\年mm\月dd(aaaa)”) 2015年08月02(水曜日)
注文日付: Format([注文日],”gee””年 “”mm\月dd\日”) H27年 08月12日
注文日付: Format([注文日],”gggee””年 “”mm\月dd\日”) 平成27年 08月02日

 

★「商品名」や「顧客名」などの<文字列>に使えるもの

関数例 or 抽出条件 の記述例 説明
In(”消しゴム”,”鉛筆”) 「消しゴム」または「鉛筆」のレコードを抽出
Like “ペン*” 先頭に「ペン」が含まれるレコードを抽出
Like “*ペン*” 文字列の一部に「ペン」が含まれるレコードを抽出
Like “*ペン” 最後に「ペン」が含まれているレコードを抽出
IIf([小計] >= 10000,”優良顧客”) 小計が10,000円以上なら、「優良顧客」と表示させる
Left([住所] , 3) 「住所」の左端から3文字を取り出す
Right([住所] , 3) 「住所」の右端から3文字を取り出す
Mid([住所] , 3 , 3) 「住所」の左端から3番目の文字から3文字を取り出す
Replace([商品名] ,”ペン” , “ペンシル” ) 「ペン」を「ペンシル」に置き換える
Trim([顧客名]) 「顧客名」の前後にあるスペースを削除する
Nz([顧客名] , “名無し”) 「顧客名」がNullの場合、「名無し」に変換する
StrConv([商品名] , 16) ひらがなをカタカナに変換する

 

Mid関数

特定箇所の文字列を操作する関数です。

「Mid関数」の他に、「Left関数」「Right関数」なども同様です。

Mid関数

 

 

【記述例 1】

Mid(”岐阜県羽島市” , 4 , 3)

上記の例では、「岐阜県羽島市」の左端から4文字目を開始位置とし、3文字分を抜出します。文字列操作で割とよく使うことになるかもしれません。

 

Nz関数

Null値かどうかを判定するための関数です。

Nz関数

 

【記述例 1】

Nz( 「顧客名」 , “名無し” )

上記の例では、「顧客名」がNull値だった場合、「名無し」という文字列に変換して表示させます。

 

【記述例 2】

=Nz(DMax(“[顧客ID]”,”M_顧客”)+1,1)

上記の例では、主キーが<数値型>などの場合に、フォームの顧客IDなどのコントロールソースで使用します。通常、<数値型>の主キーは自動的にカウントアップできません。しかし、上記コードをコントロールソースに付与することで、自動的にカウントアップさせます。Dmax関数は、「M_顧客テーブル」の「顧客ID」の最大値を取得しています。

つまり、顧客IDの最大値を取得して、「+1」した値をフォームに表示させます。

また、Nz関数で、最大値を取得できなければ(データが一件もない場合)、「1」を表示させます。

 

Nz関数 自動カウント

 

 

Replace関数

文字列を特定の文字列に置き換える関数です。

Replace関数

 

【記述例 1】

Replace([商品名] ,”ペン” , “ペンシル” )

上記の例では、「商品名」に「ペン」が使われている文字列を、「ペンシル」に置き換えます。Replace関数は主に、クロス集計などで使うケースもあります。

 

【記述例 2】

Partition関数-実行

 

時間帯: Replace(Partition(Format([注文時刻],”h”),0,24,3),”:”,”~”) & “時”

上記の例は「入れ子」になっているため、少しわかりにくいかもしれません。本来なら「0:2時」となるフィールド名を、Replace関数で「0 ~ 2時」の形式に変換しています。

「:(セミコロン)」と「~」と置き換えているわけです。

 

StrConv関数

「大文字」 ⇔ 「小文字」、「ひらがな」 ⇔ 「カタカナ」などに変換する関数です。

変換方法のコードをしてすることで、実行結果が変わります。

StrConv関数

 

【記述例 1】

StrConv([顧客名] , 16 )

上記の例では、<ひらがな>の「顧客名」を、<カタカナ>の顧客名に変換します。

 

StrConv関数で使える記述例

記述例 実行例
氏名: StrConv([顧客名] , 1 ) 英字を大文字に変換
氏名: StrConv([顧客名] , 2 ) 英字を小文字に変換
氏名: StrConv([顧客名] , 3 ) 英字の単語の先頭を大文字に変換
氏名: StrConv([顧客名] , 4 ) 半角文字を全角文字に変換
氏名: StrConv([顧客名] , 8 ) 全角文字を半角文字に変換
氏名: StrConv([顧客名] , 16 ) ひらがなをカタカナに変換
氏名: StrConv([顧客名] , 32 ) カタカナをひらがなに変換
氏名: StrConv([顧客名] , 128 ) Unicocodeに変換