Q.こんなとき、何使えばいいの? 関数逆引き集!

Access 関数使うなら (Amazon リンク)

関数のヘルプって、関数の名前がわからなきゃぁ使えませんよね。
でも、「関数の名前知ってるなら苦労しない」んですよ実際問題。

ここでは、関数の名前と機能の概要しか説明していませんので、使用方法などの詳細は必ずヘルプで確認してください

・関数の一覧って、どっかにないの?

関数 (カテゴリ順)
必ずしも、一覧で見れるから使いやすいとは限らないという。

・日付の表示される形がマシンによって違います。
・数値を前ゼロづめで表示したいんですが・・・
・日付・時刻型の項目で、時刻だけを表示したいんです。
・通貨型の項目でないと、¥マーク表示ってできないですか?

「書式」プロパティで対応できない、表示形式の編集には「Format 関数」を使いましょう。
さまざまなデータ型をさまざまな表示形式で現すことが出来ます。すごくよく使います。

・検索条件として入力した商品コードに対応する名前を商品マスタから表示させたいんですが、非連結コントロールなので結合による表示は利用できません。
・同じ伝票 NO ですでに入力してある値を初期値で表示しておきたいんですが、結合ではできませんよね?

こんなときには、「DLookUp 関数」を使いましょう。
あるテーブル(クエリーでも可)に条件を与えて、最初にHITしたレコード(1レコードだけ対象になるのが理想ですが該当レコードが複数件でもOK)の指定した項目(指定できるのは1つだけ)の値を返す関数です。
使いようによってはとても便利ですが、クエリー内で使うと対象件数によっては使い物にならないぐらい遅くなってしまいますので避けたほうが無難です。
フォームやレポートなどでとてもよく使われます。なぼは、わざわざレコードセットを作らなくてもデータを参照できるのでちょっとデータの整合性を確認したい時などにお手軽に使ってしまいます。

・処理する前に該当件数を把握したいんですが・・
・レポートのグループフッターに、そのグループ内の表示件数を出したいんですが。
・フォームヘッダーに、サブフォームの合計値を出したい。

「DCount関数」「Count関数」「DSum関数」「Sum関数」を使いましょう。
「Sum」は、ある項目の合計値をとる関数、「Count」は件数を数える関数です。
頭に「D」がつく関数は、任意のテーブル(またはクエリー)の任意の条件に該当する件数、または任意の項目の合計値を返します。処理中のフォームやレポートではまったく参照していないテーブル・クエリーの件数も数えることができます。
「D」がつかない関数は、主にフォーム・レポートのフッター・ヘッダーで使います。グループヘッダー・フッターで使えば、そのグループ内の該当件数、ある項目のグループ内での合計値を表示できます。ページヘッダー・フッターでも利用できます。
「D」がつかない関数で処理できる場合は、「D」がつかない方を利用したほうが高速に処理できます。

こういった関数を「集合関数」と呼ぶ場合がありますが、集合関数には他に最大値を求める Max 関数最小値を求める Min 関数などがあります。

・絶対値って表示できます?
・三角関数の計算は?
・小数点以下の切り捨ては?Logの計算は?乱数は?

関数 (カテゴリ順) の、「数学」カテゴリかな。

・計算結果が桁あふれするので、データ型を変えたいんです。
・テーブルでは長整数で定義したんですが、割り算すると誤差が出ます。通貨型に変更しないと駄目ですか?

データ型を変更する関数は、頭に「C」がつきます。
「Ccur 関数」「CDbl 関数」「CDate 関数」等。
ただし、浮動小数点型を整数型に変える「CInt 関数」は、Int 関数とは小数部のまるめ処理が若干違っています
小数点以下を切り捨てたい場合には「CInt 関数」を使わずに「Int 関数」を使うようにしてください。

・日にちと日にちの間を求めるには、どうしたらいいんですか?

「DateDiff 関数」を使います。間隔を年数で求めたり、日数で求めたり、週で求めたりできます。
その他、「何ヶ月後」「何年後」「何日後」を求める関数は「DateAdd 関数」、年・月・日だけを取り出す関数は「DatePart 関数」(Format関数、Year・Month・Day関数でもOK)等、日付に関する関数はいろいろ用意されています。

・英語大文字が混じっているので、すべて小文字にしたいんですが・・
・半角文字が入っていたら全角に変更したい。
・かたかなをひらがなに変更するなんて、できませんよね?

「StrConv 関数」を使いましょう。
ただし、漢字で入力されているものをひらがなに変更する、なんてことは当然できません。

・先頭の5文字だけ取り出すことはできそうだけど、15文字目から2文字なんてできる?
・同じ文字を指定した数だけ繰り返したいんだけど、その回数が場合によって変わるんです。

「Left関数」で、文字列の左から指定した文字数だけ取り出すことができます。
「Right関数」で、文字列の右から指定した文字数だけ取り出すことができます。
「Mid関数」で、文字列の指定した場所から指定した文字数だけ取り出すことができます。
「String関数」で、指定した文字を指定した数だけ繰り返せます。”-“を、ずらーーーーっと定数で持ちたい時とか、ありますよね?そういう時によく使います。まぁ”-” 255 個とか直入力しても別にいいですけど(^_^;)

・名称を入力したとき、中にカンマが使われてたらエラーにしたいんです。

「Instr 関数」で見つけることができます。上記「Mid 関数」「Instr 関数」をうまく組み合わせると、任意の文字列内の任意の文字を別の文字(文字数は違ってもOK)に置き換える、なんてモジュールも作れますよ。
(Access2000 からは、文字列の置き換えができる Replace 関数ができました)

・全角・半角の混在をチェックしたいんですが・・

文字列操作関数の動作の違い をよくご覧になってください。… とかいって、全角半角の混在をチェックするのにはもはや役に立たないっすね。

いまの時代ですと、全角半角の混在を「チェックして防止する」のではなく、「全角半角混じってんのがマジいならもういっそ全部全角にしちゃえばよくね?」という発想のほうが幸せになる気がします。

・「月末日」を求める関数ってありますか?

DateAdd(“d”,-1,Format(DateAdd(“m”,1,[年月日]),”yyyy/mm”)&”/01″)
で、どうですか?

・「四捨五入」する関数ってありますか?切り捨ては?切り上げは?

昔は無かったので自作したんですが、いまは Round 関数 でいけるぽです。

応用編として、五捨六入や六捨七入にも対応したい人のために、自作するにはどうするかを。

0.5 を足して、Int 関数で整数にしましょう。小数点以下第何位を四捨五入したい、というなら 10 を掛けて小数点以下1位で計算後、またもとの位に戻しましょう。(つまり 10 で割っていく)これを応用すれば、五捨六入だろうが六捨七入だろうが思いのままですね。
また、Format関数を使って四捨五入するという方法もありますが、Format 関数の戻り値は String 属性の Variant 型(Format$ 関数は String 型)なので、結果を計算に使いたいときには不向きかも・・・?
例:Format([単価], “##,##0.0”) 小数点第2位で四捨五入した結果が返されます。
[単価]の値が 128.05 だった場合 128.1 が返ります。