Access Tips

文字列の一部だけ書式を変える

レポートでのTipsです。 古いバージョンのAccessだと、例えば文字列の一部に下線をひくことができないため適当な位置に線を置いて代用する、ということがありましたが、最近のバージョンではリッチテキスト形式を適用することで下線に限らず各種の書式を部分…

同じ行を2行ずつ出力するクエリ

そもそも同じ内容の行を複数出力するクエリが必要かどうかというのは疑問の残るところですし、「2つの行をもつダミーテーブルを作ってクエリデザイン上に置く(結合線はひかない)」という簡単な答えがすぐに出てしまうところです。 ただ、それだけのために…

四捨五入する

Accessには数値の丸めに用いる関数としてRound関数があります。一般的な四捨五入(以下、単に「四捨五入」といいます)とほぼ同じなのですが、例えば「Round(4.5)」の戻り値は5ではなく4となります。四捨五入であれば「○.5」という数値は切り上げるところで…

参照整合性の設定時における代表的なエラーと対応例

リレーションシップ自体なかなか難しいものですが、特に参照整合性を設定しようとする場合にはさまざまなチェックが働くためいろいろなエラーが起こりえます。また、エラーが生じてもどこに問題があるのかわかりにくい場合も多いです。ここでは代表的なエラ…

主キーは1つのテーブルに1つだけ

1つのテーブルに設定できる主キーは1つだけです。2つ以上の主キーを設けることはできません。 複数の列(フィールド)を選んだ上で主キーを設定すればそれらの列すべてに鍵のマークがつきますが、それは1つの主キーが複数の列で構成されているに過ぎず、それ…

添付ファイル型に設定できない場合

データ型を「添付ファイル」に設定しようとすると… 「添付ファイルデータ型に設定できません」とエラーが出る場合があります。 何が問題なのかわかりにくいですが、一度別のデータ型として保存された列を添付ファイル型に変更しようとするとこのようなエラー…

日付を和暦で表示する

列を日付型に設定した場合、和暦で入力しても「1961/02/05」といった形式に変換されます。 和暦で表示したい場合、1つの例としてフィールドプロパティの「書式」に「ggge¥年m¥月d¥日」と入力します。 「ggg」は元号(明治,大正,昭和,平成,令和)を、「e」は…

テーブルのデータの変更(追加・更新・削除)を禁止する

テーブルのデータを変更させない方法についてです。 ただし、ここで紹介する設定は簡単に変えられるものですので、本格的なセキュリティを求めている方はスキップしてください。 そのやり方は、データマクロを利用し「変更前」と「削除前」のイベント時にそ…

日付から年度を求める

