- 締切済み
VBA ユーザーフォームの値の取得方法
いつもお世話になっております。 以下のような仕様のVBAコードを作成したいと考えています。 (貼付資料も参照してください) ■仕様 (1)ユーザーフォーム 1.処理の対象となる市名をチェックボックスから選択 2.処理の対象となるシート名をコンボボックスから選択 (2)ユーザーフォームで選択した 選択したシートの対象市名のデータを配列に格納 (3)格納した配列を元に一覧、詳細の表を作成 ■オブジェクト ●ユーザーフォーム ・フレーム Frame1:神奈川県 Frame2:茨城県 Frame3:栃木県 Frame4:対象年度 ・チェックボックス CheckBox1:フレーム外の全選択 CheckBox2~4:各フレームの全選択 CheckBox5~11:市町村名(横浜市~小山市の順) ・コンボボックス ComboBox1:対象年度 ●ワークシート ■不明な事 (1)⇒(2)の処理(ユーザーフォームで選択した項目を他のプロシージャで使用する) について質問させていただきます。 私の頭の中では、 I.パブリック変数を用意して、CheckBoxやComboBoxで選択した項目を格納 II.プロシージャ引数として・・・ の2つの方法が候補として浮かんでいます。 Iに関して CheckBox1:対象年度については、オブジェクトが1つしかないので、 適当なパブリック変数(今回はmySh)を用意して、 mySh=Combobox1.Value とすれば、仕様は満たせると思いますが、 CheckBoxに関しては、数が多いので,どのようにすれば良いのかイマイチ分かりません。 IIに関しては、全く見当が付きません。 ■質問 (1)上記の処理を行う場合は、I又はIIの方法で問題無いでしょうか? (2)I又はIIの方法の優劣はあるのでしょうか? (3)I、IIの方法を教えてください。 どうぞよろしくお願いします
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- eden3616
- ベストアンサー率65% (267/405)
関連するQ&A
- VBAユーザーフォームの操作について
いつもお世話になっております。 VBAでユーザーフォームのチェックボックス使用したデータを作成しています。 ●ユーザーフォームの仕様 1.各県名ごとにフレームを作成し、フレーム内に市名と全選択のチェックボックスを配置 2.各フレームの全選択のチェックボックスにチェックを入れると、フレーム内の市名のチェックボックスにチェックが入る 3.フレーム外の全選択のチェックボックスにチェックを入れると、全チェックボックスにチェックが入る。 ●オブジェクト名 ・フレーム Frame1:神奈川県 Frame2:茨城県 Frame3:栃木県 ・チェックボックス CheckBox1:フレーム外の全選択 CheckBox2~4:各フレームの全選択 CheckBox5~11:市町村名(横浜市~小山市の順) ●プロシージャ 1つ1つの動作をIFステートメントを使って記述しています。 ※IFの中身については、チェックボックスの数がもっと多ければ For Nextなんかを使ってもっとスッキリできますが、今回は数か少ないので羅列しています。 以上に関して、貼付ファイルのようなコードを記述してみました 一応仕様を満足する動作はしてくれるようですが・・・ ご指摘がありましたら、よろしくお願いします。
- 締切済み
- Excel(エクセル)
- VBAユーザーフォームのチェックボックスについて
いつもお世話になっております。 VBAのチェックボックスについてお尋ねします。 貼付ファイルのようなユーザーフォームを作成しました。 フレーム1(TEST1)に 1.CheckBox1(全選択) 2.CheckBox2 3.CheckBox3 フレーム2(TEST2)に 4.CheckBox4(全選択) 4.CheckBox5 5.CheckBox6 フレーム外に 6.CheckBox7(全選択) があります。 フレーム1のCheckBox1にチェックを付けるとCheckBox2とCheckBox3にチェックが入り フレーム外のCheckBox7にチェックを付けると全てのCheckBoxにチェックが入るようにしたいのですが。 どなたかご教授をお願いします。
- ベストアンサー
- Excel(エクセル)
- EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について
EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change() Dim i As Integer If ComboBox1.Value = 1 Then For i = 1 To 50 TextBox(i).Enabled = False Next i ElseIf ComboBox1.Value = 2 Then For i = 1 To 100 TextBox(i).Enabled = False Next i End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBA コンボボックスで選んだ値を取得するには
ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。 コンボボックスのコードで Private Sub ComboBox1_Change() moji1 = ComboBox1.Text Range("A1").Value = moji1 のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。 マクロ1にて、上記と同じ Range("A1").Value = moji1 というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。 原因をご存知の方はお教えください。
- ベストアンサー
- その他MS Office製品
- EXCEL VBA のユーザーフォームで絞り込み
ここで質問が出来るほどの実力はないのですが・・・。 EXCELのユーザーフォームにコンボボックスを2つ配置しておいて、ComboBox1では都道府県名を選択できるようにしておき、県名を選択したらComboBox2にその県の市町村名が絞り込まれて選択できるようにしたいと考えています。 エクセルにどのような並びでデータをセットしてどのようなコードを書けば実現できるのかをご教授して頂けないでしょうか? まるまる「おんぶにだっこ」的な質問内容ですがよろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセルVBA ユーザーフォームのチェックボックス
エクセルVBAのユーザーフォームのチェックボックスについて教えてください。 frame1の中にCheckbox1~5があるのですが、以下のように指示したいです。 Checkbox1~4は自由にチェックできるようにしておいて、Checkbox1~4の全てにチェックが入った場合に、Checkbox1~4の全てチェックを外し(False)、その代わりCheckbox5を自動的にチェックを入れたいです(True)。 CommandButtonなどをクリックして初めて変化するのではなく、ユーザーフォームにチェックを入れている間に自動的にチェックを入れたり外したいです。 特に「Checkbox1~4の全てにチェックが入った場合」というのを、どこに入力するのか分かりませんでした。 1箇所だけならPrivate Sub CheckBox1_Click()と始めたら良いんだとおもうのですが。。。 よろしくお願いします
- 締切済み
- オフィス系ソフト
- マクロ VBA ユーザーフォーム
いつも大変御世話になっております。 WiindowsXP環境にある【D:\】フォルダ内に【マクロ.xls】があります。 その中にユーザーフォームがあり、そこにはチェックボックスとコマンドボタンがあります。 コマンドボタンを押すと、そのユーザーフォーム内でチェックされたチェックボックスの数を 取得して変数Check_Numberに格納する処理を入れたいのですが、取得方法がわかりません。 例:チェックボックスを2つチェックした状態でコマンドボタンを押すと、【2】が 変数Check_Numberに格納される。 コマンドボタン実行プログラムをこんな↓感じで書きましたが、 これではチェックボックス総数が変更する度に Check_Number_SUMの値を変更しなければいけない為、 汎用性に欠けます。 Private Sub CommandButton1_Click() Dim Check_Number_SUM As Long Dim Check_Number As Long Dim i As Long 'チェックボックス総数設定 Check_Number_SUM = 2 'チェックボックス総数取得 For i = 1 To Check_Number_SUM If Me.Controls("CheckBox" & i).Value = True Then Check_Number = Check_Number + 1 End If Next i MsgBox Check_Number End Sub もっと汎用性が高いコード設計は可能でしょうか? もしご存知の方がいらっしゃるようでしたら、お手数ですがご教授願いますでしょうか? 以上、何卒宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- EXCEL VBA ユーザーフォームについて
仕事上システムを作り始めたVBA初心者です。すみませんが、ご教示下さい。 選択した「1の行」のC1をクリックしたときにユーザーフォームを起動させて入力しその行のセルに、数字の1を反映させたいと思っています。 その行は1で終了で今後足していきません。他の行に移ります。 フォームだけは作ってみたのですが反映の仕方がわかりません。 選択項目が多いので、2ページで作りました。 Page1 C1にテキストボックスで「#1」、D1に「#2」(記入ない場合有り)、F1に「#3」(記入ない場合有り)、H1にチェックボックス#4(選択ない場合有り)。 獲得コーナーのI1~Z1まで「Frame1」のグループどれか一組、チェックボックス(I1・J1・K1 3個ずつの連続)。3個中、左以外は記入ない場合有り。いずれかのグループに必ずチェック。 内訳の「Frame2」AA1~AK1のオプションボタン一つ必ず選択。 Page2 「Frame3」AL1、AM1、AN1で、オプションボタン一つ必ず選択。 「Frame4」チェックボックス複数選択「#11」AO1・PO1、 「#12」AQ1・AR1、「#13」AS1、AT1(記入ない場合有り) 「Frame5」AV1~AZ1複数選択 「Frame6」BA1~BC1複数選択 「Frame7」BD1~BE1複数選択 「Frame8」BF1~BI1オプションボタン一つ必ず選択。 選択後右下のコマンドボタンの「OK」ボタンで反映させたいと思っています。 選択セルが全てC列なのですが、複数選択する場所があるのと、シートが1日~31日と多いのです。(中身は全て一緒です。) 何を記入するとその行のセルに反映されるのかわからなかったのでご教示いただきたく思います。
- ベストアンサー
- SE・インフラ・Webエンジニア
- VBA ユーザーフォームを速く開く方法について
VBA ユーザーフォームを速く開く方法について 現在Excel2000を使用しています。 VBAにてユーザーフォーム1と2を作成して、ユーザーフォーム1のコマンドボタンを押すと userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはテキスト ボックスなどが約400個程設置してあり、そのせいかフォーム2が開くのに約8~10秒程かかり ます。 そこでそのフォームを速く開きたいのですが、(1秒~2秒程で)どうしたら速く開くでしょうか? Application.DisplayFullScreen = Falseなどを使用しても余り効果がありません。 パソコン自体の処理速度もあると思いますが、できるだけ速くしたいです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセルVBAでユーザーフォーム
エクセルVBAでユーザーフォーム上にオプションボタンが2つ、コンボボックスが6つあります。 OptionButton1をクリックした場合のComboboxの動きの制御について以下のように書いてみました。 これでも期待通りCombobox1~3は動き4~6は動かなくなります。 ただ、もっと別の簡単な書き方があるのではないかと思い質問しました。 宜しくお願いします。 Private Sub OptionButton1_Click() ComboBox1.Enabled = True ComboBox1.ListIndex = 0 ComboBox2.Enabled = True ComboBox2.ListIndex = 0 ComboBox3.Enabled = True ComboBox3.ListIndex = 0 ComboBox4.Enabled = False ComboBox4.ListIndex = 0 ComboBox5.Enabled = False ComboBox5.ListIndex = 0 ComboBox6.Enabled = False ComboBox6.ListIndex = 0 End Sub
- ベストアンサー
- Excel(エクセル)