• ベストアンサー

ユーザーフォーム上のボタンの使い方

今、VBAの本とインターネットで調べながら初めてユーザーフォームを作成中ですが、 どうしてもわからないことがあり、ご質問させていただきました。 初歩的なことかも知れませんが、ご教授よろしくお願い致します。 1.オプションボタンを二つ作成しました。  一方を選択した場合、フレーム全体をグレーアウトに  することはできますか。  例)ユーザーフォーム上のオプションボタン  A:住所登録   (郵便番号・所在地等を入力)  B:電話番号登録 (電話番号を入力) ※Bをオプションボタンで選択した場合、Aのフレーム全体を  グレーアウト(入力禁止)にすることはできますか。 2.ComboBoxで"年"、"月"、"日"それぞれプルダウンで選択できるように  したのですが、ワークシートに反映する時、同一セルに入力するか、  それらの数字を認識して日付として一つのセルに表示することはできますか。  例)ユーザーフォーム上    2007▼年   4▼月  19▼日  ※一つのセルに“2007年4月19日”と表示することはできますか。 3.2.の続きで、"年"、"月"、"日"すべて選択している場合、  チェックボックスにチェックが入り、どれか一つでも空白の場合は  チェックボックスがグレーアウトしている、という状態はできますか。 4.ユーザーフォームで入力した内容がExcel上にどんどん   追加していく時のマクロはどのように記述したらいいのですか。  (ユーザーフォームに入力した内容を、セルを指定せずにどんどん  追記していく方法) 質問が多くて申し訳ございませんが、よろしくお願い致します。

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

  • ベストアンサー
  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.3

解りやすく簡単に書きました。(初心者用です。) Dim N As Integer Private Sub CommandButton1_Click() NoData = 0 'ComboBox1の テキストは、簡単にするため 下記で、代用してます。 ' コードは、考えて ください。 ComboBox1.Value =2007 ComboBox2.Value = 4 ComboBox3.Value = 20 If ComboBox1.Value = "" Then NoData = NoData + 1 CheckBox1.Enabled = False End If If ComboBox2.Value = "" Then NoData = NoData + 1 CheckBox2.Enabled = False End If If ComboBox3.Value = "" Then NoData = NoData + 1 CheckBox3.Enabled = False End If If NoData = 0 Then N = N + 1 Kotae = ComboBox1.Value & "/" & ComboBox2.Value & "/" & ComboBox3.Value Kotae = Format(Kotae, "yyyy""年""m""月""d""日") Range("A1").Offset(N, 0).Value = Kotae End If End Sub Private Sub CommandButton2_Click() OptionButton1.Enabled = True CheckBox1.Enabled = True CheckBox2.Enabled = True End Sub Private Sub OptionButton1_Click() OptionButton2.Enabled = False End Sub Private Sub UserForm_Initialize() N = 0 End Sub

archer8
質問者

お礼

詳しい手順を記載してくださって、ありがとうございます。 早速、上記内容を参考にして取り組ませていただきます。 ありがとうございました。

その他の回答 (3)

  • xsizukux
  • ベストアンサー率80% (4/5)
回答No.4

1. 住所登録のオプションボタンで解除する記述が必要だと思います。 Dim con As Control For Each con In Frame1.Controls con.Enabled = True Next 2."コンボボックスの変更イベント"とは、Change()イベントのことで Private Sub ComboBox1_Change() End Sub の中に記述します。ここで、コンボボックスの値でチェックボックス にチャックを付けるかの判断を記述します。 If ComboBox1.Value <> "" _ And ComboBox2.Value <> "" _ And ComboBox3.Value <> "" Then CheckBox1.Value = True Else CheckBox1.Value = False End If コンボボックスが3個あるので、それぞれのChange()イベントに記述します。 3.“コンボボックスの変更のイベントで連結"ついては、すべての項目の入力が終わってコマンドボタンのClick()イベントで処理すると良いと思います。 "セルに出す"には、Excelに登録されている件数を調べて件数+1(出力する場所)を探します。 Dim y As Integer Dim YMD As String '登録件数から最終行を調べます y = Range("A1").CurrentRegion.Rows.COUNT + 1 'コンボボックスの連結処理 YMD = ComboBox1.Value & "/" & ComboBox2.Value & "/" _ & ComboBox3.Value YMD = Format(YMD, "yyyy""年""m""月""d""日") '最終行の1列目(A列)に出力します Cells(y, 1).Value = YMD

