• ベストアンサー

acces

access初心者です。教えて下さい。 access2000を使って社員情報登録システムを作っています。 社員情報クエリには、社員名、所属部署などの他に、いくつかの資格のフィールド を持っており、これはその資格の保有か非保有を表わすyes/noタイプのフィールド です。(フォームではチェックボックスを使って入力します。) この社員情報の一覧表を出力するのですが、その際フォームを使って抽出条件を 選択したいのです。 具体的には、そのフォームには各種の資格が明示してあり、チェックをつけた 資格を1つでも持つ社員を抽出して、一覧表出力するというものです。 自分なりに考えたところでは、フォームでつけたチェックボックスの情報を クエリの抽出条件の欄にリンクすれば、とか思ったのですが、([forms]![ フォーム1]![chk資格1]...のような?)具体的な記述の方法がわかりません。 それとももっと良い別の方法があるのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>ご回答いただき、ありがとうございます。だいたいの流れは分かるのですが、初心者なもので 具体的にどう処理すればいいのかよくわかりません。 >フィルタ適用をどこで「はい」にするのか、イベント >プロシージャの組みこみ方、レポートをデザインで >開けるボタンの作り方など・・。 >(ほとんど全てですね・・、申し訳ないです。) >そのへんのレベルからご伝授してもらえると嬉しいです。 >よろしくお願いします。 1.レポートが無ければ社員情報クエリを元にレポートを作成しておいてください。 (1)データベースウインドウのレポートを選択 (2)ウイザードを使用してレポートを作成するをダブルクリック⇒”レポートウイザード”ダイアログボックスが表示されます。 (3)元になるクエリー(社員情報クエリ)を選択 (4)>>ボタンをクリック (5)次へをどんどんクリックし、最後にレポート名を入力し完了をクリック (6)作成したレポートがプレビューで表示されるのでこれを一旦閉じる。 2.フォームで、クリックしたら該当レポートをデザインビューで開けるようなボタンを作ってておきます。 (1)データベースウインドウのフォームを選択 (2)作成しておいた資格情報チェックフォームを選択 (もし作ってなかったら”デザインビューでフォームを作成”をダブルクリックし、作成しておいてください。) (3)データベースウインドウのデザインのボタンをクリック (4)”ツールボックス”ツールバーのコマンドボタンをクリック (5)デザインモードで開いているフォームの任意の位置をクリック (6)コマンドボタンウイザードで種類:レポートの操作、ボタンの操作:レポートのプレビューを選択し、次へをクリック (7)先ほど作成したレポートを選択し、次へをクリック (8)多分文字列のほうがわかりやすいので文字列を選択する。 (9)ここで”レポートのプレビュー”と書いているところをマウスでドラッグし反転させ、Ctrl+Cキーでクリップボードにコピーし、次へをクリック (10)”コマンド*”という文字が反転しているのを確認しCtrl+Vで貼り付け、完了をクリック 動作確認  標準ツールバーの中にある”ビュー”ボタンをクリックするとフォームの表示がデザインモードから通常の表示になりますので、先ほど作成したボタンをクリックしてレポートがプレビューで開くのを確認してください。 3.レポートをデザインビューで表示し、プロパティでフィルタ適用を”はい”とします。 (1)先ほどの動作確認でレポートが開いていると思いますのでこのまま標準ツールバーのビューボタン(デザインボタンの形)をクリックするとレポートがデザインモードになります。 (2)レポートのタイトルの下にある黒四角をダブルクリックするとレポートのプロパティが表示されます。 (3)すべてのタブを選択してフィルタ適用の”いいえ”と表示されている欄をクリックすると欄の右に下向き三角が表示されるのでこれをクリックし”はい”を選択します。 4.レポートを開くときのイベントプロシージャを入力します。 (1)”レポートのプロパティ”ダイアログボックスの”イベント”タブをクリックします。 (2)開くときの空白の欄をクリックし、右にある下向き三角をクリックし、イベントプロシージャを選択します。 (3)下向き三角の右にある”...”ボタンをクリックするとVBEが起動します。 (4)Private Sub Report_Open(Cancel As Integer)とEnd Sub の間に次のプログラムソースを入力します。 Me.Filter = "資格1=" & Forms![資格情報チェックフォーム]![資格情報1チェック] & _ "Or 資格2=" & Forms![資格情報チェックフォーム]![資格情報2チェック] & _ "Or 資格3=" & Forms![資格情報チェックフォーム]![資格情報3チェック] '上で”資格1、2、3”はレポートのフィールド名です。 '資格情報チェックフォームはフォームの名前です。 '視覚情報1チェック、視覚情報2チェック・・・はフォームのチェックボックス名です。 (5)VBEのデバッグメニューからコンパイルを選択し、入力に問題ないか確認します。 (6)一応上書き保存しておきます。 (7)VBEのウインドウは閉じておきます。(後で閉じても可) (8)プロパティのダイアログボックスは閉じてじておきます。(後で閉じても可) (9)レポートのウインドウを閉じます。このとき保存しますかと聞いてきたら”はい”としてください。(この前に上書き保存をしていても可) 5.動作確認をしてお望みの動作ができるか確認してください。  フォームでチェックボックスにチェックをつけた後ボタンをクリックするとフィルターされた一覧表プレビューが表示されます。  ただしフォームのチェックボックスをクリックしないでボタンをクリックするとエラーとなるので、フォームを開いたときチェックボックスを初期化する処理をいれるか、チェック用のテーブルを作成しておいてフォームのレコードソースをそのテーブルにしておくなどの処置は必要でしょう。 なおプログラムの修正でVBEを起動するのは、標準ツールバーのコードボタンでも可能です。 以上ご参考まで

