• ベストアンサー

If~Elseif分で複数の条件式を書くには?

毎度です。Access2000で悩んでいます。 フォームにいくつかのコンボボックスを設定してあります。 (コンボ1、コンボ2、コンボ3) この時に各コンボボックスの値を元にそれぞれ違うクエリを走らせたいのですがどうやって書けばいいのでしょうか? If Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 1 Then Docmd.OpenQuery "Query1" ElseIf Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 2 Then Docmd.OpenQuery "Query2" って書いてみたのですが、ダメでしょうか? 条件を複数書く時って「+」でつなげないのでしょうか? 素人です。やさしく教えてください。  

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 「+」ではなくて、「And」で繋げて下さい。 If Me!コンボ1 = 1 And コンボ2 = 1 And コンボ3 = 1 Then Docmd.OpenQuery "Query1" ElseIf Me!コンボ1 = 1 And コンボ2 = 1 And コンボ3 = 2 Then Docmd.OpenQuery "Query2"

noname#12495
質問者

お礼

ありがとうございました。 できました。 言われてみれば、そうだよなぁ~って感じです。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kojitti
  • ベストアンサー率32% (449/1386)
回答No.3

>条件を複数書く時って「+」でつなげないのでしょうか? 条件式が複数の場合は、「AND」または「OR」のいずれかで接続します。 ・A且つBの場合(AでありさらにBである場合) AND   IF A AND B THEN ・AまたはBの場合(AであるかまたはBである場合) OR   IF A OR B THEN

全文を見る
すると、全ての回答が全文表示されます。
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

