Access Tips

和暦の元年表記

日付を和暦で表示する際に「○○1年」を「○○元年」と表示する方法についてです。元号は日付で判断するものとします(例:2019/4/30→平成31年4月30日、2019/5/1→令和元年5月1日)。 書式での実現は困難ですので関数を使って文字列を生成します。 サンプルとなる…

値(行)を複数選択できる非連結リストボックス

フォーム上の非連結リストボックスについてです。 テーブルではフィールドの「表示コントロール」プロパティをリストボックス(またはコンボボックス)にし、「複数の値の許可」プロパティを「はい」にすることで、複数の値を記録できるようになりますが、フ…

複数選択が可能なリストボックス等から値を取得する

フォーム上のリストボックス及びコンボボックスでは「複数選択」オプションの設定などにより複数の値を選択することができます(コンボボックスの場合は連結コンボボックスのみ)。 ここではそれらのコントロールについて、選択された複数の値を取得(参照)…

タブ表示しているオブジェクトの並び順を替える

(Office365 バージョン1902ビルド11328.20222 アップデートの内容に基づいています) 普通の新機能ですが、嬉しいので堂々と紹介させていただきます;-o-) テーブルなどのオブジェクトをタブ表示しているときの表示内容が変更され、アクティブなオブジェクト…

Access Tips

Accessを利用するにあたってちょっと役立つかもしれない知識について、本編からの抜粋を含めいくつか紹介します。 実用性を無視したネタみたいなものがかなりありますがご容赦を_ _)目次 基本操作・設定 テーブル リレーションシップ クエリ・SQL フォーム …

合計値をページ下部に表示する(その1)

レポートでのグループごとの合計値は、グループフッターにSum関数を置いて表示するのが基本です。しかし、グループフッターの位置はレコードの数などによって変化しますので、特に請求書などの様式において合計値をページ下部の所定の位置に表示したい場合に…

生年月日から満年齢を求める

