Access 2000 以降では、条件付き書式設定という機能が追加されています。
これにより、特定条件を満たした場合のみ書式を変化させることが簡単に出来るようになりました。
<追加> ボタンを押下することにより、条件の種類を増やすことも出来ます。
ただし、ここで追加できる条件には 3 つまでという制限があります。
既定の書式を入れても 4 種類までが限界です。
単票形式フォームであれば、VBA で動的に書式を変更することにより、コーディングさえすれば何種類でも書式を変えることは可能です。しかし帳票形式フォームになるとコントロールの実体が 1 つしか無いため、アクティブレコードに対する変更が他のレコードにも及んでしまいます。
以下では、VBA をほとんど使用せずに、帳票形式フォームにおいてテキストボックスの文字色(前景色)と背景色を 5 種類以上使い分ける一つのアプローチを提示します。
あるアンケートを行なったとしましょう。
実際のアンケート項目は何でもいいのですが、ここでは回答者の年齢に注目します。
分かりやすいように、以下のようなデータが集まったと仮定します。
年齢は必須で、無記入は有り得ないものと仮定します。
このテーブルから、以下のような帳票形式の連結フォームを作成しました。
このとき、テキストボックスの色を年齢に応じて、下表のように世代別に色分けしたいと考えたとしましょう。
| 世代 | 色 |
|---|---|
| 10 代以下 | 水色 |
| 20 代 | 青色 |
| 30 代 | 黄色 |
| 40 代 | 赤 |
| 50 代 | 緑 |
| 60 代 | 茶色 |
| 70 代以上 | 紫 |
まず準備として、年齢用テキストボックスを 2 個コピーして、3 つにします。
テキストボックスには、上から順に [txt年齢]、[txt年齢1]、[txt年齢2] という名前を付けておきましょう。
[txt年齢] は入力用に、[txt年齢1] と [txt年齢2] は参照用になります。
次に [txt年齢1] の既定の前景色に、40 代の色である赤を指定します。
次に条件付き書式を使って、50 代から 70 代までの色を割り当てていきます。
[書式]-[条件付き書式] から、以下のように設定します。
続いて [txt年齢2] の [コントロールソース] プロパティを、以下のように変更します。
=IIf([年齢]<40,[年齢],Null)
[txt年齢2] の既定の前景色には 10 代の色である水色を指定して、20 代と 30 代については条件付き書式で以下のように設定します。
[txt年齢1] と [txt年齢2] の [タブストップ] プロパティを「いいえ」に設定します。
以上で準備が終わりました。
以下で、いよいよ前景色と背景色それぞれに対応させる方法を説明します。
準備に引き続き、[txt年齢2] の [フォーカス取得時] イベントに、以下のような簡単なプロシージャを設定します。
Private Sub txt年齢2_Enter() Me.txt年齢.SetFocus End Sub
これが本稿で唯一使用する(1 行だけの)コードですが、もちろんこのていどのコードはマクロの [コントロールの移動] アクションで代用しても構いません。
これにより、参照用テキストボックスがアクティブになった時点でフォーカスを入力用テキストボックスに移すことになります。
続いて [txt年齢1] と [txt年齢2] の [背景スタイル] プロパティを「透明」に、[書式] プロパティを「数値」に設定します。
後は [txt年齢1] と [txt年齢2] を [txt年齢] の真上に重ねて、詳細セクションの高さを調整するだけです。
以下が結果です。
この原理でテキストボックスを重ねていけば、何種類の色でも使い分けられる理屈です。
最後に、念のため 3 つのテキストボックスの主なプロパティの設定を表で確認してみましょう。
| プロパティ | [txt年齢] | [txt年齢1] | [txt年齢2] |
|---|---|---|---|
| コントロールソース | 年齢 | 年齢 | =IIf([年齢]<40,[年齢],Null) |
| タブストップ | はい | いいえ | いいえ |
| 背景スタイル | 普通 | 透明 | 透明 |
| 書式 | 数値 | 数値 | |
| フォーカス取得時 | [イベント プロシージャ] |
準備に引き続き、[txt年齢]、[txt年齢1]、[txt年齢2] 全ての [背景スタイル] プロパティを「透明」に設定します。
続いて [txt年齢1] と [txt年齢2] を選択し、以下の表のようにプロパティを変更します。
| プロパティ | [txt年齢1] & [txt年齢2] |
|---|---|
| 書式 | "gg" |
| フォント名 | Webdings |
| フォントサイズ | 72 |
| 立体表示 | なし |
| 境界線スタイル | 透明 |
| 使用可能 | いいえ |
| 編集ロック | はい |
これは少し解説が必要でしょう。
Webdings フォントは記号用のフォントですが、「g」は四角形に割り当てられています。
書式に「"gg"」を設定することにより、値が正の数値の場合は、実際の値の代わりに四角形が 2 個並んで表示されるようになります。フォントサイズを大きく設定することにより、横長の長方形として見える仕組みです。
なお、値が負の数値や 0 も取りうる場合は書式を変更する必要が有りますが、今回は対象となる値が年齢なので、それは有り得ないものとしています。必要な場合は [書式] プロパティのヘルプを参照して改変してみてください。
またテキストボックスが横に幅広な場合は「"gg"」ではなく「"ggggggg"」くらいにする必要が有るかもしれません。この辺りは各自で調整してください。
さて、上記プロパティの変更が済んだら、今度は [txt年齢] を選択して [書式]-[最前面へ移動] を選び、[txt年齢1] と [txt年齢2] を [txt年齢] の真上に重ねてください。
ここでいったんフォームビューに切り替えてみます。
なかなか良さ気ですが、よくよく見るとテキストボックスの左端にわずかな隙間が有ることに気付きます。
これは四角形が文字であるため、テキストボックスのわずかなパディング(内部余白)が影響しているものです。
再度デザインビューに戻し、[txt年齢1] と [txt年齢2] の幅をわずかに(0.2〜0.3mm)広げ、少し左側に寄せてから、詳細セクションの高さを調整します。
満足いくまで何回か試行錯誤するかもしれませんが、この辺はもう手数だけの問題で、技術的な障害はないはずです。
以下が結果です。
下記リンクからサンプル MDB をダウンロードできます。
ConFmt2K.lzh (29kb)
lzh 形式で圧縮されており、解凍すると Access 2000 形式の MDB ファイル(140kb)が展開します。
解凍用のソフトが無い場合は、Vector 等のソフトウェアライブラリから入手する必要があります。
上記手法を組み合わせることによって、前景色と背景色の両方を同時に異なった組み合わせで色分けすることも可能です。
また背景色の変更を応用すれば、詳細セクション全体の背景色を変更することも出来ます(テキストボックスの大きさを詳細セクション一杯に広げるだけです)。(^ ^;
今回は色だけを対象にした内容でしたが、条件付き書式には他にも太字や斜体、下線、有効といった設定があり、組み合わせによって幾らでも表現のバリエーションは増えていくでしょう。
「何だ、Access は Web アプリなら当たり前に出来る色分けも満足に出来ないのか」なんて言われるのは、ちょっとシャクですね。
Access の可能性を引き出すためのちょっとした工夫をするかどうかは、Access ではなく貴方の腕にかかっています。
ここで紹介したテクニックを使って、「おおっ、Access やるじゃん!」と言わせてみましょう。
背景色だけ変えられればよいという方は、下記トピックもご参照ください。
また、VBA を究極に駆使して構わないので、条件付き書式を自在に行いたいという上級者の方は、Lebans 氏の下記トピックを参照してください。
Access の帳票フォームをサブクラス化して自前で描画するという、悪魔のような技ですが、超高速です。条件付き書式と異なり、スクロールすると着色が一拍遅れるようなこともありません。サブクラス化が何を意味するのか了解している方だけ、お使いください。