ACCESSをつかっています。
年月日、氏名、その他のレコードを持つテーブルがあります。
フォーム、レコードで検索条件のコンボボックスがあるとします。
条件で、2002年4月を選ぶと、2002/04/01~2002/04/30
までのデータを出せるようにしたいのです。

他の質問にあるあいまい検索等を参考にしましたが、コンボボックス
と、テーブル、フォームの関係が頭の中でごちゃごちゃになって
つながりません。最終的にはフォームの上部にコンボボックスがあり、
下部(サブフォームでしょうか)に抽出されたデータがでればと
思っています。なにぶん初心者なもので質問自体もわかりにくいと
思いますがよろしくお願いします。

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

A 回答 (2件)

こんにちは。

maruru01です。

コンボボックス(cbo年月)のリストデータは、"2002年4月"のように日付で認識出来る文字列とします。
コンボボックスのClickイベントまたはChangeイベントに次のように書きます。

Dim startYM As Date
Dim endYM As Date
Dim myFilter As String

If Me!cbo年月.Value = "" Then
  '未選択
  Exit Sub
End If
'年月だけだと"○○○○/△△/1"と1日を返す
startYM = CDate(Me!cbo年月.Value)
'1ヶ月後の前日(つまり今月の末日)を返す
endYM = DateAdd("m", 1, startYM) - 1
'フィルタに設定する抽出条件文字列を作る
myFilter = "年月日 BETWEEN #" & startYM & "# AND #" & endYM & "#"
'フォームにフィルタをかける
Me.Filter = myFilter
Me.FilterOn = True

関数などの詳細はヘルプを参照して下さい。
では。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。なるほど、という答えでした。
まだ完全にはできていませんが、とてもよいヒントとなり、
もう少しでできそうです。頑張ってみます。

お礼日時:2002/04/06 00:02

月単位で良いのならACCESSではmonth関数が使えますから、



where month(年月日)=4

と言うような検索式を設定すればOKでしょう。もし年号が必要ならandでyear関数を追加すれば絞れますね。
当然コンボボックス内の条件「2002年4月」から年号と月のデータ抽出はする必要が有りますが。
    • good
    • 0
この回答へのお礼

ありがとうございました。ヒントになりましたので頑張って
やってみます。

お礼日時:2002/04/05 23:59

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

4月のイベント」に関するQ&A: 出演料について

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

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

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

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

QAccess2002 フォームからのレコード入力の成功/不成功

いつもお世話になっております。

早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。
従業員マスタテーブルは、「社員番号」だけをキーにしています。

例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。
また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。

しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えますが、実際の従業員マスタテーブルをチェックしてみると、変更はされていません。

ですので、フォームしか触れないユーザは、自分の変更、新規追加がうまく行ったのかどうか、テーブルが見られないのでわからない、という状況になっています。

仕様要求としては、新規であれ、情報変更であれ、既存の社員番号に重なる場合はメッセージボックスで「更新失敗」を表示したいのです。

If Exist・・・のような分岐を情報を入力するフォームの「閉じる」ボタンの裏に設けたいのですが、やり方がイマイチわかっておりません。

ご存知の方がいらっしゃれば、ご教授、よろしくお願いします。

---------------------------------------------------------------

<従業員マスタ>
・社員番号・・・テキスト
・氏名・・・テキスト

<仕様要求>
社員番号「0001」と「0002」の社員が存在する場合・・・
・情報入力画面で、「0001」の社員の社員番号を「0002」に変更しようとすると、エラーメッセージ表示
・新規情報入力(新入社員など)の際、社員番号が「0001」や「0002」の社員として登録しようとすると、エラーメッセージ表示


以上、お時間のあるときによろしくお願いします。

いつもお世話になっております。

早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。
従業員マスタテーブルは、「社員番号」だけをキーにしています。

例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。
また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。

しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えます...続きを読む

Aベストアンサー

フォーム上の社員番号のテキストボックス名を「txt社員番号」と仮定します。

そのテキストボックスの入力規則に以下を設定します。

DLookUp("社員番号","従業員マスタ","社員番号='" & [txt社員番号] & "'") Is Null

エラーメッセージに、「重複しています」等設定しておきます。

※ 
DCount でも良いと思いますが、DLookUp は見つかった時点で戻ってくると思ってます。
DCount は、あってもなくても全レコードをみると思うので、どちらかと言えば DLookUp でしょうか。
(重複するものがなければ全レコードを見るのは変わらないと思いますけど)

QAccess2002 閲覧フォームから入力フォームへのレコードの受け渡し

度々すみません。

Access初心者です。よろしくお願いします。

例えば「基本情報フォーム」から、「付帯データ入力フォーム」を起動する作りになっていたとします。

