『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

Excelで作られている社内資産情報の台帳があるのですが、何千行にもなり、
しかもセルにVlookupやINDEX、配列関数等、色々な関数を書かなければならず、
開くのだけで1分くらい、保存するには10分くらいかかってとても使いづらいです。

Accessは使ったことがないですが、Accessでデータベースを設計して作り直した
方がいいのではないかと提言したところ、猛反対にあいました。

Accessで作ると、本人はできても、周りの人や引き継ぎの人が操作できなくなる、
そのExcelは昔から使われていて、変更すると色々なところに支障が出る、
データベースの設計もしたことないくせに偉そうなこと言うな、等々。

実際に社内でも、一度Accessで作られたけれど使い勝手が悪く、その後Excel管理に
戻ってしまった台帳がたくさんあります。

ほとんど使ったことはないのですが、Accessってそんなに使えないのでしょうか。

できればより使い勝手の良い台帳にしたいと思いますが、Accessで作り直そうとすれば
おそらくはそれなりに時間がかかる作業であり、上司を納得させるのが難しいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

つうか、エクセルをデータベースみたいに使うほうがよっぽどつかえない。


エクセルの表でVlookup関数が使いたくなったら、私は迷わずアクセスにする。
エクセルで何とかできる程度のことなら、そんなに構えなくても、気軽にアクセスが使えるよ。
#1さんのご意見にことさら意を唱えるつもりはないけど、でも、ちょっと大げさじゃないかなぁ。

まずはクエリをつかえるようになればいいと思うな。
クエリこそがデータベースのかなめだからね。

とはいえ、みんなが使いたくないものを無理やりに使わせるわけにはいかない。
みんな新しいことを覚えたくないんだよ。
察するところ、エクセルおじさんばっかがいる職場じゃない?ワードを使う場面でも、パワーポイントを使う場面でもみんなエクセルで押し通す人のことを言っているんだけど。
余談だけど、そういう人がエクセルのことよく知っているかというとそうじゃなくて、ピポットテーブルとかいうと、?????? だったりするんだね。

そうそう、いきなりアクセスに飛ばずに、ピボットテーブルを作ってみるのも手だよ。
そういう性質の表なら、だけど。

あとは、いつまでもエクセルにしがみついている人は、そのままにしておいてあげて、あなただけアクセスに移行することもできるかもしれない。
エクセルのシートをアクセスから呼び出すことができるから(アクセスにリンク貼り付けする)、データはエクセルに入れたままにして、データの処理はアクセスでするんです。
もっともシートが、きちんとデータベースで処理できる形式になってなければいけないですけどね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
上司と職員を飛ばして部長にプレゼンして承諾してもらい、
部長から上司と職員を説得してもらうことでAccess化ができることになりました。

お礼日時:2013/03/16 16:15

>>ほとんど使ったことはないのですが、Accessってそんなに使えないのでしょうか。



単純にAccessだけの機能でExcelの表を置き換えようとすると、使いずらいものになることが多いと思います。
きちんとデータの正規化など、データベース設計して、さらにシステム設計、プログラム設計~プログラミング、テストし、さらにエクセルのデータ移行などをすることが必要となると思います。
そして、Accessではなく、SQLServerなど、もう一段上のデータベースを使い、C#やVBなどの言語を使って開発することになるかもしれません。

ですから、相応の予算と開発期間を準備せず、中途半端にやると、以前のようにExcel管理に戻ってしまう可能性が大です。

>>Accessで作り直そうとすれば
おそらくはそれなりに時間がかかる作業であり、上司を納得させるのが難しいです。

多額の予算も必要ですし、時間もかかるってことで、上司というか経営陣を納得させることができないなら、諦めるしかないでしょうね。
なお、資産管理であれば、オリジナルソフトではなく市販ソフトもあると思いますので、要望を満たすソフトを選んで導入するって方法もあると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
上司と職員を飛ばして部長にプレゼンして承諾してもらい、
部長から上司と職員を説得してもらうことでAccess化ができることになりました。

お礼日時:2013/03/16 16:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q社内SEです。機種、ライセンスなどエクセルで管理しているのですが。。

300人程度の会社で社内SEをしています。
下記項目をエクセルで管理しています。
*ユーザー名
*PCの機種
*PC番号
*型番
*PCのシリアル
*ユーザー名
*あるソフトウェアのライセンスキー <--これが一番のメイン
*その人の内線番号

300人のこれだけの項目をエクセルで管理しているのですが、すぐぐちゃぐちゃになってしまいます。

