Access Tips

文字列の左端や右端(あるいは両方)に並んでいる特定の文字を取り除く

文字列に含まれる特定の文字をすべて取り除くという場合は、Replace関数を使えば一発で済みます。ただ、左端や右端(あるいはその両方)に並んでいるものだけを取り除くという場合はちょっと工夫が必要です。スペースを取り除こうとするのであればTrim,LTrim…

入力時にヒントとなるテキストをポップアップ表示する

フォームでExcelの入力時メッセージのようにポップアップでヒントを表示する機能です。 方法は簡単です。コントロールのプロパティ「ヒントテキスト」に、表示させようとする文字列を書き込めばOKです。 フォームビューです。 正確には入力時でなくとも、オ…

UNIONとUNION ALLを併用した場合の結果

ユニオンクエリ、といいますかSQLでUNIONを使った場合、内容が重複する行は1行にまとめられて出力されます。 ただしUNION ALLを使えば重複する行が何行あってもそのまま出力されます。 これらを併用した場合、つまりSQLにUNIONとUNION ALLが混在する場合に重…

SQL集合関数を列方向(横方向)に用いて集計を行う

SQL集合関数(Sum関数など)や定義域集合関数(DSum関数など)は大変便利ですが、Excelの関数と違って複数のフィールド(列)の間で値を集計することはできません。 Accessの場合、基本的にテーブルを分割して正規化したうえで運用することが前提となってい…

起動中のファイルのパスやファイル名を表示する

起動しているファイル(accdbファイルなど)が置かれているフォルダのパスやファイル名そのものを取得・表示する方法です。 具体的にはCurrentProjectオブジェクトの各プロパティを参照します。 考えられる例としてレポートでの表示を試してみます。 テキス…

コンボボックスの2列目以降の値を別のテキストボックスに表示する

コンボボックスで値を選択している時に複数の列の内容を表示させることができますが、選択後に表示させることができるのは1列だけ、つまり1つの値だけです。これだとコードしか表示できないため誰のことかわからないとか、氏名しか表示できないため同姓同名…

コンボボックスの何行目が選択されているかを取得する

ListIndexプロパティにより、コンボボックス(及びリストボックス)の何行目が選択されたのかを知ることができます。 例として「駅コードcmb」という名前のコンボボックスとともにテキストボックスを置き、そのコントロールソースを以下のようにします。 =[…

選択後のコンボボックスに複数の列の値を表示させる

コンボボックスでは選択中に複数の列の値を表示しておくことができますが、選択後に表示しておける値は基本的に1つだけです。これを解決し、選択後も複数の列の値を表示しておく方法についてです。 ただ、ちょっとタイトルに偽りありという感じの解決法です…

ある日付から満何年何か月と何日経過しているかを求める

ある日付から満何年経過しているか(つまり満年齢)を求めるケースについては別途紹介しています(こちら)が、ここではさらに(年未満の)満経過月数、そして月未満の経過日数を求めてみることとします。 右のようなテーブルを例としてみます。入会日から今…

コンボボックスの「区切り文字」プロパティ

フォームのコンボボックスには「区切り文字」というプロパティがありますが、通常のコンボボックスで値を変更しても特に変化はありません。 例として「;」(セミコロン)にしてみますが… コンボボックスの見た目はいつも通りで、どこにもセミコロンは現れま…

添付ファイル型のフィールドの名前を表示する

添付ファイル型フィールドを作成した際に、テーブルのデータシートビューではそのフィールド名が表示されません。 試しに添付ファイル型のフィールドを2つ持つテーブルを作成してみましたが… データシートビューではなぜかフィールド名がクリップのマークと…

クエリですべての列が表示されてしまう設定

通常、クエリを作成した際には必要となる列を選択しますが… その内容にかかわらずすべての列が表示されてしまうことがあります;-o-) 原因は、クエリのプロパティ「全フィールド表示」の値が「はい」になっていることです。 これを「いいえ」にすると… 選択し…

DISTINCTとDISTINCTROWの違い

クエリでDISTINCT句を用いることにより、値の重複を取り除くことができます。 また、これと名前が似たDISTINCTROW句というのもあります。「レコードの重複を除く」というはたらきをしますが意味がわかりにくく、あまり知られていません。実際あまり使いどこ…

クエリの「固有の値」プロパティと「固有のレコード」プロパティ

クエリのプロパティに「固有の値」というものと「固有のレコード」というものがあります。 「固有の値」を「はい」にすると、抽出される値が重複する場合にその重複が除かれて出力されます。SELECT文にDISTINCT句を加えるのと同じことであり、実際に加わりま…

カッコなどの囲み文字とその内側の文字列を削除する

カッコとその中の文字列を取り除く方法です。 タグに置き換えてPlainText関数により削除するという方法をとります。もちろん鍵カッコなどにも応用可能ですが、半角クォーテーションのように前後とも同一の記号である場合には使えません。 例として右のような…