日付からその年度を求める例です。 考え方としてはその日付の3月前の日が属する年を求めればOKです。 具体的に日付([日付])から西暦の年度を求める場合は Format(DateAdd("m",-3,[日付]),"yyyy") 和暦の年度(数字のみ)で求める場合は Format(DateAdd("m"…

プラス・マイナス・ゼロの数値の表示方法あれこれ

特にマイナスの数値の表示方法を中心して、いろいろと変えてみたい場合があります。そうした設定について説明します。 基本的な設定 設定例 プラスの数値に+の記号(符号)をつける マイナスの数値を表す記号(符号)を▲にする マイナスの数値をカッコ書き…

数字を漢数字に変換する

数字(整数)のフィールドを漢字で表示する方法についてです。 単に1→一,2→二…と変換するだけならともかく、千とか万とか億といった単位を挿む必要があるためなかなか面倒です。 方法1:Excelからコピーする方法(NUMBERSTRING関数,TEXT関数) 方法2:関数で変…

日付(和暦)の数字を漢数字に変換する

日付を和暦で表示する場合でも数字の部分はアラビア数字で表記するのが一般的になっていますのであまり使う機会もないと思いますが、参考まで。 方法1:Excelからコピーする方法(TEXT関数) 方法2:関数で変換する方法 方法1:Excelからコピーする方法(TEXT関…

縦持ちデータを横持ちデータに変換する

横持ちデータを縦持ちデータに変換するケース(詳しくはこちらを参照のこと)の逆バージョンです。どちらも単なる行列の転置とは異なりますので注意してください。 基本的にクロス集計クエリ(SQLでいうTransform句)を用いて対応することとなります。クエリ…

リレーションシップとそれに類似する機能や考え方の区別について

リレーションシップは複数のテーブルの間のデータの整合性を維持するための重要な機能です。詳細についてはそちらの節を参照していただきたいと思いますが、似たような用語や、見た目が似ている機能と混同しやすく、理解や意思疎通の壁になることが多いです…

列を固定する

Excelでいうウインドウ枠の固定にあたる機能です。Accessの場合は列の固定のみ可能で、行の固定はできません。Accessでは列名が定義できる一方で、見出しのような内容をデータとして持つことが想定されていないためです。 なお、クエリでも同じ設定が可能で…

日付から曜日を求める

日付をもとに曜日を表す文字列を取得する関数についてです。 単に表示するだけなら書式プロパティを設定する(「aaa」など)だけでOKですのであまり使う機会はないかと思いますが、参考まで。 日本語の曜日を求める場合 英語の曜日を求める場合 その他の曜日…

テーブルに依らないクエリ

テーブルなしのクエリについて。目新しさも実用性もほぼ皆無のメモです。 クエリデザインにおいてデータソースとなるテーブルを指定していないと、「クエリの入力には、1つ以上のテーブルまたはクエリが必要です」というエラーが出ますが、テーブルのないク…

ファイルのバックアップを作成する

データの破損は業務の破綻に直結します。トラブルに備えてバックアップを取るというのは非常に大事なことで、他のあらゆるテクニックに比べても重要な作業といえます。 Accessはデータベースソフトとはいえログから特定時点のデータベースを復元するような高…

ファイルのパスワードを設定する

ファイルを開く際にパスワードの入力を求め、正しいパスワードが入力されないと開かないようにする設定です。 まずは対象となるファイルを開かずにAccessを起動し(いったんファイルを開いて「ファイル」>「閉じる」と選択するのも方法です)、「ファイル」…

横持ちデータを縦持ちデータに変換する

縦持ちデータを横持ちデータに変換するケース(詳しくはこちらを参照のこと)の逆バージョンです。割とニーズの多い課題ですが、SQLの知識を要しますのでお急ぎでない場合はまずそちらから学習を進めてください。 方法1:ユニオンクエリを利用する方法 方法2:…

名前付けの規則(命名規則)と接頭辞

本サイトでは名前付け規則(命名規則)を用いていませんが、ある程度の規模のシステムを作ろうとする場合は考慮すべきかと思いますので参考まで。 テーブルやレポートのほかテキストボックスや変数に至るまで、さまざまなモノには名前を付けなければなりませ…

円周率を求める

AccessにはExcelでいうPI関数がありません。まあ円周率はたいていの用途の場合3.14とかで済みますし、それ以上の精度が欲しい場合は検索して値をコピペすればいいだけなのですが、なんかカッコイイ求め方が欲しいという場合は 4*Atn(1)で代用できます。めで…

度数とラジアンを変換する

AccessにはExcelでいうDEGREES関数がありません。 必要であれば値はすぐに検索できますので大した問題ではありませんが、1ラジアンは(180/円周率)度であり、円周率は「4*Atn(1)」で求まります。よって、ラジアンの値に 180/(4*Atn(1))をかければ度数の値にな…

1つ前のレコードと同じ値を入力する

テーブルやフォーム上で、ある列の値を1つ上のレコードからコピーして入力するというショートカットについてです。 Accessの場合、レコードの順番という概念が希薄ですので、このような入力ができること自体想像がつきにくいですが一応できます。 値を入力し…

縦持ち・横持ちの変換、クロス集計、行列の入れ替えの違い

「縦に並んだテーブルのデータを横並びにしてほしい」と言われて行列を入れ替えたデータを作ってみたら、そうではなくて縦持ちのデータを横持ちに変換をしてほしいのだ、と言われることがあります。こうした混乱を避けるために用語を整理しておく必要があり…

最適化によりファイルをメンテナンスする

Accessを使用していると、実際に記録しているデータの量や作成したオブジェクトの内容と比較して異常にファイルサイズが大きくなってしまうことがあります。 これは、Accessの内部で(ユーザーが作成するものとは別に)作成されるオブジェクトが使用後も削除…

Accessを最新の状態に更新する

OSなどと同様にAccessにもたびたび更新プログラムが適用されます。 管理者もAccess2016を導入したときにデータ型の設定がうまくできなくなるという不具合に見舞われましたがこれで解決しました。Accessに不具合が生じた場合はコントロールパネルより先に、ま…

2文字以上の文字列を指定した回数繰り返す

文字を繰り返して出力する関数としてString関数がありますが、指定した文字列の頭文字しか繰り返されません。 2文字以上の文字列を繰り返すには、String関数で適当な文字を必要な数だけ出力したうえでReplace関数を併用します。 具体的な例として「あいうえ…

その日がその月の第何週目にあるのかを求める

ある日付について、その日がその月の第何週に属しているのかを求める方法です。 なお、1つの週はある特定の曜日から始まるものとします。例えば週が日曜日から始まる場合、ある月の初日(1日)が土曜日であれば第1週はその日のみで終わり、2日(日曜日)から…

その日の曜日がその月で何回目なのかを求める

問題設定を説明するのがなかなか難しいですが、言い換えますと「ある日がその月のx回目のy曜日であるとして、xを求める」となります。 x回目というのはその日付が第何週目かとは全く関係なく、純粋にy曜日が何回目なのかを指しています。 例として右のような…