Accessオプションボタン vba case

このQ&Aのポイント
  • Access2002を使用している場合、オプションボタンを使用して商品分類コードを選択する方法について質問があります。最後のオプションボタンの値「9」を選択した際には、すべての商品分類を選択したいと考えています。
  • 現在、Case文とSQLを使用してこの問題を解決しようとしています。Case文で「true」と使うことができないため、他の方法を模索しています。SQLですべての条件を出す方法について知りたいです。
  • 現在はif文を使用して問題を解決していますが、Case文を使用して実現したいです。ご教示いただけると幸いです。
回答を見る
  • ベストアンサー

Accessオプションボタン vba case

どなたか教えて下さい。 Access2002を使っています。 オプションボタンが9個ありオプション値は1~8の数字で商品分類コードが選べるようになっています。 問題は最後のオプション値「9」なのですが、 9を選んだときには総ての商品分類を選びたいのです。 これをCaseとSQLで、作ってみようともったのですが、 select optionCode case 1 1 case 2 2 ・ ・ case 9 true End select そして、sqlに代入させたいのです。 mysql="select * from 商品 " _ & "where 商品分類コード = " optionCode もんだいは、Case文で「true」と使えないことです。 like"*" もしくは -1 など色々して見ましたが エラーになってしまいます。 SQLで総ての条件を出すのにはTRUE以外になにかあるのでしょうか? Caseを使って組みたいのですが、その発想自体がおかしいのでしょうか? 今は、if文で、動かしています。 Caseで動かしたいのです。 どなたか、よろしくお願いします。 aki

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

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

すべての条件ということは、それを条件にしないことですね。 つまり select * from 商品 とすれば、すべての商品ですね。 で、実際に どうすればいいかというと たとえば a という文字列の変数を使って a="where 商品分類コード =" select optionCode case 1 a=a & 1 case 2 a=a & 2 ・ ・ case 9 a="" End select mysql="select * from 商品 " & a としてあげれば いいでしょう。

aki_2424
質問者

お礼

ここに質問させて頂くといつも目からウロコ状態です。 ありがとう、ございます。 こんなこと、参考書にはありません。 まだまだ初心者の域を出られない私が恥ずかしいです。 ありがとうございました。 aki