この場合、基本情報フォームは閲覧専用で、付帯データ入力フォームは入力用フォームになると思います。

しかし、コマンドボタンの追加ウィザードで両方のフォームで取り扱う「ID」で絞り込んで入力フォームを開こうとすると、うまく行きません。
単純に、入力フォーム単体で立ち上げると、入力できます。

やりたいことは単純で、閲覧フォーム上のIDを、入力用フォームのIDフィールドに表示させたいだけなのですが。。。

解決策をご存知の方がいらっしゃいましたら、ご教授お願いいたします。

Aベストアンサー

#2です

> 入力用フォームのほうにはある「区分」が用意されており、区分コードをコンボボックスで選択する作りになっています。
> その場合でも、1つのフォームでできるのでしょうか?
> 「表示フォーム」は区分コードに紐づいている「区分名」が表示されるようにしてあります。

コンボボックスの内容(連結列)が同じであれば、同様に既定値を設定できます。

コンボボックス名が「cbx01」だったとします。

表示の元となる区分テーブル「T区分」が以下だったとします。

区分コード 区分名
1      区分A
2      区分B
3      区分C
4      区分D
5      区分E

コンボボックスの値集合ソースが
SELECT 区分コード, 区分名 FROM T区分;

連結列:1
列数:2

表示フォームでの列幅: 0cm;2cm (1列目を表示しない:区分名だけ表示)
入力フォームでの列幅: 2cm;0cm (2列目を表示しない:区分コードだけ表示)

この設定で、コンボボックスに表示されるものは変わりますが、連結されているものは「区分コード」になっているので、

Me.cbx01.DefaultValue = Screen.ActiveForm.cbx01

で既定値を設定することができます。
(起動元に同様のコンボボックスがあったとして)

表示用/入力用ともコントロールソースには「区分コード」に対応するフィールドを指定していると思いますので、問題なさそうな気がします。


なお、起動元に「区分名」しかない時とかは、その時のテキストボックス名を「txt1」とすると、

Me.cbx01.DefaultValue = _
  DLookup("区分コード", "T区分", "区分名 = '" & Screen.ActiveForm.txt1 & "'")

とすれば既定値として設定できます。

列幅(表示)の切り替えは、ColumnWidths で変更します。
列幅が上記例であるとすれば、
レコードがあったら、Me.cbx01.ColumnWidths = "0cm;2cm"
入力用なら、Me.cbx01.ColumnWidths = "2cm;0cm"
と設定すれば、表示は切り替わります。

#2です

> 入力用フォームのほうにはある「区分」が用意されており、区分コードをコンボボックスで選択する作りになっています。
> その場合でも、1つのフォームでできるのでしょうか?
> 「表示フォーム」は区分コードに紐づいている「区分名」が表示されるようにしてあります。

コンボボックスの内容(連結列)が同じであれば、同様に既定値を設定できます。

コンボボックス名が「cbx01」だったとします。

表示の元となる区分テーブル「T区分」が以下だったとします。

区分コード 区分名
1...続きを読む

Qaccess2010コンボボックスとリストボックスについて質問です。 テーブルに日付、タイトル、内

access2010コンボボックスとリストボックスについて質問です。

テーブルに日付、タイトル、内容のフィールドがあります。これをコンボボックスを使って2014年、2015年、2016年・・・・
と作成して、2015年を選択すると2015年度分がリストボックスに表示できるようにできますか?

ご存知の方がいればよろしくお願いします。
accessは、初心者です。

Aベストアンサー

ウィザードを使ってコンボボックスを作成してみてください。
https://support.office.com/ja-jp/article/%E3%83%AA%E3%82%B9%E3%83%88-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%9C-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-70abf4a9-0439-4885-9099-b9fa83517603

以下抜粋
ウィザードを使用してリスト ボックスまたはコンボ ボックスを作成する
5.コントロールに表示する値を取得する方法の確認を求められたら、次のいずれかの操作を行います。
・ほぼ変わることのない固定値リストを表示する場合は、[表示する値をここで指定する] をクリックします。

ここで
2014
2015
2016
となるように入力するだけです。

ウィザードを使ってコンボボックスを作成してみてください。
https://support.office.com/ja-jp/article/%E3%83%AA%E3%82%B9%E3%83%88-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%9C-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-70abf4a9-0439-4885-9099-b9fa83517603

以下抜粋
ウィザードを使用してリスト ボッ...続きを読む

QACCESSのコンボボックスのレコードを変更する方法

いつもありがとうございます。

以下のような事を行いたいと思っていますがそのようにすればいいでしょうか?
------------------------------
[得意先コード ▽] [得意先名]

[<-] [->]
------------------------------

