● Excelユーザーフォームの50倍、効率的なAccessフォームを作る方法(2つのカード形式画面の区別とサブフォームの利用)
★ はじめに:『そもそもAccessで「30秒で」自動作成できるフォームってどんなもの? 』
・フォーム作成の作業効率がExcelの50倍以上(事務的なものの一部に限りますが)
(例えば、システム構築の時間コスト・金額コストの削減も同じです。)
例えばExcel2003の「フォーム機能」的な感じ(2007以降は設定が必要)で、
Accessでは、次のようなフォームが、(テーブルの定義が完了していれば)
「30秒」ほどで自動作成できます。
(30秒で以下の機能を全部組み込めます。)
- -『 表=テーブル(またはクエリ)』と『フォーム』を
完全連動(連結・リンク)させることができるので、次のレコードや
、(特にカード形式の画面の場合に)次の入力画面に移動したい時に、
レコード移動のためのプログラムが「何も要らない」です。
(もちろん、リンク解除もできます。)
- -Excelのデータシート状の画面と、カード形式・その他のフォーム状の
画面の行き来がワンタッチでいつでも切り替えれるので入力や
値のチェック等々がラクです。
(メニュー・ツールバーでの切り替えや1行VBAでの行き来です。)
Excelのデータシート状の画面では、Excelのウィンドウの固定に似た、
「列の固定」などもできます。
列に色をつけたりとか、表示する罫線を変えたりとかも。
各セル(各テキストボックス)に設定したドロップダウンリストは、
もちろん、フォーム状の画面に切り替えたときも引き継がれます。
- -セル移動もExcel状の時は基本右方向。では縦方向や右方向。
右端まで行けば次は勝手に次行の先頭へ。
フォーム状のビュー(カード形式等々)の場合なら勝手に次ページへ。
また、「セルとセルの間をEnterやTABでどう移動するか」をユーザーの
好きなように指定できます。
(30秒でできるのは、初期値で、上から順番、左から右へ順番。)
- -フォームフィルタといって、フォームの画面をそのままフィルタの
画面にすることができます。And、Or、複数条件、色々設定可能です。
頻繁に使いそうなものはクエリとしても保存できます。
- -入力チェックのコマンドボタンやイベントプロシージャをいくらでも
作り足せます。Excel状のデータシートでは、ある列をコマンドボタン
代わりにもできるし、入力時にEnterしたときにイベントプロシージャ
で入力チェックや転記等々、いろいろとできます。
ExcelはChangeイベント?くらいしかないしやりづらいですが、
Accessの場合はその20倍くらい、イベントが用意されています。
それとExcelはAccessで簡単に(数秒か数分で)できることを、
クラスモジュールで自作オブジェクトを作らないとできないことも
多そうだし・・・。Excelは、「入力フォームの作成」だけは、ほんと、
めんどくさいです。
(定型的かつドラッグを多用しない事務系のみのフォームに限りますが。)
- -セルまたはテキストボックスの右クリックでも簡単にフィルタができます。
OrやAndが使えます。また、セルの入力値の・・・、
先頭数文字をドラッグで、前方一致
中ごろの好きな個所数文字をドラッグで、部分一致
最後の数文字のみをドラッグで、後方一致
・・・のフィルタができます。
「非選択」といって、「選んだもの」「以外」のフィルタもできます。
全部、右クリックで。
- -フォームのソースとなるデータを「テーブル直」ではなく、
「テーブルの ”まんま” をソースにしたクエリ」にすることで、
列単位の数式利用(計算)が容易となるので、
「縦方向の数式のオートフィル」もほとんど要らないようにできます。
もちろん、数式では、Excelのワークシート関数に似た関数も使えます。
(セル=テキストボックスのプロパティでも設定できる場合もありますが。)
※以上のような「入力とヒント探しをしやすくした」フォームが、
何にもしなくても、「30秒で」、ウィザードで、「ポコッと」
できてしまうので超ラクです。
もちろん、さらに作りこむのでその分の時間はもっとかかりますが・・・
でもその、「30秒でできるやつ」と同等の機能をExcelで作ろうと思うと、
速い人でも数週間、場合によっては数か月かかる場合もあるので、
僕は、Excelで事務の定番的なフォームを作ることに限ってだけは、基本、
「しません」。(それ以外は、もちろん、Excelに頼る場面も多いのですが。)
テーブルではなく、「テーブルをソースにしたクエリ」をモトにフォームを作る
ことで、「数式のオートフィル」もほとんど要らないようにできますし。
だからいつも、AccessとExcelのそれぞれの得意な部分を連携させて使ってます。
ついでに言いますと、話が逸れてすみませんが、
まずはデータに騙されないように、前述のような機能でデータの「傾向や何か」を
つかむことのほうが先決で、それをやらないただのExcelでの「きれいな作表」
なんてほとんど意味がない無駄作業だと思っています・・・。
あと、特に、罫線や色が無いと数字が読めない、カンマだけで数字が読めない
「上の方」に対しては、下っ端の人間としては現場で無駄作業が増えるので
やはり困ってしまいます。(働き方改革のジャマです。)
なんとかカンマと値のスキマだけで罫線も色もなく、数字が読めるように
なって頂きたいです。
できないならご自分で定規でもご用意してほしいですね。蛍光ペンとか。
定規と蛍光ペンを手に「チェックするぞ!」ってやったほうが数字見るの、
楽しくありませんか?
それをしないから、社内で「きれいな作表」という無駄作業が増えます。
会議で眠たくなったりとか・・・。
「きれいで無駄な作表」は、「立派な作表」とも呼ぶかもしれません。
くだらない色付けのせいでインク代ももったいないような気もします。
チリも積もって・・・。
正直、社内だけでなく、社外でもそうなったらいいのにと思います。
いい加減、Excelの機能満載で作る「きれいな作表」、どの会社様もやめません?
コンサルを喜ばすだけで、あまり意味がないことありませんか?
ExcelやAccess、パソコン、ごときに人間様がふりまわされるの、
もうよくないですか?
- -あと、30秒以内ではないですが、Accessでは
フォームの中に、さらにフォームが複数作れるのでそれも便利です。
あるデータに紐ついた内容をその埋め込みフォームに表示できます。
埋め込んでリンク設定するのも1~10分くらいでできます。
★ 「2つのカード形式の画面の区別とサブフォームの利用」のメリット
2つの「カード形式画面」の区別と サブフォームの利用を常用することで、次のようなメリットがあります。
・データが、(後述のように)異なる3つのフォームの形式で、異なる見え方ができるようになります。
・異なる見え方によって、文字・キーワードも不思議と違って見え、なにかのヒントをつかみやすくなれる場合があります。
・フォームの作り込み数が無駄に増えないので管理しやすくなります。
・3つの見せ方ができることでフォーㇺの作成効率が、Excelユーザーフォームの50倍以上になります。といっても、あくまでも「データの入力用のフォーム」に限って「だけ」ですけど・・・。
★概要
Aceess2000でカード形式のフォーム画面を作成する場合・・・、
(01)素直に「単票形式」のメニューで作る、
(02)「帳票形式」のメニューで疑似的に・・・あたかも単票形式のように「見せかけて」作る、
の、2つの方法があります。
(01)はカードを横に・左右にめくっていくイメージで(あくまでもイメージです)、(02)は上から下へカードが切り替わっていくスマホのスクロールのようなイメージです。
このとき、(02)の方法をとると、「カード形式」「帳票形式」「Excelシート似形式(データシート形式)」の3つのタイプの見せ方を、比較的簡単に切り替えられるようになります。(カード形式と帳票形式の行き来に細かいVBAプログラムが必要なので結構めんどくさいですが)
逆に、カード形式のフォームを(01)のように「単票形式」のメニューから作ると、この3タイプの切り替えができません。「単票形式」のメニューからフォームを作ると、「Excelシート似形式(データシート形式)」の2タイプの切り替えしかできないのです。
もともと「データシート形式(Excelシート似形式)」へは、VBAコード1行で簡単に切り替えられます。
つまり、
「単票形式(カード形式)」←→「データシート形式(Excelシート似形式)」
「帳票形式(リスト形式)」←→「データシート形式(Excelシート似形式)」
は、デフォルトで簡単に切り替えられます。
でも、
「単票形式(カード形式)」←→「帳票形式(リスト形式)」←→「データシート形式(Excelシート似形式)」の3タイプ切り替えは(02)の方法を取らないと簡単にはできません。
今現在は「単票形式(カード形式)」←→「帳票形式(リスト形式)」の切り替えの必要がなくても、将来的に作り変えをしたくなったときに必要になるかもしれないので、それを見越して、フォームは最初から帳票形式で作ります。
その後、同じフォームでカード形式の見せ方も必要になったら、そのときに、必要に応じて疑似的なカード形式状にスイッチするVBAコードを追加します。
どうしようもないときだけ、別口で「単票形式」メニューでカード形式のフォームを作ります。
単票形式メニューからのカードフォーム作成でないとどうしても実現できないことがある場合や、複雑かつ大きなカード形式の画面を作りたいとき、ウィザードのようなフォームを作りたいとき(一枚のフォームに改ページコントロールを入れて、複数枚のように見せる場合)、などです。
邪道かもしれませんが、売るわけではないし自社内用だし、「そんなことやったらダメ!」と言ってくる人がいなければ、やってもいいと思います。
「単票形式(カード形式)」←→「帳票形式(リスト形式)」←→「データシート形式(Excelシート似形式)」が実現できると、データの見え方が違う・変わるだけでもなんとなく、ヒントを発見できることがあります。
毎回必ずそう、とまでは言えませんが、とにかく便利なので(02)のような疑似的なカード画面を、帳票形式のフォームで作る方法をおすすめします。
このフォームをメインフォームに埋め込んでサブフォームとしたときも、使いやすくなるので是非、一度、お試し頂きたいと思います。
これはこの当時のVisual Basic 6 にもできないことでした。
多分、今のVisual Basic でもできないと思います。
Excelはもちろん、Visual Basic でも、この3タイプの切り替え画面で、かつ、「どこでもSQLを使える仕様・いろんな設定を変えやすい仕様に作ろう」と思うと、プロの方でも数日か一週間はかかるかもしれません。
データの入力用のフォームに限って「だけ」は、フォームの作成効率は、Accessが圧倒的に良いです。
Access2000ではデフォルトでそれが私たち素人でも簡単に・・・とは言いませんが、慣れればそれほど大きな苦も無く、できるようになっています。
ちなみにですが、「データシート形式(Excelシート似形式)」のフォームは、Excelシート状なのに列ごと(というべきか行ごと?というべきか・・・)に入力チェックのようなプログラムを埋め込むこともしやすいし(データベーストリガー?のようなことができます)、列の入れ替えはExcelよりラクだし、特定の列の固定をした見せ方もできますので、Excelに似た操作性もあり一覧性にももちろん優れますので、これに切り替えられるようにしておくことはすごく使いやすくなると思います。
Excelにデータをコピぺするときも結構ラクチンですし!
そう多くないデータ量なら「すべて選択」と「コピペ」ですぐにExcelにデータ貼り付けできます。
(Excelに貼り付けたあとは、必ずすべてのセルの セル書式の「折り返して全体を表示する」のチェックを外します。でないとExcel側がメチャクチャ動作が遅くなってしまうので・・・)
Accessが「零細用ビジネス用の入力用フォーム作成に特化したソフト」、というのはこういった一面もあるからです。
データを処理する場合、この3タイプの画面に切り替わる、というのはすごく便利です。
他のバージョンのAccesはどうなのかわかりませんが、Access2000ではそういうことができます。
あと、メインフォームとサブフォームという形でフォームを常に作成すると、サブフォームを好きに入れ替えたり、サブフォームの中身のデータを好きに入れ替えたり、ということもできるのでお勧めです。
「メインフォームとサブフォームという形でフォームを作る方法を常用する」という決められたかたちでフォーム作成をすることで、フォーム作成に関する共用関数や共用部品を作りやすくなったりもします。
んん~、「常用」は言いすぎですか・・・
でもそれくらいのつもりでいると、ラクになると思います。
少なくとも、「近い将来を見据えた、作り変えや機能追加のしやすいフォームを最初から作り、コストを少しでもおさえる」ということには小さからず、貢献してくれます。
「3つのフォームに切り替えるフォームを多く使う」というのも、もちろん、TPOに合わせてで無理に使わなくてもいいわけですが、いずれにしましても、これも、「フォーム作成に関する共用関数や共用部品を作りやすくなる」ということにつながっていきます。
また Accessの場合、「出来合い機能」の「フォームフィルタ」「右クリックフィルタ」が、Excelのオートフィルタやフィルタオプションの機能と比べると「意外にも」、「かなり優秀」で、本当に使いやすく、プラス、こちらも数10倍効率が良い、プラス、操作ミスが少なくて済むので、こちらの面でも、「十数倍か数十倍、Accessのフォームは効率がいい」と言えると思います。(考えなくて済む)
AccessはExcelよりも自由が少ない分、かえって操作ミスがすごく少なく済みます。特に並べ替えとフィルタ機能で操作ミスが少なくてすみます。
また、フィルタに関しては段階的なフィルタ適用もとてもやりやすいです。段階的にフィルタを解除していくことはデフォルトではできませんが、右クリックメニュー用としてその機能も1つ作ってしまえば、あとはカセット式に全mdbの全フォームで使えます。(ExcelのPersonal.xlsのように。)
それと右クリックフィルタや自作の正方向・逆方向両方向のフィルタ機能を活用すれば、動的なフィルタ適用で数字やデータが移りかわっていく速度がExcelの2倍以上くらいになります。
(ただ、後述しますように「入力用フォーム」だけのお話ですけど・・・)
※「データの入力用のフォームに限ってだけは、フォームの作成効率は、Accessが圧倒的に良い」の、補足です。
Acccesはデータの入力用のフォームに限って「だけ」は効率が良いのですけど、その他のフォームはダメかもです。
特にドラッグを多用したいとかカレンダー形式の予定表のフォームとか・・・。
これは多分Visual Basic はもちろん、Excelにもまったくもって足もとにも及ばないと思います。
なんでAccessがこんな仕様なのかさっぱりわかりません・・・。
工程表の管理とかアホみたいに作れないです。
ドラッグで工程のガントチャートの長さが変えられるとかそういうことができません。
同様にカレンダー上の日をまたぐ予定のガントのドラッグもできません。
スマホアプリやタブレットアプリが作れることに対応するとか、グループウェアや工程表、予定表が作れるコントロールを追加するとか、どうしてフォームの機能がそういう方向に行かなかったのか、ほんとに残念です。
Access2000から16年も経っているのに、情けない程度のフォーム機能しかありません。
Accessはマイクロソフトさんに捨てられたなーと2007の時点で思いました。
Accessにはほんとうにお世話になっていてすごくいいソフトなのにもったいない・・・と思います。
マイクロソフトさんって、Microsoft Queryでもそうですけど、自分たちの作るソフトを過小評価しすぎと言いますか、進化させたくないというか、もとからコンシューマ向けにはまったく力を入れない体質なのかもしれませんね・・・。企業ユーザーさんにしか目が行ってないように思えます。
「どうせ買わんやろ、個人でAccessなんて・・・。機能追加なんかせんでいいから、もうファイルメーカーさんにおまかせしときましょう。」と思いながら作ってるとしか思えないほどの進化の無さです・・・。
なぜ自分たちの作っているソフトをもっと誇りをもって使いやすくブラッシュアップしていかないのか不思議です。
レポートの帳票出力機能なんてほんとに良いので、罫線引きやすく改良する、印刷結果で線と線の間に隙間ができないようにする、という改良をするだけで、今の10倍は使いやすくなると思います。
それをしない体質・・・悲しいですね。