関連するQ&A

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • VBA 曖昧一致CASE文のELSE

    以下の様な曖昧一致CASE文でElse判定がとれず困っています。 どの様にするべきでしょうか Select Case True Case str Like "*AAAA*" ' 処理1 Case str Like "*BBBB*" ' 処理2 Case Else ' Else処理 End Select この例で実行すると、全ての曖昧検索が一致しなくても 結果として処理2が走ってしまいます。

  • SQLについて何ですが

    一つのSQLで下記の様な検索が出来ないかと考えています、 大分類に分けて大分類の中で売れている商品のTOP10を表示し、 現在表示されている商品を抜いた売れている商品TOP100もに表示できるようとしています、 分類のテーブル・商品がどの分類に当てはまるのか関連づけし注文数も保持しているテーブル・商品の売れ行きを保持しているテーブルがあり 分類テーブルには15個(将来的に増える可能性ある)の分類ワードが入っていて、分類別に売れているTOP10を表示し重複部分もあるので最大150個の商品が表示されるようになっています、 全商品の売れ行きTop「表示されている商品プラス100件」を割り出しその中から表示商品はずしてみようと思いこの様なSQL文と作ったのですが今一うまくいっていないような気がします、 「select 商品名 注文数 from 商品テーブル    where 商品名 not in( select 商品名 from 分類商品テーブル where 分類 in ( select 分類 from 分類テーブル )    order by 注文数 desc limit 10) order by 注文数 desc limit 表示商品数+100」 どうもうまく表示できていない様な気がしているのですが、 このSQLどうなのでしょうか? ほかにもっといいSQL文があれば教えてください。 」

  • VBA: Select Caseを短くしたい

    Excel2003 の VBA でクラスモジュールを作成しています。 Select Case文で Caseが多い場合にコードを短くするテクニックがありませんか。 Select Case i   Case 1     str = "momo"   Case 2     str = "sakura"       ・       ・       ・   Case 100     str = "tsubaki" End Select のようなコードです。 配列に入れることも考えましたが、 str(1) = "momo" str(2) = "sakura"      ・      ・      ・ str(100) = "tsubaki" となって、コードを短くする効果は僅かです。 クラスモジュールなので、ワークシートにデータを入れておくテクニックは使えません。 また、外部ファイル(*.txt など)も管理の面から使いたくありません。 クラスモジュール内だけで完結させるテクニックがないでしょうか。

  • SQL文の書き方

    お世話になっております。 現在、SQLServer2000(SP4)を使用しています。 次の結果を求めるSQL文を作りたいのですが、中々上手く行きません。 良い方法を教えて下さい。 あるテーブル(tableA)にレコードが以下のようにあるとします。 【基本コード】【大分類】【中分類】    1      1    3    1      1    4    1      2    1    2      1    99    2      18    1    3      3    2 やりたい事は、【基本コード】毎に、【大分類】【中分類】の最小値を取得したいので、下記の結果を得たいのですが、 期待する結果↓ 【基本コード】【大分類】【中分類】    1      1    3    2      1    99    3      3    2 現在考えているSQL文では、下記のようになってしまいます。 実際の結果↓ 【基本コード】【大分類】【中分類】    1     1     3    2     1     3    3     3     3 現在考えているSQL文↓ SELECT  基本コード,  MIN(大分類) AS 大分類,  (SELECT MIN(中分類) FROM tableA WHERE 大分類 = (SELECT MIN(大分類) FROM tableA) GROUP BY 大分類) AS 中分類 FROM tableA GROUP BY 基本コード 中分類を求める場合の、大分類の指定の仕方が悪いのはわかるのですが、どう直したら良いのか分からず困っています。 宜しくお願いします。

  • 動的SQL (その2)

    2008です。 有給休暇の使用日(複数)を文字列として、一つのフィールドに入れる 仕組みを作ろうとしています。 (4/1、6/20、6/21 8/30・・・・・てな感じです) 動的SQLでパラメータに値を代入する方法によって結果が変わってしまいます。 現象1 パラメータに代入(Set)するときに「'A0'」をセットすると正常に動きますが、 「(Select Max(コード) From テーブル Where コード='A0')」にすると パラメータの入力を求められます。 しかし後者をIf文の中で代入するとパラメータの入力は求められません(下記) if Select Max(コード) From テーブル Where コード='A0' = 'V0'   set @para = 'V0' else   begin   set @para = (Select Max(コード) From テーブル Where コード='A0')   end **********@paraを使う動的SQL*********** 現象2 上記のIf文でパラメータを代入後、動的SQLの直前に@paraの値を確認の為 テーブルに書き込む(Insert)と動的SQLの結果が無くなってしまいます。 動的SQLの後にも書込を入れてみましたが、同じ値が書き込まれています。 当然、直前の書込を無くせば正常に表示されます。 何とか動作するのですが納得できず、将来に禍根を残しそうな現象であり どうするべき(スルーするべき)か悶々としています。

  • sql server whereについて

    sql server express2012 のselect文で select * from 商品マスタ where 商品コード in (1,2,3,1)とした場合、商品マスタには商品コード=1のデータは1件しかないけど、商品コード=1のデータ(同一データ)を2行表示する方法はありませんか? 宜しくお願いします

  • 3つのオプションボタンの場所によって分岐させるselect文

    3つのうち一つしか選べないオプションボタンのチェックした場所によってテキストボックスに数字を表示させる文を書きたいのですがどのようにselect case 文を書いていけばよいのでしょうか? ・3つともボタンのオブジェクト名(opt)は同じです。indexプロパティは1,2,3にしています。 select case index case 1 label.caption = 1 case 2 label.caption = 2 case 3 label.caption = 3 End select 上記ではうまくいきませんでした。

  • サブクエリ 述語のTrue/False

    こんにちは。 サブクエリの勉強をしています。下のURLのサイトを見ていますがわからないことがあります。 http://www.techscore.com/tech/sql/SQL7/07_02.html/#sql76 EXISTS, ANY, ALL はサブクエリが返す値に対して、「TRUE」または「FALSE」の評価を行い、メインクエリの WHERE 句で使用されます。っとあります。 /* EXISTS */ SELECT * FROM 商品表 WHERE EXISTS (SELECT * FROM 商品表 WHERE 商品名 = 'BEER'); 上記のSQLが走り、サブクエリの商品表の中にある、商品名がBEERのモノを抽出しなさいというのは理解できます。理解できないのは、「TRUE」、「FALSE」です。これは1行でも結果が帰ってきたら、それはTRUEとみなされて、EXISITSはサブクエリをTRUEと評価するということでしょうか? つまり、どんな述語でもサブクエリで評価された結果が1行でもあれば、それはTRUEという意味になるのでしょうか?いまいち何がTRUEでFALSEなのかがわかりません・・・宜しくお願いします。

  • EXSIST述語を使った副問合わせについて

    SELECT HINMOKU_NAME FROM HINMOKU WHERE HINMOKU_CODE IN (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE = '2004-11-10'); 上記をSQL文をEXISTS述語を使って書き換えると エラーが出てしまい、うまく書き換えがすることが できません。下記にエラーがでるSQL文を記載いたします。 SELECT HINMOKU_NAME FROM HINMOKU WHERE EXISTS (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE ='2004-11-10' WHERE HINMOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE); 上記SQL文についてどこに問題があるのか、ご教授お願い致します。