これでは要件にあいませんか? Select Case Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 Case 1 Docmd.OpenQuery "Query1" Case 2 Docmd.OpenQuery "Query2" Case 3 ・・・ Case Else ・・・ End Select

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「クエリが閉じてるなら」「クエリが開いてるなら」

    Sub test() If クエリが閉じてるなら Then  DoCmd.OpenQuery "クエリ1" ElseIf クエリが開いてるなら Then  DoCmd.Close acQuery, "クエリ1" End If End Sub という事をやりたいのですが、 「クエリが閉じてるなら」 「クエリが開いてるなら」 のコードがわかりません。 よろしくお願い致します。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • if分で複数条件の記述方法を教えてください。

    Accessの検索フォームに締日入力用のコンボボックスと請求日の日付入力ボックスを配置しました。 締日が月末の場合、コンボボックスから31を選択すると請求日日付入力ボックスに前月の月末が出て、それ以外の締日(例として25日)を選択すると、前月の25日が入るようにVBAを作成しました。 尚、コンボボックス(close1)は20や25,27等の締日が選択できます。 下記VBAは先月のみ対応します。 締日が選択できるコンボボックス名は(close1)、日付入力ボックス名は(day1)です。 Private Sub close1_AfterUpdate() Dim i As Date i = DateSerial(Year(Date), Month(Date) - 1, [close1]) If (Me!close1) <> 31 Then Me!day1 = i Else Me!day1 = DateSerial(Year(Date), Month(Date), 0) End If End Sub これを今月の締日かどうかのmsgboxを表示して、今月なら今月の請求日付、違う場合は先月の請求日付を日付入力ボックスに入れたいのですが、どうすればよいでしょうか? おそらく下の様な流れではと思うのですが、条件が少し複雑なため、どうまとめたら良いかわかりません。 Dim rc as Integer if (Me!close1) <> 0 then ‘締日が0以外ならテキストボックスを表示させたいです' rc = msgbox (今月の締日ですか?, vbYesNo) If rc = vbYes then "今月の請求日をday1に表示" else "先月の請求日をday1に表示" よろしくお願いします。

  • クエリの条件式に複数のコンボBoxの値を参照させるには?

    コンボボックスで選択された値を元に選択を行わせるクエリを作成しています。 ですがある特定のコンボボックスからの値でなく、複数のコンボボックスの値を組み合わせて選択を行うのはどの様にしたら良いのでしょうか? テーブル名:テーブル1 クエリ名:選択クエリ1 選択の元になるフィールドはテーブル1内の[時刻]フィールドです。 ここは日付/時刻型になっており、表示形式は[YYYY/MM/DD HH:MM:SS]です。 この部分である範囲の選択を行いたいのですが、それの元となるコンボボックスを年/月/日/時/分/(秒)に分けたいと考えています。 (秒は無くても良い) 通常コンボボックスの値を参照する際は Like [Forms]![フォーム名]![コンボボックス名] という条件式を使いますが、複数のコンボボックスの値を組み合わせる場合はどのように記述したら良いのでしょうか? またクエリのデザインビューで出来ない場合はモジュールでの記述方法をご教授頂けるとありがたいです。 よろしくお願いいたします。

  • Access リストボックス複数選択を抽出条件に

    Access リストボックスで複数選択した値をクエリの抽出条件にしたいです。 ※PC環境:Win7 Access2007 Excel2007 リストボックスで複数選択した値を取得する事はできるのですが、 クエリ実行をすると結果が0件になってしまいます。 他の方のQAなどを参考に以下を作成しましたが、ほしい結果が得られず困っています。 おわかりになる方、ご教示いただけますようお願い致します。 <動作概要> 「画面」の「リストボックス」で複数選択し、 [実行]ボタンを押して、「リストボックス」で選択した値を、「テキストボックス」にセットし、 クエリの抽出条件に、in(テキストボックス)をセットし、テーブルから合致するデータを抽出したい <リストボックス> ※年区分テーブル参照 区分,区分名 1,1年 2,2~3年 3,4~5年 「2,2~3年」「3,4~5年」を選択 ※「区分」は数値型 <VBA> Private Sub 実行_Click()  Dim i As Variant  Me.テキストボックス = Null  For Each i In Me.リストボックス.ItemsSelected Me.テキストボックス = Me.テキストボックス & Me.リストボックス.Column(0, i) & "," Next If Me.テキストボックス <> "" Then  Me.テキストボックス = Left(Me.テキストボックス, Len(Me.テキストボックス) - 1) End If   'ここで画面を確認すると「テキストボックス」には、「2,3」 がセットされている DoCmd.OpenQuery "クエリ"   'テーブルには抽出条件に該当するデータがあるが、クエリ実行結果は0件 End Sub <クエリ SQL> SELECT テーブル FROM テーブル WHERE (((テーブル.区分) in([Forms]![画面]![テキストボックス]))); ※「テーブル.区分」は、数値型 どうぞよろしくお願い致します。

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • 年を条件にデータを抽出するには?

    フィールド1 2012/01/01 2012/01/02 2011/01/01 2011/01/02 2010/01/01 2010/01/02 と言うデータがあり、それをもとに表形式でフォームを作りました。 フォームヘッダーにコンボボックス(名前:コンボ3)を作り、 値集合タイプ:値リスト 値集合ソース:"2012";"2011";"2010" にしました。 コンボボックスのAfterUpdateイベントでコンボ3に表示されている値を年を抽出したいのですが vbaでどうやればいいのでしょうか? クエリは作りません。 Private Sub コンボ3_AfterUpdate() Me.Form.Filter = "フィールド1 Between #" & Me.コンボ3.Value & "# And #" & Me.コンボ3.Value & "#" & "'" Me.Form.FilterOn = True End Sub や Private Sub コンボ3_AfterUpdate() Me.Form.Filter = "フィールド1 Between #" & Me.コンボ3.Value & "/01/01" & "# And #" & Me.コンボ3.Value & "/12/31" & "#" & "'" Me.Form.FilterOn = True End Sub にすると 実行時エラー クエリ式 <式> の <メッセージ> (エラー 3075) 入力した式が、メッセージに示されている原因によって無効です。フィールド名と区切り記号を正しく入力していることを確認してから、もう一度実行してください。 となってしまいます。 2010/01/01と2010/01/02を抽出させたいです。 ご回答よろしくお願いします。

  • IF VBA 1つの条件で複数の処理

    IF関数で、1つの条件(セルに特定の文字があったら) セルA1=B1+C1 セルB1=D1+E1 のように2つの処理を行ないたい場合、どんな構文を作成 したらいいでしょうか。 IF~Then ElseIf~Then End If というのが基本構文ですが、条件が複数あるのではなく 条件1つで処理は2つというのが分かりません。

  • IFステートメントの条件式が間違っているのでしょうか?

    エクセルVBA初心者です。下記の式を作りましたが、計算した結果が正しい答えになりません。構文エラーが出ないので構文は間違ってはいないと思うのですが、答えが違うので参っています。どなたか何が間違っているのかおしえて下さい。よろしくお願いします。 Cells(6, "E") にある数字時を入れた時の答えをCells(6, "G") に求めるものです。 Sub 計算() Dim my As Long If Cells(6, "E") <= 90 Then my = 50000 * Cells(6, "E") / 30 Cells(6, "G") = my ElseIf 90 < Cells(6, "E") <= 120 Then my = 50000 + 40000 * (Cells(6, "E") - 90) / 30 Cells(6, "G") = my ElseIf 120 < Cells(6, "E") <= 150 Then my = 90000 + 30000 * (Cells(6, "E") - 120) / 30 Cells(6, "G") = my ElseIf 150 < Cells(6, "E") <= 180 Then my = 120000 + 20000 * (Cells(6, "E") -150) / 30 Cells(6, "G") = my ElseIf 180 < Cells(6, "E") <= 210 Then my = 140000 + 10000 * (Cells(6, "E") -180) / 30 Cells(6, "G") = my End If End Sub

  • アクセスで複数データ削除

    myPath = "D:\" myfilename = Dir(TxB04) Do Until myfilename = "" DoCmd.TransferText acImportDelim, , "tbl1", myPath & myfilename, False myfilename = Dir Loop MsgBox "取込が正常に終了しました。" MsgBox "二重打刻をチェックしてます。" '取込ファイル名を変換します。 DoCmd.SetWarnings False DoCmd.OpenQuery "データ変換" DoCmd.OpenQuery "実績追加" DoCmd.OpenQuery "重複データ削除" DoCmd.OpenQuery "削除クエリ" DoCmd.SetWarnings True Cmd21.Enabled = False ★Kill (strInFPath)★ 'メッセージマスタ取得 Sqlstate2 = "SELECT * FROM 氏名登録なし;" Set M_MSG2 = MyDB2.OpenRecordset(Sqlstate2, dbOpenSnapshot) If M_MSG2.RecordCount > 0 Then DoCmd.SetWarnings False DoCmd.OpenQuery "くえり1" DoCmd.SetWarnings True End If Exit Sub Err_Set_Seisan_Click: End Sub 今、vbでこのようなデータ取込を作っており★のところで取込データを削除させてます。 ただこれだと1つのデータしか削除できず、複数あったときには対応が困ってます。 こちら歯どのような対応でできるでしょうか? ご指導お願いします。

専門家に質問してみよう