Accessのフォームを使って住所録から,データを抽出し,その結果をまず表示,その後ラベルシールに印刷をしたいのですが,フォームでの検索は,テーブルのすべての項目について複数の項目を同時検索をできるようにしたいです。
テーブルの構造はごく普通の住所録です。データ件数は8万件ほどです。
どういう方向で作業を進めるべきか分からないのですが,こういった場合は,まず,検索用のフォームを作成し,コマンドボタン(検索・印刷)を配置して,
それに対してイベントかマクロの記述をするんだろうなとは思うのですが・・・
私が思うに,抽出結果を格納するテーブル・検索フォーム・ラベル印刷用のレポートが必要なのだろうと思いますが,それらが何でつながっていくのかが分かりません。参考書などでは,一つ一つのことが別々に書いてあって作業の全体像が分かりません。作業の方向と必要なスキルが同程度などか詳しい方教えてください。

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

A 回答 (2件)

まず、検索結果を格納するテーブルはなくても大丈夫ではないでしょうか。



色んな方法が考えられますが、自分だったらこうするという方法で...

仰るとおり、検索用のフォームを作成します。検索結果のフォーム、ラベル用のレポートは条件を考えずに全部のレコードを表示するようなレコードソースでいいと思います。検索条件になるフィールドは全部持たす必要がありますし、フォームやレポートに表示する必要がなくても、非表示で配置して下さい。

検索条件フォームで入力した条件を元に、検索ボタンのクリック時のイベントプロシージャで
Dim strWHERE As String
strWhere=""
strWhere=strWhere &"([名前] ='"& forms![F_検索条件]![名前] &"')"
strWhere=strWhere &"AND (都道府県='"& forms![F_検索条件]![都道府県] & "')"
みたいなWHERE句を生成し、その条件で検索結果のフォームをOpenFormで開きます。

ラベル印刷ののレポートも同様ですね。検索結果から印刷するようにするのでしたら、検索結果のフォームに印刷ボタンを配置して、そのクリック時のイベントプロシージャでOpenReportのWHERE句の引数部分に上記の条件を指定して下さい。
    • good
    • 0

一応、一通りのことを書きます。



(1)条件入力と結果表示用のフォームを作成。これはひとつのフォームでいいでしょう。このフォームには複数の条件入力フィールドと[検索]ボタン、結果表示用のフィールド、[印刷開始]ボタンがあればいいでしょう。アプリを終了するボタンもあるとカッコがつくでしょうか?
(2)[検索]コマンドボタンを配置し、クリック時イベントにて、条件に入力された値を元にしたSQL文を構成・クエリを作成します。
(3)結果表示のフォームのソースは(2)で作成したクエリにします。検索結果をわざわざテーブルに保存する必要はないでしょう。テーブルにする場合、結果をインサートしないといけなくなるので、処理が遅くなります。
(4)検索結果表示後は、[印刷開始]ボタンのクリックイベントでレポートを開けばよいです。このレポートのデータソースは、もちろん検索結果のクエリです。

カンタンに一通りの流れはこんな感じですが、当然、条件入力値のチェックだったり、検索結果0件時は印刷しない、とかいうロジックも必要です。
マクロでもできるでしょうが、ココはひとつVBAをゴリゴリ書いて、素敵なものを作っちゃってくださいな。
不明な点はまた書き込んでください。
    • good
    • 0

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

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

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

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

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

QACCESSで住所録

勉強のためにACCESSで住所録を作ろうと思っています。

データを入れたのちに

1 大学時代の友人
2 会社関係
3 親戚

というようにふりわけたいのです。

**************************

この場合
1 元の住所録テーブルに所属Noフィールドをおき、
  別に所属テーブルを作って所属Noフィールドと所属名フィールドで
  リレーションを組む。

2 所属名フィールドを必要分作ってチェックボックス形式にして
  「大学の友人」のところにチェックのある人を抽出する
  という方式にする。

3 フォームでデータベースを作成するときにドロップダウン方式にする
  (ただしこのやり方はわからない。できるなら教えてください)

どれがいいと思いますか?
また他に良い方法はありませんか?
ヴァージョンは2002です。

それとこの作った住所録で宛名印刷はできますか?
するにはどうしたらできるようになりますか?

なにせ初心者なのでサルでもわかるようにお願いします。
また一度書き込んだら補足がきてないかCHECKしていただくよう
よろしくお願いいたします。

勉強のためにACCESSで住所録を作ろうと思っています。

データを入れたのちに

1 大学時代の友人
2 会社関係
3 親戚

というようにふりわけたいのです。

**************************

この場合
1 元の住所録テーブルに所属Noフィールドをおき、
  別に所属テーブルを作って所属Noフィールドと所属名フィールドで
  リレーションを組む。

2 所属名フィールドを必要分作ってチェックボックス形式にして
  「大学の友人」のところにチェックのある人を抽出する
  という方式...続きを読む

Aベストアンサー

住所録と言うテーブルには、所属Noと言うフィールドは必須でしょうね、でなければ、分類するのに別な項目を設ける必要がありますね
で、もう一つのテーブル、所属Noと名称と、言うフィールドで出来ているテーブルとで、選択クエリーを作成してやれば、誰が何処の所属になるかの、一覧が出来ます

単に、振り分けるだけなら、この選択クエリーをデータソースにして、パラメータークエリー(選択クエリーの抽出条件にパラメーターを設定する事です)を作成してやれば、どの分類でも抽出可能ですね

後は、出来たパラメータークエリーをソースにして、レポートを作成してやれば、印刷レイアウトを自由に組めますよ

宛名印刷は、ここで色々書くより、ウィザードを起動してみた方が判り易いと思いますよ

>3 フォームでデータベースを作成するときにドロップダウン方式にする
↑これって、フォームでデータ入力をしたい、そう言う事ですか?
んで、所属Noフィールドにダウンリストを割り当てたい、そう理解して良いんでしょうかね?

その場合は、フォームのデザイン画面で、ツールボックスから、ダウンリストを配置し、そのソースを、所属Noテーブルにしてやれば良い訳です
勿論、所属Noテーブルに、主キーを設定してあれば常に並べ替えが行われたりしますけど、主キーを設定したくない場合は、選択クエリーを作成しておいて、Noフィールドに昇順、若しくは降順の設定をしてやれば、余計な制限に悩む事は無いです

大抵の事は、ウィザードで出来る筈ですので、ウィザードを起動してみて、それで判らない場合は、ヘルプを検索してみると、かなり詳しい事が記載されてますよ

勿論、ヘルプに書かれていない事も、山ほどありますけどね

住所録と言うテーブルには、所属Noと言うフィールドは必須でしょうね、でなければ、分類するのに別な項目を設ける必要がありますね
で、もう一つのテーブル、所属Noと名称と、言うフィールドで出来ているテーブルとで、選択クエリーを作成してやれば、誰が何処の所属になるかの、一覧が出来ます

単に、振り分けるだけなら、この選択クエリーをデータソースにして、パラメータークエリー(選択クエリーの抽出条件にパラメーターを設定する事です)を作成してやれば、どの分類でも抽出可能ですね

後は、出来た...続きを読む

Qアクセスで郵便番号にハイフンをつけて印刷したい

アクセスの得意な方、教えてください。
データベースの実データはハイフン無しの7桁の
半角数字の郵便番号を印刷する時、
「999-9999」と、3桁目と4桁目の間にハイフンを
入れタイのですが、どうやったらいいか分かりません。
レポートの郵便番号のプロパティの何処でどのように
設定すればハイフン入りで印刷できるのでしょうか??
教えてください!!

Aベストアンサー

一番てっとり早い方法としてオススメです。

1.レポートの郵便番号のプロパティ
2.[データ]タブの[定型入力]で右端のボタンをクリック
 (こんな形のボタンです。 [・・・] )
3.ウィザードで、「郵便番号」を選んで、「次へ」
4.ずっと「次へ」で「完了」

あっという間に簡単にできますよ。

QAccess DCountでの連番について

DCountで連番を追加したいのですが演算対象条件の記述方法が良く分かりません。
調査用品別販売データクエリの商品コードフィールドに対して連番を振りたいです。
商品コード、連番
00110 1
00110 2
00120 1
00120 2
上記のようにしたいのですが
式1: DCount("商品コード","調査用品別販売データ","商品コード=" & [調査用品別販売データ]![商品コード])
これではエラーが出てしまいます。

Aベストアンサー

商品コードと同じようにしてやればいいのです

連番:式1: DCount("*","調査用品別販売データ","商品コード='" & [商品コード] & "' and ID <='" & ID & "'")

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む


人気Q&Aランキング

おすすめ情報