archer8
質問者

お礼

お返事が遅くなり、大変申し訳ございません。 詳細を書いていただき、ありがとうございます。 同一セルに日付を挿入し、オプションボタンの設定も できました! ありがとうございました。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

1.オプションボタンを二つ作成しました。  一方を選択した場合、フレーム全体をグレーアウトに  することはできますか。 *** はい 出来ます。   例)ユーザーフォーム上のオプションボタン  A:住所登録   (郵便番号・所在地等を入力)  B:電話番号登録 (電話番号を入力) ※Bをオプションボタンで選択した場合、Aのフレーム全体を  グレーアウト(入力禁止)にすることはできますか。   *** はい 出来ます。 2.ComboBoxで"年"、"月"、"日"それぞれプルダウンで選択できるように  したのですが、ワークシートに反映する時、同一セルに入力するか、  それらの数字を認識して日付として一つのセルに表示することはできますか。 *** はい 出来ます。  例)ユーザーフォーム上    2007▼年   4▼月  19▼日  ※一つのセルに“2007年4月19日”と表示することはできますか。 *** はい 出来ます。 3.2.の続きで、"年"、"月"、"日"すべて選択している場合、  チェックボックスにチェックが入り、どれか一つでも空白の場合は  チェックボックスがグレーアウトしている、という状態はできますか。 *** はい 出来ます。 4.ユーザーフォームで入力した内容がExcel上にどんどん   追加していく時のマクロはどのように記述したらいいのですか。  (ユーザーフォームに入力した内容を、セルを指定せずにどんどん  追記していく方法) 基準となるセルを指定しないと出来ません。 例; 下記 コードをループで、囲います。 または、ボタンを押すごとに 行とか 列の係数を変化させ 答えをセルに、書きこむようにします。 Range("A1").Offset(行,列).Value=答え

archer8
質問者

補足

早速のお返事、ありがとうございます。 1.2.3.ともにVBAで処理できるのですね。 申し訳ございませんが、どのような記述をすれば出来るのか 簡単で結構ですので、ご教授いただけますでしょうか。 また、4.の通りセルを固定し、答えをセルに書き込んだ後や途中でも 行追加できますか。 お手数ですが、再度よろしくお願い致します。

  • ptakeda
  • ベストアンサー率53% (7/13)
回答No.1

エクセルのVBAを使っているということでしょうか? 1.こつこつすべてのコントロールの挙動を書くのが一般的ですね。   面倒ならば、   foreachでまわしてフレーム上のコントロールすべてに対して、   control.enabled = false   かな?   こんな感じ Dim con As Control For Each con In Frame1.Controls con.Enabled = False Next 2.単純に各コンボボックスの変更のイベントで(選択コンボならクリック?)   で連結してやってセルに出してやればよいと思います。 3.同じように各コンボボックスの変更のイベントで入力状態をチェック   してチェックボックスの状態を変えてやればよいと思います。 4.空白の行を先頭から探しいって、見つかった空白セルに書き込めばよ   いと思います。

archer8
質問者

補足

ご回答、ありがとうございます。 使用しているのは、仰る通りエクセルのVBAです。 早速、1.を試したところ、グレーアウトにすることができました。 しかし、一度グレーアウトにしてしまうと元に戻せなくなって しまいました。 Next の後に、何か付け加えないといけなかったのでしょうか。 申し訳ございません。 2.3.ともに、“コンボボックスの変更のイベントで連結してセルに出す”や “イベントで入力状態をチェックしてチェックボックスの状態を変える” とはどのような操作になるのでしょうか。 インターネットでキーワード検索等をしてみたのですが、 わかりませんでした。 申し訳ございませんが、ご教授いただけますでしょうか。

