Access Tips

常用対数(あるいは任意の底を持つ対数)を求める

ExcelのLOG関数の場合は対数の底を引数として指定できますがAccessのLog関数では指定できず、常に底はe(≒2.718)となります。 そこで、底の変換公式(Logab=Logcb/Logca)を用いて常用対数(あるいは任意の底を持つ対数)を求めることとなります。 なお、真数…

月の最初の日曜日(または任意の曜日)の日付を求める

指定した月の最初の日曜日(またはその他の曜日)の日付を求めます。なお、「最後」の方を求める方法についてはこちらをご覧ください。 月をどう指定するかを決める必要がありますが、ここでは右のようなテーブルを用いて、それぞれの日付が属する月の最初の…

月の最後の日曜日(あるいは任意の曜日)を求める

指定した月の最後の日曜日(またはその他の曜日)の日付を求めます。「最初」の方を求める方法についてはこちらをご覧ください。 月をどう指定するかを決める必要がありますが、ここでは右のようなテーブルを用いて、それぞれの日付が属する月の最後の日曜日…

生年月日から干支を求める

これは割と単純ですので式のみで説明します。 生年月日(「生年月日」列に記録されているものとします)から干支を求める式の例として Choose(Year([生年月日]) Mod 12+1,"さる","とり","いぬ","いのしし","ねずみ","うし","とら","うさぎ","たつ","へび","…

数値の切り上げをする

ExcelですとROUNDUP関数がありますがAccessには切り上げの関数はありませんので、別の関数を用いた対応策を示します。 例として右のようなテーブルを用いるものします。なお、ここではマイナスの数値は考慮しません。 クエリを作成して次のような列を設けま…

DateAdd関数による月末の日付から1月後(または1月前)の日付の扱い

「1か月=30日」といった特別な取り決めがない限り、通常は5月1日の1月後は6月1日ですし、7月1日の1月前は6月1日です。対応する「日」がある限りその「日」に変わりはありません。DateAdd関数を用いて計算した場合も、当然このような結果となります。 では、5…

クエリで抽出条件としてNullを指定する

Nullであること、つまり値が何も入力されていないことを条件としてデータを抽出する方法です。Excelの場合は何も入力されていないセルと空文字列(="")の区別があいまいなところがあります(ISBLANK関数で区別できますが)が、Accessではそうはいきませんの…

文字列中にある特定の文字(または文字列)の数を数える

例えば「なまむぎなまごめなまたまご」の中に「な」という文字を探して、いくつあるかを数えるという問題です。Excelでもよくある問いの一つですが、その答えも同様のものとなります。 早速の答えですが、文字列(「文章」という列に記録されているものとし…

回文を判定する

「なつまでまつな」といった回文を判定する方法です。実生活で用いることはほとんどないと思いますが、StrReverse関数を利用できる数少ない機会といえます;-o-) なお例文として右のようなテーブルを用います。 クエリデザインです。 次のような列を設けます…

レポートでレコードごとに連番をふる

AccessにはExcelでいうROW関数のようなものがありませんので、レコードの順番に沿って連番を表示するということは基本的にできません。 しかし、レポートでは数字の累計を表示する機能があるため、これを使って連番をふることができます。 なお、レポートの…

苗字と名前(姓と名)を分割する

スペース入りの「氏名」列から苗字と名前(姓と名)をそれぞれ取り出す方法です。 例として右のようなテーブルを用います。 スペースは全角と半角が混在していることに注意してください。 クエリのデザインビューです。 次のような列を設けます。 姓: Left([…

サンプルデータベース(ノースウインド2007)を利用する

Accessのさまざまな操作方法を学習していても、実際にAccessが業務用システムとして稼働する様子はなかなかイメージできないかもしれません。 そこで架空の商社Northwindの取引記録をテーマとしたサンプルデータベースが用意されています。 なお、サンプルと…

未入力のフィールドに代わりの文字列を表示する

よくWEB上のフォームで郵便番号欄に「000-0000」、コメント欄に「感想を255字以内でお書きください」などと表示されていて、入力しようとするとそれが消えるというのがあります。 要するに値がNullのフィールドにおける代替表示ですが、Accessのテーブルやフ…

値がNullであることを条件とする条件付き書式の設定

「値がNull」という条件での条件付き書式の設定についてです。 右の画像は「身長」というテキストボックスに設定している例ですが、編集ウインドウの左側のコンボボックスで「式」を選択し、式として「IsNull([身長])=True」と記入すればOKです。 「フィール…

郵便番号から住所を(住所から郵便番号を)自動入力する

郵便番号を入力するとそれに対応した住所が、また、住所を入力するとそれに対応した郵便番号が自動的に入力される便利機能です。 例として右のようなテーブル(「郵便」列に郵便番号を、「所在地」に住所を記録します)を用います。 「郵便」列の「住所入力…

全角文字のみ入力させる

漢字ひらがな数字が混在するようなフィールドであっても全角文字のみ受け付けたいという場合がありますが、その方法についてです。 右の画像は「所在地」列にて設定する例です。入力規則に以下のように記入しています。 LenB(StrConv([所在地],128))=LenB([…

グループ化や並べ替えのキーとして関数を使う

通常、グループ化や並べ替えのキーとしてフィールドそのものを指定しますが、関数の戻り値を使用することもできます。 ただし、クエリで関数を使ってキーとなる値を用意していればいいだけのことですので、必要性は低いです。 例としてグループ化のキーとし…

Null値に対する連鎖更新と連鎖削除の挙動について

参照整合性等の制約については通常の場合、主キーと外部キーの間で設定しますが、重複を許さないインデックスを適用した列とその外部キー(と言っていいかわかりませんが)の間でも設定可能です。しかし、重複を許さないインデックスの場合は主キーと違って…

縦書きで表示する

特にヒネリはありません。 文字列を縦書きで表示する方法です。フォームとレポートのみで利用できるプロパティあり、テーブルやクエリに同様の機能はありません。 レポートのテキストボックスを縦書き表示してみます。 プロパティのうち「縦書き」を「はい」…

マイクロソフトにフィードバックを送信する

Accessに対する意見や要望をマイクロソフトに送る機能があります。 来たるAccess20XXに向けて建設的な意見を述べるのもユーザーの務めかと思いますのでヒマなときにでもぜひ。 方法ですが、ファイルタブを選択し、左側のリストから「フィードバック」をクリ…

コントロールを矢印キーで少しずつ動かす

テキストボックス等のコントロールはマウスでドラッグして移動できますが、細かい調整ができずイライラすることもあります。 そこでですが、コントロールを選択した状態で矢印キー(方向キー)を押すとその方向に(デザインビュー上のスケールで)約0.1cmず…

ページ番号と総ページ数を表示する

レポートにはページ番号と総ページ数を表示するための機能があります。 印刷を前提としたオブジェクトであるレポート特有の機能です。 早速ですがやり方です。 デザインビューの画面で、ページ番号を表示したい部分にテキストボックスを置き、コントロールソ…

プロパティシートを移動または固定する

各種コントロールを右クリック→「プロパティ」を選択する、といった操作によりプロパティ一覧を表示できますが、このプロパティシートを移動させたりウインドウ端に固定する方法についてです。 まず固定されているプロパティシートを移動する方法ですが、シ…

既定値により自動で連番をふる

既定値プロパティを使ってフォーム上で連番を自動的に採番する方法についてです。 新たなレコードに付与される連番は、それまでの連番の最大値に1を加えたものとします。※以下の設定は単票フォームで機能します。帳票フォームでは正しく機能しませんのでご注…

既定値により欠番を埋めながら自動で連番をふる

既定値プロパティを使ってフォーム上で連番を自動的に採番する方法について別途紹介しています(こちら)が、ここではさらに連番に空き番がある場合にその空きを小さい順に埋めていく方法について紹介します。※以下の設定は単票フォームで機能します。帳票フ…

グループごとにページ番号をふる

レポートにはページ番号を表示する機能があります(こちらを参照ください)が、レポート全体でのページ番号しか表示することができず、グループごとに1からページをふりなおすという機能はありません。通常はVBAで対応しますが、ここではコントロールの設定…

インデックスを自動的に作成する設定

テーブルで列を追加したときに、自動的にインデックスが「はい (重複あり)」に設定されている場合がありますが、この設定を変える方法についてです。 ファイルタブをクリックし、「オプション」を選択します。 オプションウインドウで「オブジェクトデザイナ…

縦書きにしたときに文字や数字が横向きになる場合の対応

あて先住所を表示する際など、文字列を縦書きにした場合に数字が横倒しになったり、縦になってほしい棒が横のままだったりということがあります。 その場合の対策についてです。 まず、特に変わったことをせず、テキストボックスの縦書きプロパティを「はい…

前のレコードと値が同じ場合に「同上」「〃」「々」などを表示する

レポートのテキストボックスには「重複データ非表示」というプロパティがあります。 これを利用することで、1つ前のレコードと同じ値である場合にその値を表示させないということができ、詳細セクション内でグループヘッダー的な表示を行うに場合に便利です…

レコードごとに複数の列の値を比較して最大値を求める

AccessのMax関数やDmax関数は、特定の(1つの)フィールドの中での最大値を求めることはできますが、Excelの関数と違って複数のフィールドの値を比較することができません。そうした場合にいざ最大値を求めようとしても案外厄介ですので、方法をここにメモし…