candie-o
質問者

お礼

返事がおそくなりすいませんでした。 丁寧な回答、本当にありがとうございました。 いろいろ試行錯誤のうえ、なんとか大丈夫そうです。 今回はいろんなテクニックの入口を覗く事が出来たようで、とても有意義でした。 また機会がありましたらよろしくお願いします。

その他の回答 (2)

回答No.2

一覧表はレポートという前提でお答えします。 簡単かどうかわかりませんがレポートを開くときのイベントで フィルターを記述する方法があります。 レポートが無ければ社員情報クエリを元にレポートを作成しておいてください。  まずフォームで、クリックしたら該当レポートをデザインビューで開けるようなボタンを作ってておきます。  次にレポートをデザインビューで表示し、プロパティでフィルタ適用を”はい”とします。  最後にレポートを開くときのイベントプロシージャを入力します。(例えば下のような) Private Sub Report_Open(Cancel As Integer) Me.Filter = "資格1=" & Forms![資格情報チェックフォーム]![資格情報1チェック] & _ "Or 資格2=" & Forms![資格情報チェックフォーム]![資格情報2チェック] & _ "Or 資格3=" & Forms![資格情報チェックフォーム]![資格情報3チェック] End Sub 上で”資格1、2、3”はレポートのフィールド名です。 資格情報チェックフォームはフォームの名前です。 視覚情報1チェック、視覚情報2チェック・・・はフォームのチェックボックス名です。  フォームでチェックボックスにチェックをつけた後ボタンをクリックするとフィルターされた一覧表プレビューが表示されます。  ただしフォームのチェックボックスをクリックしないでボタンをクリックするとエラーとなるので、フォームを開いたときチェックボックスを初期化する処理をいれるか、チェック用のテーブルを作成しておいてフォームのレコードソースをそのテーブルにしておくなどの処置は必要でしょう。 以上ご参考まで

candie-o
質問者

補足

ご回答いただき、ありがとうございます。 だいたいの流れは分かるのですが、初心者なもので 具体的にどう処理すればいいのかよくわかりません。 フィルタ適用をどこで「はい」にするのか、イベント プロシージャの組みこみ方、レポートをデザインで 開けるボタンの作り方など・・。 (ほとんど全てですね・・、申し訳ないです。) そのへんのレベルからご伝授してもらえると嬉しいです。 よろしくお願いします。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