関連するQ&A

  • 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日と多いのです。(中身は全て一緒です。) 何を記入するとその行のセルに反映されるのかわからなかったのでご教示いただきたく思います。

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

  • ユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果保存

    VBA初心者で恐縮です・・・ ユーザーフォームにあるチェックボックスやオプションボタンなどの選択して作業を終えファイルやユーザーフォームを閉じると、次にファイルやユーザーフォームを開いたら、前回にチェックボックスやオプションボタンにチャックをいれたものが外れています。 このように、チェックボックスやオプションボタンにチェックをいれたのを、次回ユーザーフォームを開いたときに残しておくことは可能でしょうか? 可能なら、その方法をお教えください。 よろしく、お願いいたします。

  • ユーザーフォームいろいろについて

    いろいろ手探りでVBAでユーザーフォームを作成し コマンドボックスによりテキストボックスを指定のセルへ転記し ユーザーフォームを終了させるという簡単ですがプログラミングをしました。 さらに、下記のことができたらと思ってるのですがどうしたら良いのかわかりません。 1.2種類のユーザーフォームを作成し、ファイルを開くと  選択肢ウィンドウが現れ選択したほうのユーザーフォームが開く 2.チェックボックスまたはラジオボタンで選択された項目を  指定のセルへ○を反映させたい。 以上のことを加えたいのですが、できますでしょうか。 つたない説明ですが御回答の程宜しくお願い致します。

  • ユーザーフォームでセルを選択

    エクセルのVBAでユーザーフォームに数値を入力してセルを選択することは可能でしょうか? 例えば、列はAに固定していいのですが、ユーザーフォームに「123」と入力してボタンを押せば「A123」のセルがアクティブになるようなユーザーフォームを作成したいのですが方法がわかりません。 よろしくお願いします。

  • VBA ユーザーフォームのオプションボタンについて

    VBA初心者です。宜しくお願い致します。 ユーザーフォームのオプションボタンをONにした時に、 楕円が入力されるようにしたいのですが、可能でしょうか?

  • 入力されたかどうか、オプションボタンが選択されたかどうかをチェックしたい

    入力されたかどうか、オプションボタンが選択されたかどうかをチェックして、OKなら次の入力にすすむとゆうプログラムを作りたいのですが、今回の場合、optAとoptBとoptCとがあり選択されたらcmbAとcmbBの入力(選択)を許可するとゆうプログラムを作りたいのです。簡単に If optA.Value = False And optB.Value = False And・・・ とゆうやり方はあると思うのですが、数が増えたときのためにもっと効率よくしたいのです。ネットには、 ユーザフォーム上に配置された各コントロールの入力チェックを行う段階でオプションボタンの値を効率的にチェックするには、フレームコントロール配下のControlsプロパティーから取得されるコレクションから各オプションボタンを取得し、Valueプロパティーを評価します。 '==================================================================== (For Each ループのネストによる手法) ※他のコントロールの評価も同時に行うことを想定しています 'フレーム数とTrueであったオプションボタンの個数とを比較 'OKが表示されない場合は未選択のオプショングループあり。 '===================================================================== また、フレームの数分だけのループを指定して入力チェックを行う場合は・・・ ====================================================================== (Controlsコレクションのインデックスからフレーム内のコントロールにアクセスする手法) と書いてあったのですが、初心者なものでよくわかりませんでした。この方法を詳しく解説もしくわ、他によい方法があればよろしくお願いします。

  • ユーザーフォームの呼び出し元

    ユーザーフォーム1で処理のボタンを押すと、パスワードの入力フォーム(ユーザーフォーム3)が表示されます。 ユーザーフォーム2でも処理のボタンを押すと、パスワードの入力フォーム(ユーザーフォーム3)が表示されます。 このようにパスワードの入力フォーム(ユーザーフォーム3)が共用の場合に、パスワードの入力結果を呼び出し元のユーザーフォームに帰したいのですが、 ユーザーフォーム1、2のどちらから呼び出されたのか、呼び出し元を識別する方法をアドバイス下さい。

  • ユーザーフォームから

    お世話になります。 ユーザーフォームにて、 オプションボタンでどれかを選択出来るようにし、 コマンドボタンで決定する様にしてあります。 選択した内容によりcallで別の標準モジュールに あるsubプロシージャに飛ばしたいのですが、 その記述方法が分かりません。 良くByvalの記述方法は見つかるのですが、 単純にsubプロシージャを実行したいだけなのです。 フォームの中に記述しても良いのですが、結構長くなって しまうので・・。 こういうやり方はおかしいのでしょうか。

  • エクセルのユーザーフォームについて

    エクセルマクロのユーザーフォームのテキストボックスに セルの値を表示する方法で質問です。 ユーザーフォームを表示するとその時点での セルの値はテキストボックスに表示されているのですが ユーザーフォームを表示したまま 別のブックのセルを選んだ際に そのセルの内容がテキストボックスに表示されるようにしたいです。 ボタンや、なにかをするわけではなく 自分で任意のセルを選択したら、という事です。 ユーザーフォームには selectionchange などがないのでどうすれば良いかわかりません。 宜しくお願いします。

専門家に質問してみよう