• ベストアンサー

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

今、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.ともに、“コンボボックスの変更のイベントで連結してセルに出す”や “イベントで入力状態をチェックしてチェックボックスの状態を変える” とはどのような操作になるのでしょうか。 インターネットでキーワード検索等をしてみたのですが、 わかりませんでした。 申し訳ございませんが、ご教授いただけますでしょうか。