• ベストアンサー

マクロでのComboBoxの設定はどこで

ComboBoxのリスト項目等の設定については、 UserForm_Initializeで記述するのか、ComboBox1_Enterでもよいのか、その違い、メリットがよく分からないのでどなたかお教えいただけませんでしょうか。 現在、混在状態にあるのを整理しようと思っておりまして、正しい作法を知りたいのです。よろしくお願いします。 With ComboBox33 .ColumnCount = 5 '表示列数の設定 .TextColumn = 2 '表示列の設定 .BoundColumn = 2 '値として取得する列の設定 .ColumnWidths = "0;110;0;0;;0" .List() = MyData 'リスト項目の設定 End With

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.1

UserForm_Initializeだとフォームを表示(起動)するときに各種設定がされますがComboBox1_Enterだとコンボボックスにフォーカスが移動するときに各種設定されます。 コンボボックスを選択するたびに同じ設定(他のデータをもとに設定を変更する場合は除く)をすることはある意味無駄ですので、最初のフォーム表示時に設定するのが一般的です。

OWVaburame
質問者

お礼

ありがとうございました。 すっきりしました。 Initializeに書くにせよ、結局EnterにおいてMe!ComboBox○.DropDownとかComboBox○.ListIndex = 1とか書かざるを得ないようなので、この度はEnterに一元化することにしました。 ありがとうございました。