ExcelだとDATEDIF関数で簡単に満年齢が算出できます。一方Accessにはよく似た名前のDateDiff関数がありますが、これだと満年齢までは算出できないため少し工夫が必要になります。 生年月日(「生年月日」列に記録されているものとします)から現在の日付(Da…

住所から都道府県を抽出する

住所のうち都道府県だけを分けて表示するというのは多くの人が経験する作業かと思います。具体的には都道府県と市区町村以下をそれぞれ抽出する、つまり住所を分割するというケースが多いかと思いますので、そこまでを含む方法を紹介します。 なお、例として…

テーブル、クエリ等をタブではなく同時に開いて見比べる設定

テーブルやクエリ等のオブジェクトを複数開いた場合、タブで表示されますので内容を直接見比べることができません。この設定を変更し、個別のウインドウとして並べて表示する方法についてです。 ウインドウ上部の「ファイル」タブをクリックします。 このよ…

主キーが複合キーである場合の参照整合性等の設定

複合キーを基点とするリレーションシップの設定についてです。 操作に関して言えば1つ1つの列についてリレーションシップを繰り返し設定していくのではなく、一度に行うというところがポイントです。 複合キーもリレーションシップもAccessの学習における大…

レポートでオートシェイプを利用する

(結論としてはExcelやWordからコピーしてくださいということですので、Accessだけで完結させたい方はスキップしてください) Accessのレポートの装飾機能は極めて貧弱で、基本的なコントロールにより直線や四角が置けるだけ、あとはせいぜいVBAで円や楕円が…

クエリでのRnd関数による抽選

多数あるレコードのうちランダムに一定数のものを抽出するという抽選を行う場合、ExcelですとRAND関数を使って各レコードに異なるランダムな値を与え、その値の大小で抽選結果を決定するというのが一般的です。 Accessの場合、テーブルではRnd関数を使えませ…

イメージ(画像)のサイズと縦横比の調整

レポートにイメージコントロールで画像を貼り付けた際のサイズ等の調整についてです。 基本的なサイズ調整 クリップ ストレッチ ズーム 基本的なサイズ調整 レポートにイメージコントロールで画像を貼りつけてみます。 画像がサイズが非常に大きく、用紙サイ…

境界線と枠線の設定の違い

各種コントロールのプロパティとして「上(下左右)枠線のスタイル」というのがあります。しかし、単にこの値を「実線」にしても何も表示されません。そこで、さしあたりそれぞれの設定方法の違いについて示します。 なお、下記の通り枠線は「レイアウト」の…

値要求と空文字列の許可の効果と注意点

テーブルの列のプロパティとして「値要求」があり、必ず何らかの値を入力させる(Not Null制約)という場合は、「はい」に設定することで実現します。また、データ型がテキスト型であるときはプロパティに「空文字列の許可」が加わり、空文字列(長さ0の文字…

空文字列(長さ0の文字列)を入力する

空文字の入力方法についてです。結論としては「""」と入力するだけのことです。 テキスト型の列に「""」と入力してEnterで確定します。 何も見えなくなりましたが、これで空文字列が入力されています。 証拠として「空文字列の許可」を「いいえ」にしてから…

月末の日付を求める

月末の日付は30日であったり31日であったり、時には28日であったりとまちまちですので簡単に求まらないようにも思えますが、DateSerial関数により簡単に求まります。 右のようなテーブルを用います。「登録日」の属する月の月末の日付を求めてみます。 クエ…

直近の日曜日を求める

日付から直近の日曜日の日付を求める方法です。日付が日曜日である場合にその日でよしとする場合と、次の日曜日を求める場合の2通りを示します。 当然ですが何曜日を求める場合にも応用可能です。 例として右のようなテーブルを用いて、「登録日」以降最初の…

Switch関数でElseに相当する条件(いずれにも該当しない場合)を設ける

Switch関数は(複数の条件式のうち)最初に真(True)と評価されたものに対応する値を返しますが、「それまで示した条件のいずれにも該当しない場合」という条件を厳密に表現しようとすると複雑になる場合があります。解決策としては条件に「True」と記せばO…

主キーではなくインデックスを利用する参照整合性等の設定

主キーでない列でもインデックスにより重複のないように設定すれば、その列を参照している列との間で参照整合性等の設定を行うことが可能となります。 基本的にリレーションシップは主キーと外部キーとの間で設定すれば事足りますので、そのような例はちょっ…

割り算の余りを求める

Excelですと余りを求めるにはMOD関数を使いますがAccessには同じような関数はなく、代わりに演算子のModを用います。具体例として8を3で割った余りは 8 Mod 3で求まります。何ということもありませんが、久々にAccessを使ったときに忘れやすいところです。

1つのテーブルにある複数の外部キーが同じ主キーを参照している場合の参照整合性等の設定

1つのテーブルに複数の外部キーがあり、どちらも別のテーブルにある同じ主キーを参照している、という場合があります。この場合の参照整合性等の設定についてです。 右のようなテーブルがあります。各事業所には安全管理担当者と防火担当者というものがそれ…

あかさたな…で行分けする

名簿などでよく見る「あ行」「か行」などの区分を行う方法です。 右のようなテーブルを用います。漢字から読みを導くことはできませんので、ふりがな列の存在は必須です(テーブルの「ふりがな」プロパティで入力作業を軽減することはできます)。 クエリを…

ページごとに1から連番をふる

レポートのテキストボックスには集計実行オプションがあり、コントロールソースを「=1」とすればグループごとに、あるいはレポート全体でレコードに連番をふることができます。しかし集計実行オプションにはページごとに集計する機能がないためページごとに…

Imp演算子

論理演算子はAnd,Or,Notが使えれば十分で、Eqv,Xorもまずお目にかかることはありませんが、さらに珍しいのがImpです。 真理値表は次のようになります(ただし演算子の実際の出力は1でなく-1となります)。Imp演算子の真理値表命題A命題BA Imp B001011100111 …

ふりがなを自動的に入力する

ExcelですとPHONETIC関数を使って自動的にひらがなを入力するという方法があります(参照と呼ぶほうが正しいですが)。一方、Accessの場合はテーブルの列(あるいはフォームのテキストボックス)のプロパティとして、ふりがなを記録する別のテキストボックス…

数字のゼロ埋め(ゼロパディング)をする

1という数値であっても表示上は「00001」というように0から始まる形にして見た目の桁数を揃えたい、という場合があります。また、見た目だけでなく0から始まる文字列に変換してしまいたいという場合もあります。それらの方法について示します。 例として右の…

文字列に1文字ずつスペースをはさむ

文字列に含まれるそれぞれの文字の間にスペースをはさむ方法についてです。 例として右のようなテーブルを用い、クエリで実現するものとします。 簡単なのはFormat関数を用いて次のような列を設ける方法です。 スペース入りタイトル: Trim(Format([タイトル]…

テーブルに列の合計等を表示する行(集計行)を表示する

完全に基本操作ですが、最近のバージョンで加わった機能ですので、ベテランユーザーほど気づきにくいかもしれません。 テーブルを表示し、ウインドウ上部の「ホーム」タブを選んだ状態で、「集計」をクリックします。 テーブル下部に太字で「集計」と書かれ…

半角数字を横書き(縦中横)にした縦書き文字列をつくる

縦書きに関してはテキストボックスのオプションに「縦書き」がありますが、Wordの縦中横(一部の文字を横書き、つまり横並びにする)のような機能はありません。それは仕方ありませんが、特に(2桁以上の)数字だけはどうしても横書き(横並び)にしたいとい…