クエリで簡単にyes/no型を抽出するには 資格のフィールドがいくつ有るのか質問内容では分かりませんが、例えば5つ 有ると仮定してchk資格1~chk資格5クエリに資格の数をカウントするフィール ド[資格数]とか作ってchk資格1~chk資格5を加算してみてください。 資格数:[chk資格1]+[chk資格2]+[chk資格3]+[chk資格4]+[chk資格5] 1~5までの全ての資格にYesが有れば-5の値が計算出来ます。 YesがチェックされているフィールドはTrueが入っているはずなので-1の返値が あるのでそれを合計すれば資格を1つ持っている人は-1、3つ持っている人は -3となるので、その[資格数]の抽出条件に<0で抽出できます。

candie-o
質問者

補足

ご回答いただき、ありがとうございます。 僕の説明不足ですね・・。 レポート出力用のフォームをつくり、そこから抽出したい 資格にチェックをつけます。(チェックをつけるのは複数可) チェックをつけた資格を1つでも持ってる人を抽出したい、 というつもりだったのですが・・。 お手数おかけしますが、何卒よろしくお願いします。

関連するQ&A

  • フォームのテキストボックスで抽出したい

    データベース一覧の抽出条件として、フォームのテキストボックスを使用することができるのでしょうか?もし、でしるのでしたら、抽出条件の入力方法を教えて下さい。具体的にいうと、「名前」「住所」「入社年月日」のフィールドを持つ「名簿」テーブルがあります。次に抽出クエリ「Q_抽出名簿」を作成し、入社年月日が未入力のもののみを抽出させました。この「抽出名簿」をベースにして、フォーム「F_抽出名簿」を作成しました。このフォームを開き、「入社年月日」テキストボックスに新しく日付が入力されたもののみクエリで抽出したいのです。わかりにくい箇所は補足説明しますので、是非、教えて下さい。

  • Accessのチェックボックスでチェックしたデータのみ更新するには。

     Access2000で顧客管理のDBを作っています。年齢などの条件をフォームから入力し、抽出結果をレポートで出力しています。この度、顧客情報のテーブルに「最終DM発送日」というフィールドを追加したいと考えています。  顧客の抽出は主に、DM発送の顧客の絞込みのため行っています。抽出した顧客一覧をフォームで表示し、顧客毎にチェックボックスを設け、実際DMを送ったかどうかのチェックを行いたいのです。が、チェックボックスで得た結果の使い方がよくわかりません。どのように、テーブルに反映したらよいのでしょうか?  どうかよろしくお願い致します。

  • アクセス チェックボックスとクエリ

    いつもお世話になっております。アクセス初心者です。 あるフォームのチェックボックスのオンオフとコンボボックス、 クエリの選択条件が思うように連携できなくて困っています。 やりたいことは、、、フォームのチェックボックスが、 ON(True)ならば、 フィールドにコンボボックスのキーワードを含むレコードおよびフィールドが空白のレコードを抽出し、 OFF(False)ならば、 フィールドにコンボボックスのキーワードを含むレコードのみでフィールドが空白のレコードは抽出しない、 としたいのですが…。 IIfやSwitchで式を書きましたが、チェックを入れても外しても、どちらも抽出件数が0件になります。 クエリの実行は、コマンドボタンで別のフォームを開いています。 (IIfでは、エラーが出ているのか、チェックを入れた時『~キャンセルされました』と出ます。  IIf(…,…,IIf(…,…,…)) という感じで書きました。) Switchの時のクエリの抽出条件の式は、次のような感じです。 Switch([Form]![チェックボックス]=True,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*" Or Is Null,[Form]![チェックボックス]=False,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*") ( Like の前の『([テーブル名].[フィールド名])』は、式をビルドすると、勝手に追加されてきます。) このようなことはできないのでしょうか? 別の方法が必要でしょうか? すみませんが、教えてください。宜しくお願い致します。

  • ACCESEのビルドの使い方について

    フォームでテキストボックスを2つ作成して、 そのテキストに入力した条件を抽出させるようなことを やりたいのですが、クエリの抽出条件を入れられるところに ビルドで作成すると思いますが.. (テキストボックスごとにフィールドは違うのを見るようにしてます) データ抽出するクエリの作成方法(ビルド)で、 テキストボックスに入力されていない場合、 下記のような構文になると思います。 iif(isnull(forms!フォーム1!date1),,) iif(isnull(forms!フォーム1!date2),,) 上記の処理で、NULL(または入力なし)だった場合、 テキストボックスのクエリの該当フィールドに 作成した抽出条件を無視をするような処理をいれたいのですが、 テキストに入力して抽出してみると 何も抽出できなくて困ってます。 参考になるURLがあったら教えてください

  • テキストボックスにクエリ結果を表示させたい

    フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2   A   |  10   B   |  20   C   |  30   D   |  40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?

  • クエリーで全部のデータを抽出する方法

    アクセスのクエリーでデータを抽出する時、具体的にはフォームでデータを入力し抽出するのですが、たとえばフォームのテキストボックスに数字を入れないとそのクエリーのフィールドは抽出がかからないようにしたいのです。(抽出フィールドが1つなら数字をいれなければクエリーのデータすべてが表示される) ----------------------------------- フィールド   A      B     c テーブル   テーブル1 テーブル1 テーブル1 抽出条件    []    [] または    ---------------------------------- 上はクエリーのデザインですがクエリーをひらくと抽出条件をきいてきますがA列は何も入力しないでB列では1と入力するとBの列に1の入ってるレコードを表示させたいのです。(もし空欄が無理ならAの列の時何かある文字を入力すると全部表示になる、でもいいです。) まわりくどくなりましたが、アクセス超入門者です。よろしくおねがいします。

  • クエリの検索条件をフォームで指定したいのです

    OS winXP Access2003です よろしくご指南お願いいたします。 フォームのコンボボックスの選択で あり なしを選択してクエリの抽出条件のフィールドのデーターのある物無い物を分けて表示させたいのですがうまくいきません   フォームのコンボボックスの選択で あり の時  フィールドの抽出条件 値  ‹› ""   フォームのコンボボックスの選択で なし の時  フィールドの抽出条件 値  Is Null をそれぞれ入れたいのですが どのようにすれば良いのか ご指南ください

  • Access2000:[パラメータの入力]ダイアログを表示されないようにするには

    初心者です。よろしくお願いします。 フォームが完成したあとで、クエリ/テーブルから削除したいフィールドが発生してしまいました。 削除したいフィールドのコントロールをフォームから消した後に、クエリ/テーブルからフィールドを削除しました。 削除したあとにフォームを開いたところ、[パラメータの入力]ダイアログボックスが表示されてしまいました。(メッセージは"開こうとしているフォーム名" クエリ:"削除したフィールド名"です) このダイアログボックスが表示されないようにしたいのですが、どうすればよいでしょうか。 ちなみに削除したフィールドは単なるテキスト型で、選択クエリでも抽出条件等は設定していませんでした。 初歩的な質問ですみませんが、よろしくお願いします。

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • Accessデータ並べ替えをハイブリッドにしたい

    [使用しているツール] Access 2007 PROFFESSONAL [やっていること(現状)] 1つのテーブルで複数のクエリ(複数のフィールドの並べ替えが必要な為)と複数(クエリと同数)のフォームを作成して、フォームの数だけコマンドボタンを作成してフォームを一覧表示で開いています。 [やりたいこと] 1つのテーブルで「1つのクエリ」による複数のフィールド(名)を切替えて、「1つのフォーム」で表示(一覧)させたいと思っています。 例えば、テーブル名:顧客名簿(取引先、県名、商品名、入庫日)、クエリ名:顧客名簿クエリ、フォーム名:顧客名簿一覧としたとき、(取引先、県名、商品名、入庫日)をコンボボックス等で切り替えることで、指定したフィールド(名)で並び替えられたデータを「フォーム名:顧客名簿一覧」に表示させられないでしょう。 [考えたこと] コンボボックス(名前:コンボ1)を作成し値集合ソースに「”取引先”;”県名”・・・・。」と入力、クエリ「顧客名簿クエリ」の抽出条件欄にビルダを起動させて「・・・コンボ1」を指定、フォーム「顧客名簿一覧」のレコードソースにクエリ「顧客名簿クエリ」を選択しました。しかし、フォーム「顧客名簿一覧」を開いても、データは抽出できずデータなしの表示で先へ進めていません。 以上ですが、宜しくお願いします。

専門家に質問してみよう