上記のようなフォームがあります。
コンボボックスで得意先を選択すると、
得意先コード、得意先名が表示されます。

コンボボックスの値集合ソースはSELECT文で定義してありまして、
ここまでは問題なくできています。

問題はここから。

現在
得意先コード 10 得意先名 静岡産業
だったとして、

[<-] をクリックすると
得意先コード 9 得意先名 神奈川商店
[->] をクリックすると
得意先コード 11 得意先名 愛知製作所

というようにボタンをクリックする事で
コンボボックスの値を変更するには
どんなコードを書けばいいでしょうか?

Aベストアンサー

多分、質問者が期待していることは実現できません。
が、似たようなことは、実現できます。

Private Sub cmdNext_Click()
  Me.cmbTest = Me.cmbTest.ItemData _
        (Me.cmbTest.ListIndex - ((Me.cmbTest.ListIndex + 1) < Me.cmbTest.ListCount))
End Sub

Private Sub cmdPrevious_Click()
  Me.cmbTest = Me.cmbTest.ItemData _
        (Me.cmbTest.ListIndex + (Me.cmbTest.ListIndex > 0))
End Sub

ただし、コンボボックスの値はこれで変更できます。
が、

得意先コード 11 得意先名 愛知製作所

と表示するには、それが一括りの文字列として合成されておく必要があります。

Qコンボボックスにレコードセットでリストをセットする

【Access2013/VBA】

■テーブル構成
【分析テーブル】
・分析ID(主キー)
・依頼ID(外部キー)
・会社ID

【会社管理テーブル】
・会社ID(主キー)
・会社名

■コード

  Dim Rst As DAO.Recordset
  Dim Db As DAO.Database
  Dim SQL As String
  Dim lngID As Long
  Dim FlgWinLoad As Boolean
  
  Me.FlgWinLoad = modPub.FlgWindowLoading
  
  lngID = modPub.Selected依頼ID
  
  'コンボボックスの設定
  SQL = "SELECT DISTINCT [分析テーブル].[会社ID] as [会社ID1], "
  SQL = SQL & " [分析テーブル].[依頼ID], "
  SQL = SQL & " [会社管理テーブル].[会社ID] AS [会社ID2], "
  SQL = SQL & " [分析テーブル].[会社ID] AS [会社ID3], "
  SQL = SQL & " [会社管理テーブル].[会社名] "
  SQL = SQL & "FROM [分析テーブル] LEFT JOIN [会社管理テーブル] ON "
  SQL = SQL & " [分析テーブル].[会社ID] = [会社管理テーブル].[会社ID] "
  SQL = SQL & "where [依頼ID]=" & lngID & " "
  SQL = SQL & "ORDER BY [分析テーブル].[依頼ID] "

  Set Db = CurrentDb
  Set Rst = Db.OpenRecordset(SQL, dbOpenDynaset)
  If Rst.EOF = True And Rst.EOF = True Then
    GoTo errH
    
  End If
  
  Me.cmbo会社ID.ColumnCount = 5
  Me.cmbo会社ID.ColumnWidth = "1cm;1cm;1cm;3cm;3cm"
  Me.cmbo会社ID.RowSource = "会社ID1;依頼ID;会社ID2;会社ID3;会社名"
  Me.cmbo施工会社ID.RowSourceType = "テーブル/クエリ"
  
  Set Me.cmbo施工会社ID.Recordset = Rst.Clone
  
■コード の終わり

エラーになりませんが、画面でコンボボックスのリストが空になります。

解決方法を教えて頂きたいと思います。
よろしくお願いします。

【Access2013/VBA】

■テーブル構成
【分析テーブル】
・分析ID(主キー)
・依頼ID(外部キー)
・会社ID

【会社管理テーブル】
・会社ID(主キー)
・会社名

■コード

  Dim Rst As DAO.Recordset
  Dim Db As DAO.Database
  Dim SQL As String
  Dim lngID As Long
  Dim FlgWinLoad As Boolean
  
  Me.FlgWinLoad = modPub.FlgWindowLoading
  
  lngID = modPub.Selected依頼ID
  
  'コンボボックスの設定
  SQL = "SELECT DISTINCT [分析テーブル].[会社ID] as [会社ID1], "
...続きを読む

Aベストアンサー

Me.cmbo会社ID.RowSource = "会社ID1;依頼ID;会社ID2;会社ID3;会社名"
Me.cmbo施工会社ID.RowSourceType = "テーブル/クエリ"

"会社ID1;依頼ID;会社ID2;会社ID3;会社名"

少なくとも、これはテーブルでもクエリでもない。
次のサイトが参考になるかもです。

http://www.moug.net/tech/acvba/0060002.html


人気Q&Aランキング

おすすめ情報