関連するQ&A

  • 連携する複数のコンボボックスに同じリストを設定

    初心者なので質問がトンチンカンでしたらすみません ユーザーフォームにコンボボックスを計12個配置しています ComboBox1で選択した値に応じてComboBox2のリストが選ばれる ComboBox3で選択した値に応じてComboBox4のリストが選ばれる ・・・・・・・ ComboBox11で選択した値に応じてComboBox12のリストが選ばれる という風に設定したいのですが、コンボボックスの数だけリストの設定を するのが大変なので見よう見まねで下記の様にしてみたのですが全く 動きません。 UserForm_Initializeでイベント発生させてるので動かないのでしょうか? どこがおかしいのかご教授お願いします。 Private Sub UserForm_Initialize() Dim i As Variant Dim Ari As Variant Ari = Array("1", "3", "5", "7", "9", "11") For Each i In Ari If UserForm4.Controls("ComboBox" & i).Value = "車いす" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いすテーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "車いす付属品" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いす付属品テーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "特殊寝台" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("特殊寝台テーブル").Value End With End If Next End Sub

  • VBAのComboBoxについて

    UserForm1にComboBoxが8個(ComboBox1~8)あります。 各ComboBoxはSheet1の下記列に入力されているリストを表示します。 ComboBox1 : A列 ComboBox2 : B列 ComboBox3 : C列 ComboBox4 : D列 ComboBox5 : E列 ComboBox6 : F列 ComboBox7 : G列 ComboBox8 : H列 ComboBox9 : I列 ComboBox10 : J列 そこで、UserForm1の各ComboBoxでデータ選択する際に、リストにある場合はそれを選択し、リストにない場合はComboBoxに新しいデータを入力し、UserForm1のCommandButton1を押下時にその新しいデータをSheet1の各列に追加したいのですが、どのようにしたらよいのでしょうか。 Sheet1にあるリストをComboBoxに表示するところまではできています。 ※ComboBoxの番号とリストの列番号を一致させています。 --------------------------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, retu As Integer, i As Integer For retu = 1 To 10 lastrw = Sheet1.Cells(1, retu).End(xlDown).Row For i = 1 To lastrw - 1 Controls("ComboBox" & retu).AddItem Sheet1.Cells(i + 1, retu).Value Next i Next retu End Sub ---------------------------------------------------------------

  • VBAを使用しコンボボックスにリストを設定する方法

    いつもお世話になっております。 現在コンボボックスにリストを設定する方法について悩んでいます。 バージョンはExcel2003です。 コンボボックスに指定したい列がA列とB列なら通常下記のようにすると思います。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:B5"     End With ただ今回はA列とC列をリストに設定したいと思い、下記のような設定にしたのですがうまく設定できません。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:A5;C2:C5"     End With そもそもRowSource は連続的なデータを設定する場合のプロパティだと思うのですが、このように飛んだ列のデータを効率的に指定するにはどのようにするのが一番いいのでしょうか? 分かる方がいっらしゃいましたらご教授願います。

  • ユーザーフォーム起動時、テーブル名から読み込ませた

    ユーザーフォームのInitializeに現在、テーブル名ではなく、シート名(master)のセル設定で読み込ませています。これをテーブル名(圃場リスト)に差し替えるにはどのように変更すればよいのでしょうか。 UserForm Initialize 'フォームを開いたときComboBox1で圃場名及び圃場番号を連動表示させ、リスト表示させる With ComboBox1 Dim no2site As Variant, lr As Long lr = master.Cells(1, 1).CurrentRegion.Rows.Count - 1 no2site = master.Cells(2, 1).Resize(lr, 3) .ColumnCount = 3 .ColumnWidths = "25;180" .TextColumn = 2 .List = no2site End With

  • Excel2010 VBA ユーザーフォーム

    コンボボックスのリストに表示されているときはA列とB列が表示されているのに、 1つをクリックして選択した後はA列しか表示されません 選択した後もそのまま表示を維持したいのですが… ↓こんな感じでやりました Private Sub UserForm_Initialize()   Dim lRow As Long     With Worksheets("Sheet1")       lRow = .Range("A" & Rows.Count).End(xlUp).Row     End With     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50"       .RowSource = "Sheet1!A2:B" & lRow     End With End Sub よろしくお願いします

  • EXCEL コンボボックスのリスト設定

    リストインデックスが複数ある場合は動くのですが、 インデックスが0 もしくは1個しかない場合は、どのように処理を追加したらいいでしょうか。。 実行時エラー381 Lisプロパティを設定できません。プロパティの配列のインデックスが無効です、と メッセージが出ます。 いろいろ試してるのですがわかりません。 コンボボックスの値は別シートで参照先を指定しています。 ----------- Private Sub ComboBox3_DropButtonClick() Dim lRow As Long Dim i As Long, myCnt As Long Dim myData With Worksheets("部門名") lRow = .Range("O" & Rows.Count).End(xlUp).Row ’O列の最終行を確認 myData = .Range("O2:O" & lRow).Value ’コンボボックスのリストデータ End With With ComboBox3 .ColumnCount = 1 .ColumnWidths = "50" .List = myData End With End Sub

  • ComboBoxでの一文字検索が上手くいきません

    ソフトはEXCEL2003です。 質問内容: ユーザーフォーム習い始めたところで、つまずいています。 やりたいことは、フォーム上に配置したComboBoxに別シート(選択一覧)で作成した「カタカナ1文字、会社名、会社コード」の3項目を表示可能にしておく。 ComboBoxへのカタカナ1文字入力により、該当する会社の上記3項目を表示し、会社選択後ComboBoxには会社名を表示、リストボックスには選択した会社コードを表示し、登録リストに会社名と会社コードを登録する。 フォームを作成してテストしましたが、一部のカタカナ(ヒなど)で該当する会社が選択されません。 何が問題なのか知識が足りませんので、困っています。 お分かりになる方に教えて頂きたくお願いします。 なお今回会社名をカタカナ1文字検索にしたのは、例えば社名の前に(株)等が付くものや、同じ漢字でも日本(ニホン)、日陰(ヒカゲ)等呼び名が異なるものがあるためです。 また、ComboBoxのプロパティは「MatchEntry」を「0-fmMatchEntryFirstLetter」としてあります。 ところで作成した命令は次の通りです。 Private Sub UserForm_Initialize() Dim MyVar1 As Variant Dim Ws1, Ws2 As Worksheet Dim LastRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") Ws2.Select MyVar1 = Range("A3:C490") With ComboBox1   .ColumnCount = 3  ’カタカナ1文字、会社名、会社コード   .ColumnWidths = "20;230;10"   .List = MyVar1 End With ComboBox1.TextColumn = 2   Ws1.Select   ComboBox1.MatchEntry = fmMatchEntryFirstLetter End Sub Private Sub ComboBox1_Change() '会社名処理 Dim Ws1, Ws2 As Worksheet Dim NawRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") ComboBox1.MatchEntry = fmMatchEntryFirstLetter    '表示行数を確認 一番上が「0」なので+1   NawRow = Me.ComboBox1.ListIndex + 1   TextBox4.Text = Ws2.Cells(NawRow + 2, 3) '会社コード表示;選択一覧は3列3行目から開始 Ws2.Cells(1, 1) = NawRow + 3       '選択一覧1行目に選択行表示 デバック用 End Sub  ※登録リストへの会社名と会社コードを登録する部分は省略しました。  以上よろしくお願いします。 その他、このような多くの会社名選択で、よい方法があれば教えてください。

  • Private Sub UserForm_Init

    いつもお世話になります。 Windws7 excell2010 です。 同一のシートに二つの「Private Sub UserForm_Initialize()」があるときにどう名前を変えればまたはどうすればいいかご指導願えませんか。 「Private Sub UserForm_Initialize()」が一つの時はE5のようにうまく作動してくれます。 E列に 売上の 「回収」のリスト Private Sub UserForm_Initialize() F列に 何時の 「売掛月」のリスト(1~12の数字) Private Sub UserForm_Initialize() A列に =IF(B2="","",TEXT(B2,"mm")) 参考に下記します。 ~1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "振込" .AddItem "現金" .AddItem "小切手" End With End Sub ~2 Private Sub UserForm_Initialize() With ComboBox2 .AddItem "10" .AddItem "11" .AddItem "12" End With End Sub '**************** '設定 '**************** Private Sub CommandButton1_Click() y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text Cells(y, 3) = TextBox2.Text Cells(y, 4) = TextBox3.Text Cells(y, 5) = ComboBox1.Text Cells(y, 6) = ComboBox2.Text UserForm2.TextBox1.Text = "" UserForm2.TextBox2.Text = "" UserForm2.TextBox3.Text = "" UserForm2.ComboBox1.Text = "" UserForm2.ComboBox2.Text = "" UserForm2.TextBox1.SetFocus End Sub

  • VBAのリストボックス連動がうまく表示されません。

    例えば、エクセル表に下記のようなデータが入っているとします。 A列は項目であり、B列は項目内容数(D列以降の項目数)、D列にはA列項目の内容が入っています。しかし、この列は変動する為、変数で指定しています。 これをリストボックス1で、まずA列の内容を表示させて、その中で選んだ項目をリストボックス2でD列以降の行内容を表示させ、リストボックス2の値を取得したいのですが、リストボックス2がうまくい表示できません。 リストボックス1では .RowSourceを使ってセル指定して表示させています。 このようなケースがuserformに多数あり、for~の処理はできるだけ避けています。 例えばUserForm_Initialize()で次の通りです。 With ListBox1 .ColumnCount = 1 .BoundColumn = 1 .RowSource = Worksheets(wksheet).Range(Cells(2, item_No), Cells(item_max_cnt, item_No)).Address(External:=True) VBA初心者で恥ずかしい質問ですが、どなたかご教示宜しくお願い致します。m(_ _)m A列_B列__D列_E列_F列_G列_H列 … a_3__あ_い_う b_1__か c_5__さ_し_す_せ_そ

  • ListBoxで表示されたデータの取得方法は

    お世話になります。 標準フォーム から以下のリストボックスを表示して、無事シートの一覧が表示されています。 Private Sub UserForm_Initialize() Dim lastRow As Long Dim myData Worksheets("Sheet1").Range("a1:C35").Value = "" With Worksheets(Sheet) myData = .Range(.Cells(1, 1), .Cells(Rows.Count, 3).End(xlUp)).Value End With With ListBox1 .ColumnCount = 3 .ColumnWidths = "20;70;100" .List = myData End With End Sub このリストボックスにはボタンが二つありボタン1を押したときに標準フォームへ[hinban] という変数にリストボックスでフォーカスしているデータを取り込みたいのですが以下の方法でうまくいきません。 Private Sub CommandButton1_Click() Dim lastRow As Long Dim i As Integer hinban = ListBox1.Column(pvargColumn:=1) End Sub もう一つのボタンは何もせずにリストボックスを閉じたいのですがこれで問題ないですか。 Private Sub CommandButton2_Click() Unload Me End Sub プログラム初心者でインターネットから寄せ集めのプログラムです。 どなたかお力をお貸しください。