期間の重複をチェックする

一定の「期間」を記録したレコードが多数ある場合に、その期間が重複していることをチェックし、抽出する方法についてです。 なお、ここでの重複とは「期間のうち一部でも重複している」という状態を指します。 期間の重複判定について 例1:各レコードに対し…

数値の大小に基づき順位をつける

Accessには、ExcelのRANK関数のように直接的に順位を求める関数がありませんが、DCount関数を利用することで順位を求めることができます。 例として右のようなテーブルを用い、「点数」列の値が大きい順に順位をつけてみます。 クエリで求めてみましょう。 …

並べ替えの基準となる列を列番号で指定する

クエリで列を指定する場合はその名前で指定しますが、ソートの基準となる列を指定する場合には、列の番号を用いることもできます。 ただし全くの豆知識といえるもので、実用的におすすめできるようなものではありません。下記の内容からわかるように、抽出す…

システムオブジェクト(システムテーブル)を表示する

システムにより自動的に作成されているオブジェクト(テーブル)があります。 通常の使い方をしている限り表示する必要は特にありませんが、この内容から有用な情報を得ることができますし、データマクロを用いてログを作成するという用途に用いることも出来…

隠しオブジェクトを作成(表示)する

システム開発者のメモ用のテーブルや、単独で開いても機能しないサブフォームのように、ユーザーに開かれたくないオブジェクトもあります。 こうしたオブジェクトをユーザーから見えないようにするため、隠しオブジェクトという機能があります。ここでは、隠…

FLOOR関数とCEILING関数を実現する

ある数値を、指定した数値の整数倍に丸める、いわゆる床関数と天井関数についです。 EXCELではFLOOR関数とCEILING関数として用意されていますがAccessには用意されていませんので、ここではInt関数を使って実現します(ただしマイナスの数値については考慮し…

「サブクエリでは、マルチレベルGROUP BY句は使用できません。」のエラーを回避する

レポートにおけるエラー発生の回避策についてです。 まず、対象となるエラーを再現してみます。 右のようなテーブルがあります。 クエリで次のような列を設けます。つまり「点数」列の値に基づきサブクエリによって順位を算出します。 順位: (SELECT COUNT(*…

循環参照エラーを回避し同名の列を出力する

クエリで関数等を使ったときに、元の列と同じ列名で出力する方法についてです。 例として右のようなテーブルを用います。 「身長」列がテキスト型になっているのがわかります。 そこでクエリにおいて関数を使い、数値型に変換します。このとき、出力される列…

CSVファイルをインポートする

CSV形式のファイルをインポートしようとしたときに、メニューにCSVファイルの選択肢がなくて迷うことがあるかもしれません。結論としては「テキスト ファイル」を選べばいいだけですが、実際にちょっとやってみます。 まず、インポートしようとするCSVファイ…

正規化の説明に主キーを持ち出すのは大きな誤り

正規化はデータベース作成の際の重要なプロセスですが、その正規化の説明において主キーが持ち出されることがあります。 具体的な例としては「第2正規形とは、主キーの一部により他の項目が特定されるような関係(部分関数従属)が存在しない状態」というよ…

ナビゲーションウインドウの幅を変えられなくなったときの対応

結論としてはF11キーを押しましょう。 さて、通常Accessのウインドウの左端に表示されているウインドウ、つまりナビゲーションウインドウですが、その右端をドラッグして幅を変えることができます。 しかし、この幅を中途半端に狭めてしまうと… 右端の線が消…

値が何種類あるか数える

AccessにはCount関数やDCount関数がありますので、値がいくつあるのかを数えるのは簡単ですが、重複する値があるとき値が何種類あるのかを数えるのは結構面倒です。また、グループごとに種類を数えたいという場合もあります。データベースソフトによっては「…

濁点と半濁点を取り除く(清音化)

ふりがなから索引をつくるときに頭文字の「さ」と「ざ」、「た」と「だ」などが別々になって困るといったケースがあります。 そこで、文字列から濁点(゛)半濁点(゜)を取り除き、これらを同一のものとみなせるようにします。清音処理とも呼ばれます。 具…

コントロールの大きさと位置を揃える

フォームやレポートのコントロールを、テーブルやExcelのセルのようにビシッと揃えたいという時の操作です。 例として、大きさも位置もバラバラなテキストボックスが置かれている右のようなレポートを用います。 まずは幅を揃えます。幅は、最も広いものに合…

オートルックアップクエリの利用

通常、選択クエリはデータを抽出するために用いますが、クエリにおいても一定の条件を満たせばデータの追加・更新を行うことは可能です。 また、複数のテーブルに基づくクエリを編集することも可能です(くどいですが一定の条件があります)。このとき、ある…