Access VBAでコンボボックスの値を設定する方法

このQ&Aのポイント
  • Access VBAを使用してコンボボックスの値を設定する際には、RowSourceプロパティを使用します。
  • RowSourceTypeを「値リスト」とし、RowSourceに値を指定します。
  • 文字列を指定する場合、ダブルコーテーションで囲んで指定する方が良いです。
回答を見る
  • ベストアンサー

RowSource プロパティ

アクセスvbaでコンボボックスの値を設定する時に Sub マクロ1() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = """aaa"",""bbb""" End With End Sub Sub マクロ2() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = "aaa,bbb" End With End Sub ではどちらがいいのでしょうか? どちらも問題なく実行できます。 文字列だからダブルコーテーションで囲って入れてあげた方が良いのでしょうか?

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

ゴメン 添付画像が間違っていました。

sgnwhszl
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

値集合タイプ(RowSourceType)プロパティを「値リスト」に設定した場合、 値集合ソース(RowSource)プロパティでは「,(カンマ)」/「;(セミコロン)」が ともに区切り文字として認識されます。 (但し、カンマは、プロパティ設定後に、自動でセミコロンに変換されます) ですので、  a)選択肢の中に上記の区切り文字を含む値がある場合は「"/'」で括り、   含まない場合は括らない という場合分けが考えられます。 (更に、ある項目でのみ区切り文字を含む場合、含むもののみを「"/'」で  括る、という考え方もあり得ます) その一方で、選択肢の構成によって「"/'」による括りの有無を切り替える ことにしてしまうと、後々メンテナンスで一括で更新・変換を掛けようとした 際に、余計な場合分けが必要になる可能性があります。 そういう意味では、  b)文字列型の列の項目は一律「"/'」で括り、数値型の列の項目は   括らない  c)列毎のデータ型に拘わらず、全ての項目を「"/'」で括る という対応もあり得ます。 (コンボボックスの『列数(ColumnCount)』プロパティが「2」以上の場合も  含めた想定で説明をしていますので、ご注意のほど) 『「"/'」で括る必要がないことがわかっているのに敢えてそれを入力する 手間』と、『不統一性による弊害の可能性』をどう考えるか、ということに なりますので、これらのメリット・デメリットを踏まえた上で、後は個人の 好み・判断ということになるかと思います。 因みに、私の場合は「b」がメイン・・・だったはず(汗) (それ以前に、『値集合タイプ』=「テーブル/クエリ」が専らではありますが)

sgnwhszl
質問者

お礼

ありがとうございました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.1

>ではどちらがいいのでしょうか? このような事は両方とも実行すればすぐわかるはずです。 自主性を持って取り組んでください。 ただし ACCESS2010では区切り記号はセミコロン(;)のようです コンボ.RowSource ="aaa;bbb" 追伸 今まで他のデータベースソフトを使っていたのですか   ACCESSこれからですか   1.コンボボックスは通常コンボボックスのプロパティー設定でよいのではないでしょうか   2.値リストを使うのは参照項目が変動しない性別等に限って     テーブル参照にします。     ※参照項目テーブルにすると、運用現場で参照項目変更が可能です

sgnwhszl
質問者

お礼

ありがとうございました。