Aさんの内線が変わって、Bさんが退職。CさんとDさんは新しいソフトウェア買った。
さーて、これだけ変える作業なのに、途中に話しかけられたら、そのあと
「あれ?どこまでやったっけ?えーっと。あれ、この人内線変わって。えーっと、、」となります。分かりますよね??

簡単に管理できるソフトって無いですか?もちろんフリーで。

Aベストアンサー

状況がなんとなく分かりました。
一番の問題は”データの正規化”が全くなされていないというところに有ります。データの正規化については参考URL、または該当の語句でネットを検索してみてください。

例として簡単な正規化を考えました。
ここでデータの正規化を行うために情報をグループ化します。
○ユーザグループ
*ユーザー名
*その人の内線番号
*PC番号

○PCグループ
*PC番号
*PCの機種
*型番
*PCのシリアル

○ライセンスグループ
*PC番号
*ソフト名(新規 ・いままではシート名になると思いますが、それをここで管理するようにします。)
*ユーザー名
*あるソフトウェアのライセンスキー <--これが一番のメイン

単に管理を行うだけでしたら、このようにシートを分ければデータの重複は無くなります。
ただし帳票として出力する場合などExcelで行うときは関数やマクロなどを使う事となりますのでちょっと敷居が高くなるかもしれません。
単純にシートを作るのでしたらPCグループのシートにてユーザグループのシートからLOOKUP関数でPC番号を検索し、見つかったユーザの列を内容を表示させれば良いですね。
そして肝心のライセンスグループのシートですが、前述のPCグループシートから該当のPC番号をやはりLOOKUP関数でそのPC情報を検索して表示させれば良い事になります。
(ユーザにユーザ番号をつけてPCグループにユーザ番号を付加するほうが正規化としてはキレイだとは思いますが、今回は出来るだけ新しい項目を追加しない方向で考えて見ました。本当は使用ソフトも別シートにしても良いかも知れませんね。)
詳しくはLOOKUP関数の使い方などをヘルプ、または解説本などで参照しながら、別シートからの検索を実際にやって見てください。

また、このようなデータを正規化し、情報を共通項目(キー)にて接続(リレーション)することを一番得意とするのはデータベースソフトです。
やはりその中ではAccessが一番敷居が低いと思いますので、資産が増えていく前に一度検討して見たらどうでしょうか?

参考URL:http://www.netlaputa.ne.jp/~hijk/study/ae/datnom.html

状況がなんとなく分かりました。
一番の問題は”データの正規化”が全くなされていないというところに有ります。データの正規化については参考URL、または該当の語句でネットを検索してみてください。

例として簡単な正規化を考えました。
ここでデータの正規化を行うために情報をグループ化します。
○ユーザグループ
*ユーザー名
*その人の内線番号
*PC番号

○PCグループ
*PC番号
*PCの機種
*型番
*PCのシリアル

