プロが教えるわが家の防犯対策術!

(1)部品ID
(2)日付
(3)入庫か出庫 
以上3つを検索したいのですがどうすればいいでしょうか?

(1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。
(2)の日付はテキストBOXに手入力という形です。
(3)の入庫か出庫はコンボBOXで選択するという形です。

検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。

あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。

どのようなコードを記述すればいいでしょうか?
よろしくおねがいします

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

A 回答 (5件)

>”このオブジェクトに値を代入することはできません”と表示され・・


失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(Text2) Then
MyCriteria = MyCriteria & True
ElseIf Not IsNull(Text2) Then
MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
Else
End If

strfilter = MyCriteria
strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'"

Forms!フォーム名!サブフォーム名.Form.Filter = strfilter
Forms!フォーム名!サブフォーム名.Form.FilterOn = True
Forms!フォーム名!サブフォーム名.Requery

End Sub

メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。)
これでどうでしょう。
    • good
    • 1
この回答へのお礼

お礼が遅くなって申し訳ありません。
できました!!本当に毎回ありがとうございます。
またよろしくおねがいします。

お礼日時:2006/03/20 13:32

>抽出条件をサブフォームに表示したいという記述を忘れていました


抽出条件をサブフォームの抽出条件に代入すれば行けるかと思いますが。
strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value"
Me.Filter = strFilter
Me.FilterOn = True
Me.Filter・Me.FilterOnは自分のFilterのセットとなりますのでこの部分を
Forms!フォーム名!サブフォーム名.Form.Filter = strFilter
Forms!フォーム名!サブフォーム名.Form.FilterOn = True
Forms!フォーム名!サブフォーム名.Requery

としてみてください。
抽出部分も
strFilter = "部品ID Like '*" & [Forms]![フォーム名]![Me.Text1].Value & "*' And MyCriteria And 区分 Like '*" & [Forms]![フォーム名]![Cmb1].Value"
にすれば行けるはずですが。
    • good
    • 1
この回答へのお礼

何度も質問に答えてくださってありがとうございます。
デバックがでるんです・・・
”このオブジェクトに値を代入することはできません”と表示され、Me.Filter = strFilterが黄色にマーカーされます。

O_cyan様の回答をそのままコピーしているのでスペルミスではないと思うのですが・・・。
お時間があればまたよろしくおねがいします

お礼日時:2006/03/16 15:26

>ACCESSの勉強法やお勧めの本・サイトなど教えていただければありがたいのですが


勉強法といっても特にはないのですが私は自分で考えた処理が動くかどうかSQLでもモジュールでも取りあえず試してみる事にしています。ダメならどこがダメなのか究明する。頭の中で考えた物を記述する感じですが・・。
そのためにはある程度の関数の記述の仕方と関数の概要が分かる本ですかね?
Accessで使う私の持っている本はMicrosoftのAccess開発者用のアプリケーションマニュアルとVB開発者用マニュアルの厚さ3Cmくらいの分厚い本くらいですね。あまり読みませんが・・。^_^;
本は関数の便利な使い方みたいな物が多く載っている方が良いと思います。
サイトは結構いろいろあると思いますが一概にどこが良いとは言えません。
すいませんあくまで主観です。
    • good
    • 0

フォームフィルタを使わないとすれば、クエリを作成するのが良いと思います。


データ一覧を参照するのが目的ならば、選択クエリを作成して抽出ボタンなどを押した際にクエリを実行させればよいと思います。
何か他の目的があるのならば、追加クエリなどで一旦テーブルにデータを入れたほうが良いかもしれません。
クエリを作成する前に、抽出条件をきっちり決めなくてはいけません。
出庫・入庫は必ずどちらかが選択されているものとしても、部品IDと日付が両方入力されている場合の抽出条件をANDにするかORにするかによって、クエリの作り方が少し違います。

直接質問には関係ないですけれど、日付を選ぶのには ActiveXのカレンダーコントロールや、DatePickerなどが便利ですよ。 (クエリを実行させる際に抽出条件によってエラーが起きないよう考えておく必要があります。)
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
クエリでも出来るのですね。勉強になります。
紹介して頂いたActiveXのカレンダーも使ってみます。
ありがとうございました

お礼日時:2006/03/16 09:16

簡単に処理したいのであれば


Filterを使ってやれば出来ます。
部品IDを選択し表示するテキストボックスをText1、日付を入力するコントロールをText2、入庫か出庫をCmb1としてテーブルのフィールド名を区分、検索ボタンをCmd1とした場合。
Cmd1ボタンのクリック時イベントに

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(Text2) Then
MyCriteria = MyCriteria & True
ElseIf Not IsNull(Text2) Then
MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
Else
End If

strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value"
Me.Filter = strFilter
Me.FilterOn = True
End Sub
としてフォームにFilterをかければ出来ます。
または
クエリのWhere句で抽出条件に同様となる記述をしないと出来ません。

この回答への補足

早速試してみましたができません(>_<)
抽出条件をサブフォームに表示したいという記述を忘れていました。
また回答いただけるとありがたいです。よろしくおねがいします。

補足日時:2006/03/16 10:24
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
早速試してみます。
O_cyan様には本当にいつも助けられています。
もしよければACCESSの勉強法や、お勧めの本・サイトなど教えていただければありがたいのですが・・・。
またお時間のある時よろしくお願いします

お礼日時:2006/03/16 09:14

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

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

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

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

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

Qaccessvba 複数条件でFilterをしたい

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブル1
WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*"));
---------------------------------------
なのですが、
これをクエリを作成せずに、VBAで行いたいです。

各非連結のテキストボックスには、
更新後処理:[イベント プロシージャ]
としています。
---------------------------------------
Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
---------------------------------------
は、問題なくできるのですが、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

にすると、エラーになります。
andの繋げ方が良くないと思うのですが、どうすればいいでしょうか?

最終的には、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
"フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

のような感じにしたいです。
ご回答よろしくお願いします。

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブ...続きを読む

Aベストアンサー

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "' and " _
& "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
でしょ。

QAccessクエリの抽出条件にフォームから挿入する方法

Accessフォームのテキストボックスに入力されたデータを、クエリの抽出条件に挿入したいのですが、その際部分一致で検索したいため、抽出条件にLike "*[Forms]![フォーム名]![テキストボックス名]*"と記述したのですがうまく行きません。
どのように記述すれば部分一致で検索できるのかお教えください。

Aベストアンサー

Like "*" & [Forms]![フォーム名]![テキストボックス名] & "*"

QACCESSで複数条件でデータ抽出するフォームの作成

ACCESS2000で複数の条件を入力し、該当するデータを抽出するフォームを作成しています。どんな方法がありますか?簡単に出来る方法をお教えください。
具体的には、売上明細データを検索します。あらかじめ
テーブル:売上明細データ をいろいろなマスタを参照している
クエリ:売上明細クエリ を元に抽出します
条件は売上日付の日付1と日付2の項目と、伝票区分の項目です。
フォームの頭にテキストボックスを3つ作成し、日付1~日付2までの売上日付で
入力された伝票区分のもののみを表示させたいのです。
検索というコンボボタンを配置し、クリック時にその下にクエリからの必要な表示項目を売上明細クエリから配置しています。
抽出する方法(条件の与え方)を教えてください。よろしくお願いいたします。

Aベストアンサー

クエリの日付抽出条件欄に

Between Nz(Forms!フォーム名!日付1,#1900/1/1#) and Nz(Forms!フォーム名!日付2,#2900/12/31#)

伝票区分の抽出条件欄に

=Forms!フォーム名!伝票区分 or Forms!フォーム名!伝票区分 is null

ボタンでフォームを再クエリします

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アクセスでのテキストボックスの複数条件での抽出

Private Sub 検索_Click()

Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter3 As String

strFilter1 = "学校名 = '" & 学校名1 & "'"
strFilter2 = "学校区分 = '" & 学校区分1 & "'"
strFilter3 = "キャンパス = '" & キャンパス1 & "'"
Me.Filter = strFilter1 & " or " & strFilter2 & " or " & strFilter3


Me.FilterOn = True

End Sub


(1)学校名・(2)学校区分・(3)キャンパスと3つのテキストボックスがあり
3つの抽出条件を満たすレコードをフォームに表示させたいのですが
学校名を仮に早稲田大学といれ絞れるのですが次に学校区分を大学
と入れるとほか大学も抽出されてしまいます。

学校名を抽出させたら、その範囲で学校区分の大学を抽出させたいのですが
どのようにすればいいのでしょうか?
(1)のみの抽出の場合や(1)と(2)のみの
場合があるのでandの完全一致ではありません。

Private Sub 検索_Click()

Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter3 As String

strFilter1 = "学校名 = '" & 学校名1 & "'"
strFilter2 = "学校区分 = '" & 学校区分1 & "'"
strFilter3 = "キャンパス = '" & キャンパス1 & "'"
Me.Filter = strFilter1 & " or " & strFilter2 & " or " & strFilter3


Me.FilterOn = True

End Sub


(1)学校名・(2)学校区分・(3)キャンパスと3つのテキストボックスがあり
3つの抽出条件を満たすレコ...続きを読む

Aベストアンサー

わかった。

フォームモジュールの先頭
Option Compare Database
の次の行に
Option Explicit

これで分かるでしょう。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

Qアクセスのフォームで期間検索するには?

アクセスの検索フォームで、レコードを別フォームで表示して、表示したフォームでフィールド毎に検索しています。

日付の部分だけ、検索方法が分からず、なかなか出来ない状態です。

このフォームに、開始と終了のテキストボックスを設置しています。
ボタンを押して、開始と終了の期間のデータを表示出来ればと思います。

宜しくお願いします。

Aベストアンサー

>日付フィールドは、日付/時刻型でyyyy/mm/ddで入力しています。
ということですから

Private Sub 期間検索_Click()

Me.Filter = "日付 Between #" & Me.[開始] & "# And #" & Me.[終了] & "#"
Me.FilterOn = True

End Sub

QACCESS検索★ある文字を複数のフィールドの中から検索したい

ACCESS検索の質問です。
ある文字を複数のフィールドの中から検索したいのですが、十数個あるフィールドに一々検索文字を入力していくと大変な作業になってしまいます。何かSQL文でも構いませんので作業の手間が省ける方法はないでしょうか。よろしくお願いします。

Aベストアンサー

 検索と置換ダイアログボックスで、「探す場所」を「テーブル」にしてはいかがでしょう。

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

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

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

Aベストアンサー

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

QAccessVBAを使用して、DB内を検索する画面を作成したいのですが。

Accessのヴァージョンは2000以降です。
フォーム上で、テキストボックスに入力して、検索ボタンを押すと、検索結果が表示される物を作りたいのです。

SQLの知識はあるので、SQL文は記述できるのですが、どうすれば検索結果が表示されるのかわかりません。

検索ボタンをクリックしたときにどういう処理をするのか、また、検索結果画面はどのように作っておけばよいのか等、少しでも多くのご回答をいただきたいです。

本やサイトも色々見たのですが、見あたりませんでした。
そのようなサイトがありましたら是非教えていただけると助かります。

お忙しい中申し訳ありませんが、本当に困っています。
よろしくお願いいたします。

Aベストアンサー

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください。
さらに検索ボタンを作成し、「検索」と言う名前で保存。
プロパティ-の「クリック時」で下↓のボタンを押し「イベントプロシージャ」を選択。
右端の「・・・」を選択するとVBAを記述できる画面が出てきます。
そこに下記内容を記述

Private Sub 検索_Click()
Forms![フォーム1].RecordSource = "SELECT * FROM [テーブル1] where forms![フォーム1]![氏名選択] = [テーブル1]![氏名]"
End Sub

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください...続きを読む


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

人気Q&Aランキング