関連するQ&A

  • フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?

    リストボックス、コンボボックスなら Private Sub Form_Open(Cancel As Integer) With Form_フォーム1.リスト2 .RowSourceType = "Table/Query" .RowSource = "SELECT テーブル.フィールド, FROM テーブル" End With End Sub で結果を返すことは可能なのですが フォームをデータシートとして Private Sub Form_Load() Me.RowSourceType = "Table/Query" Me.RowSource = "SELECT テーブル.フィールド, FROM テーブル" End Sub とするのは不可能ですか? これを実行すると 「コンパイルエラー メソッドまたはメンバーが見つかりません」 となり、 「RowSourceType =」が選択されます。 そしてVBAの停止の意の四角ボタンを押すとユーザーフォームが図のようになります。 私のやりたいことは、クエリではなくVBAでSQL文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。

  • フォームのリストボックスに値を表示させたい

    VBA フォームのリストボックスに値を表示させたい A1→aaa A2→bbb リストボックスに上記の値を表示させたいなら、 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "Sheet1!A1:A2" End Sub で出来ますが、シート上のセルで表示する値を指定するのではなく、VBA上で、リストボックスに表示させる値を指定したいのです。 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "aaa,bbb" End Sub を実行すると、VBA実行時エラー380になってしまいます。 UserForm1.ListBox1.RowSource = "aaa;bbb" もダメでした。 ご回答よろしくお願いします。

  • EXCEL VBA ユーザーフォームコンボボックスのRowSourceの設定方法について

    EXCEL VBAのユーザーフォーム内のコンボボックスのRowSourceの設定方法について質問があります。 基本的な質問かもしれませんが、うまく検索できませんでした。 「リスト一覧」シートに     A1  B1   C1 1行 りんご ばなな ぶどう 2行 100円  200円 300円 3行 110円  210円 310円 という値を入れる。 ユーザーフォーム内にコンボボックスを2つ設置し、 コンボボックス1の値が「リスト一覧」シートの1行の値と同じときに コンボボックス2のRowSourceを同じ列の2行、3行に設定する。 Private Sub ComboBox1_Change() Dim i As Integer  i = 1   Do Until Sheets("リスト一覧").Cells(1, i) = ComboBox1.Value    i = i + 1   Loop ComboBox2.RowSource = i列の2行目及び3行目.Address End Sub というコードになると思うのですが、うまくいきません。 どうぞよろしくお願いいたします。

  • EXCEL VBA コンボボックスでのLISTINDEXの値

    初めて質問させていただきます。 EXCEL VBAでコンボボックスを設定したときのLISTINDEXの値についてですが、 コンボボックスがフォーム内に3つ(ComboBox1,2,3)あり、次のようなコードの入力を行い、 ComboBox1 Sub Userform_Intialize()  With CcomboBox1   AddItem"AAA" '・・・ここの値は0ですね   AddItem"BBB" '・・・ここの値は1ですね  End With End Sub sub ComboBox1_Change()  Me.combobox2.Clear  Select Case Me.ComboBox1.ListIndex   Case 0   Me.ComboBox2.AddItem "2AAA" '・・・ここの値は0ですね    Me.ComboBox2.AddItem "2BBB" '・・・ここの値は1ですね   Case 1   Me.ComboBox2.AddItem "2CCC" '・・・ここの値は何になりますか?   Me.ComboBox2.AddItem "2DDD" '・・・ここの値は何になりますか?  End Select End Sub このcombobox2の4つの項目から、 更にcombobox3の選択項目に分岐するように設定したいのです。 わかりやすいように、ComboBox3もComboBox2のように作成したいのですが、 このように入力した場合、ComboBox2で"2CCC"を選択した場合、 ListIndexの値が2ではないようなのです。 この"2CCC"と"2DDD"のListIndex値はいくつになるのでしょうか? どなたか教えて下さい。

  • access コンボボックス初期表示について

    ACCESS VBA コンボボックス 初期表示について。質問します。m(__)m 教えてください。 VBAのフォームロードでコンボボックスに初期表示 させたいのですが、初期表示させいたい内容というのが、テーブルにある例えば列名AAA、列名BBBがあるとして  列名AAAの中で「3」を持っている、列名BBBの名前を初期表示させたいのです。 テーブル名 CCC AAA...BBB. ...1 ......あ.... ...2.......い.... ...3.......う.... ...4 ......え... このテーブル「CCC」でいえば3を指定して、「う」をフォームロードでコンボボックスに初期表示させたいのですがどうやればいいのでしょうか? いまの状態はコンボボックスに「あ・い・う・え」の順番で取っきていて「あ」が初期表示になっています。 コードの書き方がわかりません。教えてください テーブルCCCはフォームのプロパティのコントロールソースでつなげてあります。 ↑という風に質問させていただいて 回答していただいた内容は //何番目のデータを初期表示したいか決め、FORM LOAD時にその値をLISTINDEXにセットすれば良いのでは? //即ち //Private Sub Form_Load() //Combo1.ListIndex = 2 //End Sub //のようにプログラムを書けば良いと思います。但し、初期値は”0”なので注意が必要です。 としていただいたのですが、私の質問が説明が足りていなくて改めて質問させていただきます。 テーブルの中身はそのときそのときで入れ替わります。 テーブル名 CCC  AAA...BBB..........................................AAA..BBB ...1 ......あ....左の並びのときもあれば.......3.......か ...2.......い....右のように並びが変わる.......1.......け  ...3.......う......時があります。....................2.......さ ...4 ......え................................................4.......な このときに「3」を指定して、3に対応するBBBの行をフォームロードでコンボボックスに初期表示させたいのですがどうやればいいのでしょうか?

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • Nullについて

    こんばんは!よろしくお願いします。 新規に作成したフォームにコンボボックスを設置して Sub test1() If Form_フォーム1.コンボ0.Value = Null Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub Sub test2() If IsNull(Form_フォーム1.コンボ0.Value) = True Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub 上記2つのサンプルを実行した時に、 test1のほうだけ 実行時エラー94 Nullの使い方が不正です。 となります。 ウォッチウインドウで見ていくと、 「オブジェクト変数、またはwithブロック変数が設定されていません。」 となりますが 「If Form_フォーム1.コンボ0.Value = Null Then」 を通過したら Nullになります。 何が起こっているのでしょうか?

  • テーブルに追加したデータフォーム再起動することなくコンボに表示させたい

    アクセス2003を使用しています。 図のように テーブル1とフォーム1があります。 フォーム1の中にはコンボ0があり、値集合ソースはテーブル1です。 テーブル1にデータが追加されれば それに伴いコンボ0に表示されるデータも追加させていきたいのですが 1、テーブル1に「5」を追加する 2、テーブル1を保存する。 3、コンボ0を開く をしても新たに追加した「5」は表示されません。 一度フォーム1を閉じて、再度開けば「5」は表示されます。 そうではなく、リアルタイムに テーブル1に追加したデータを フォーム1再起動することなくコンボ0に表示させることは可能でしょうか? vbaで Private Sub コンボ0_Click() RowSource = "テーブル1" End Sub とやってみましたが 何も変わりませんでした。 ご教授よろしくお願いします。

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

    フィールド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を抽出させたいです。 ご回答よろしくお願いします。

  • 【急いでます】コンボボックスのデータ型のエラー

    リストボックスにテーブルAのフィールド名を表示させフィールドを選択、オプショングループで演算子(=、>など)を選択、コンボボックスにそのフィールドのソースが表示されリストから値を選択し検索をかけたいと思っています。 リストボックスで数値型のフィールドを選択し、コンボボックスから値を選択するまではいいのですが、 その後リストボックスでテキスト型のフィールドに変更すると、コンボボックスにソースは表示されるのですが選択しようとすると、 このフィールドに入力した値が正しくありません。 たとえば、数値型のフィールドに文字列を入力しました。 とエラーが出てしまいます。 コンボボックスに前に選択したデータ型が残ってしまっているようなのです。 WEBでも検索し、色々試したのですがどれもうまくいきません。 これを回避する方法はないでしょうか? ---<現在のソース>---------------------------------------------------------------- リストボックス:listfield 演算子オプショングループ:opgEnzan コンボボックス:cboJoken Private Sub Form_Open(Cancel As Integer) strTable = lstfield.RowSource End Sub Private Sub lstfield_Click() opgEnzan = False End Sub Private Sub opgEnzan_Click() cboJoken.RowSource = "" cboJoken.RowSource = "SELECT DISTINCT " & lstfield & " FROM " & strTable & ";" cboJoken = Null cboJoken.ColumnWidths = "0cm" cboJoken.ColumnWidths = "4.5cm" cboJoken.SetFocus SendKeys "{F4}" End Sub

専門家に質問してみよう