○ライセンスグループ
*PC番号
*ソフト名(新規 ・いままではシート名になると思...続きを読む

Qアクセスがエクセルより優れている点

エクセルはある程度操作ができるようになりました。現在、アクセスを勉強していますがアクセスがエクセルより優れている点が今一つ実感できません。そこで、アクセス派の方に質問です。
「この点は、アクセスの方が絶対優れているよ。」という使用例がありましたら教えてください。使わないと忘れてしまいますし、どんどん利用していきたいものですからよろしくお願いします。

Aベストアンサー

Excel(に代表される表計算ソフト)とAccess(に代表されるデータベースソフト)の違いを一言で言うと,

「同一のものを同一のものとして識別できるかどうか」

ということになるかと思います。

 これだけじゃわかりにくいと思いますので,例を挙げてみます。

 例えば「職場連絡先一覧」という表と,「プロジェクト進行度管理」という表と,「プロジェクト予算管理」という表があったときに,「職場連絡先一覧」表に載っている山田太郎さんは,「プロジェクト進行管理」表のプロジェクトAとBの担当として記されている山田(太)さんと同じ人物である,あるいは「プロジェクト進行管理」表のプロジェクトAというのは「プロジェクト予算管理」表のproject-Aと同じものである,ということを,データベースソフトは意識することができるのです。

 ですから,例えば「プロジェクト予算管理」表からproject-Aを検索し,それを使って「プロジェクト進行管理」表から現在の担当者である山田(太)さんを検索し,さらにそれを使って「職場連絡先一覧」表から山田太郎さんの連絡先を(複数)取り出し,同時に「スケジュール管理」表から山田太郎さんが今日は出張であるという検索結果を得て,その結果プロジェクトAの現在の進行状況に対する問い合わせを山田太郎さんの携帯電話に対して行う,という様な処理を自動化できるようになるわけです。

 これが表計算ソフトだと,例えば「プロジェクト進行管理」表の山田(太)さんと「職場連絡先一覧」表の山田太郎さんが,同一人物なのか似た名前の別人なのかを,確実に弁別することは非常に困難です。

 もちろん,すごく手間をかければ表計算ソフトでも同様のことはできますが,上記のように複数の表を連携させる処理を行う場合,例えば同姓同名の人がいることを想定してプログラムを書かなければいけないなど,データベースソフトに比べるとどうしても処理が煩雑になります。

 また,なにをどれくらい同一のものとして扱うのかということも,データベースソフトでは細かく制御できます。例えば,「鉛筆」を単に「ボールペン」と区別できればいいのか,それとも「三菱の鉛筆」と「トンボの鉛筆」を区別したいのか,それとも「1月20日に納品された三菱の鉛筆」と「2月8日に納品された三菱の鉛筆」を区別したいのかに応じて,その識別の粒度を変えることも,データベースソフトなら可能になります。

 もちろん,こうしたデータベースの能力を活用するためには,十分注意を払ってデータベースを設計する必要があり,したがって事前の準備にかかるコストは表計算ソフトより大きくなります。

 ですから「同一のものを同一のものとして識別する」必要があるような,柔軟で複雑な処理を頻繁に行う場合はデータベースソフトを,単にあるデータを表として整理するだけのシンプルな用途には表計算ソフトを,というように使い分けるものではないかと思います。

Excel(に代表される表計算ソフト)とAccess(に代表されるデータベースソフト)の違いを一言で言うと,

「同一のものを同一のものとして識別できるかどうか」

ということになるかと思います。

 これだけじゃわかりにくいと思いますので,例を挙げてみます。

 例えば「職場連絡先一覧」という表と,「プロジェクト進行度管理」という表と,「プロジェクト予算管理」という表があったときに,「職場連絡先一覧」表に載っている山田太郎さんは,「プロジェクト進行管理」表のプロジェクトAとBの担当と...続きを読む

QIT資産管理台帳の作り方を教えてください!

PCやサーバなどの資産管理台帳を作るよう言われましたが
どんな項目を載せればいいのか、いまいちよくわかりません。
また、Excelで作ればいいのか、Accessなのか、
それともExcelVBAなのかAccessVBAなのか・・・
ちなみにVBAの知識は全くありませんので、
変な質問をしているのかも知れません。

とりあえずPCのメーカやPCの名前、資産管理番号メモリや
HDDの容量、使用者、購入かリースかの区分、購入ならば購入日、
リースならばリース期間、インストールしているソフトウェア、
プロダクトキーなどが必要なのかなとは思うのですが、
これをExcelで管理するとなると効率が悪そうな気がしました。

DB(Accessは未経験)の基礎的な知識はあるのですが、
マスタで管理したほうがいいのではないかと思ったのです。

あと、ライセンス管理台帳も必要です。
これは別途作ったほうが良さそうな気がしました。
お知恵を貸してください!よろしくお願いいたします。

Aベストアンサー

何台位管理されているのですか?

もし結構な台数ならば、インベントリ情報収集ツールを利用した方が無難です。

台数が肥大すればするほど、運用や保守に手間が掛かりますから。

安めのツールを紹介します。
http://www.clcopen.com/itam/itamscan/gaiyou.htm

参考URL:http://www.clcopen.com/itam/itamscan/gaiyou.htm

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QACCESSの既存テーブルに、EXCELデータをレコードとして追加する事は可能ですか?

ACCESSの既存テーブルに、EXCELのデータをレコードとして追加する方法はありますか?
又は方法を説明しているサイト等ありましたら教えて下さい。

EXCELのデータは、シートの1行目に各項目名、2行目以降に各データが順次入力されている状態です。
尚、EXCELの項目名と、ACCESSのフィールド名は一致していない状態です。
例えば、
EXCELの項目名:「予約ID」、「予約名」、「予約日」
ACCESSのフィールド名:「rsv_id」、「rsv_name」、「rsv_date」
のような感じです。
ACCESSのフィールド「rsv_id」には、EXCELの「予約ID」項目のデータを入れなければいけません。
こういうことは出来るのでしょうか?

※マクロは使わないようにしたいです。

いったんACCESS上で、EXCELのデータを元に新規テーブルを作成してから、
その新規テーブルからデータを抽出して、既存テーブルにレコード追加するような、SQLを書けばできるでしょうか?

Aベストアンサー

1.Excelのデータを、Accessにインポートします。
2.クエリ/新規作成/デザインビュー、テーブルの表示で、1でインポートしたテーブル(T_Excelとします)を設定し、各フィールドをクエリのデザイングリッドにドラッグします。
3.ツールバーのクエリの種類で、追加クエリを指定すると、追加先のテーブルを訊いてくるので、既存テーブル(T_Access)を指定します。
4.レコードの追加欄に、対応する既存テーブルのフィールド名を指定します(選択肢が表示されますので、そこから選択します)
5.ツールバーの「!」アイコンをクリックするか、クエリを一旦保存・終了後、ダブルクリックして実行すると、レコードが追加されます。
SQLを表示させると、下記の様になりました。
INSERT INTO T_Access ( rsv_id, rsv_name, rsv_date )
SELECT T_Excel.予約ID, T_Excel.予約名, T_Excel.予約日
FROM T_Excel;

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QPC管理台帳のアイディア

会社でPCの運用管理を任されることになりました。
ユーザは600くらい(管理するのは4人)で、以下のことをやろうと思います。
1.PC固体の識別
 →ユニークな管理番号をラベリングし、それを管理番号とする
2.PCと使用者の紐付け管理
 →だれがどのPCを使っているか、又、どのPCは誰が使用しているかなどの探索がリアルタイムで把握できるようにする。
3.PCのHistory管理
 出荷~使用者への提供~回収~廃棄までの経過を固体別に追跡可能なように記録を残す
4.PCの貸し出し管理
 (1)貸し出し期間、(2)貸し出しの実行日、(3)申請者と対応者(4)貸し出した該当PC(4)回収日
5.PCの在庫管理
 出荷可能なPCのリアルな把握

 私の中では、これらを管理するには、Accessでテーブルを作成し、管理していくのがもっとも良策だと思います。
テーブルのイメージとして、、
 1.社員マスタ(社員番号、氏名、所属部署、勤務地)
 2.PCマスタ(管理番号、機種、購入日)
 3.PC入出庫データ(管理番号、入出庫日、使用者)
 4.貸し出しデータ(貸出日、申請者、対応者、回収日)
といった風に考えています。
 現在は、PCの設置、回収、廃棄、貸し出しは、申請書ベースで管理しており(それも統一化されていません)、横断的なデータ管理ができていません。半年に一度、PC一斉調査を行っていますが、移動の多い時期や、PC入れ替えの時にはほとんど役に立ちません。このままでは、担当者が入れ替わったときなど対応ができなくなるので、共有財産としてPC管理情報を残したいと思っています。
ベンダーさんに相談すると、QNDなどを進められますが、あれは、こういったPC運用体制ができあがって初めてその効果を発揮するものと思います。現在叩き台作成中ですが、ツール面、運用面でよきアイディアがあればアドバイス願います。

会社でPCの運用管理を任されることになりました。
ユーザは600くらい(管理するのは4人)で、以下のことをやろうと思います。
1.PC固体の識別
 →ユニークな管理番号をラベリングし、それを管理番号とする
2.PCと使用者の紐付け管理
 →だれがどのPCを使っているか、又、どのPCは誰が使用しているかなどの探索がリアルタイムで把握できるようにする。
3.PCのHistory管理
 出荷~使用者への提供~回収~廃棄までの経過を固体別に追跡可能なように記録を残す
4.PCの貸し出し管理
 (1)貸し出し期間、(2)貸...続きを読む

Aベストアンサー

DB化するには、まだ情報が不足していますね。

1)はこんなものでしょうが、連絡先の電話番号もしくは内線番号が必要かと思います。また転勤(異動)履歴は必要ないでしょうか?
2)PCマスタが一番大事ですね。購入日もですが、リース物件でしたらリース開始日と終了日が必要でしょう。またリース会社とリース番号もですね。別に故障履歴も必要かと思います。
さらに、インストールしているOSとアプリケーションの種類及びバージョンの管理が必要です。
3)は入庫日と出庫日を別にした方がよさそうです。
4)管理番号を追加された方があとあと便利かも。

管理と言っても、管理するときの業務の流れを考えてシステムの設計を行ってくださいね。頑張ってよいシステムができますように。

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

QAccess フォームで複数テーブルの同時入力

フィールド項目が多い為に複数のテーブルに分けて
同じフィールド名 [品番] で1対1でリレーションを組んでいます。
フォームの新規レコードで品番を入力の時に
各テーブルの品番に入力するのにはどうしたらいいでしょうか?
後々のことを考えると1つのテーブルにまとめたほうがいのでしょうか?
フィールドが300ぐらいあるのでテーブルに分けたほうがわかりやすいので
現在は10テーブルに分けています。

よろしくお願いします。

Aベストアンサー

> 1対1でリレーション
なんだから、一まとめにするクエリを作ってそのクエリを入力対象にするとか。
1対nだと、更新できないクエリになります。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング