Excel VBAのオプションボタンについての質問

このQ&Aのポイント
  • Excel VBAでオプションボタンを使用する際に、チェックされない状態で登録ボタンが押された場合にメッセージを表示し、再入力を促す方法が知りたいです。
  • オプションボタンの値がTrueになるとエラーが発生し、処理が止まってしまいます。
  • また、ユーザーフォームの×ボタンを押せなくする方法や、フォームが閉じられた場合にマクロを終了する方法も知りたいです。
回答を見る
  • ベストアンサー

Excel VBA オプションボタンについて

こんばんは オプションボタンが5つあり、 登録ボタンが1つあるユーザーフォームを作りました。 このオプションにチェックを入れずに登録ボタンを押したときに 「必ず選択してください。」とメッセージを表示し、再度入力させるようにしたいのですが、どうしたらよいのでしょうか。 Excelのバージョンは2003です。 調べたところ (1)で動きそうだ。ということが判ったのですがチェックを入れ値がtrueになるとエラーが発生して止まってしまいます。(理由がわかりません) Private Sub commandbutton2_click() Dim opt As ControlFormat, flg As Boolean flg = False For Each opt In frame1.Controls If opt.Value = True Then '←ここの行でtrueだった場合のエラーが発生してしまう。 flg = True Selection.Value = opt.Caption End If Next Unload userform1 End Sub (2)この方法で何とか動いたのですが、初めの方に書いたとおり、オプションボタンが選択されずに登録ボタンが押された場合、チェックするように促すメッセージを表示する方法がわかりません。また、できればユーザーホームの×ボタンを押せなくする方法もしくは、閉じられた場合にマクロを抜けるようにするにはどうしたらよいのでしょうか。宜しくお願い致します。 Private Sub commandbutton1_click() Dim i As Integer For i = 1 To 5 If Me.Controls("optionbutton" & i).Value = True Then Selection.Value = Me.Controls("optionbutton" & i).Caption End If Next i Unload userform1 End Sub

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

御要望の基本的な部分を載せてみました。 処理内容の詳細はVBEからヘルプやネットを参考に解読して下さい。 あとは要望に従った処理になるように手を入れて見てください。 また、フォームに終了ボタンを付けないとフォームから終了する方法が無くなってしまうので注意して下さい。 'ラジオボタンのチェック Private Sub CommandButton1_Click() Dim i As Integer Dim flg As Boolean flg = False For i = 1 To 5 If Me.Controls("OptionButton" & i).Value = True Then flg = False Exit For Else flg = True End If Next If flg = True Then MsgBox "ラジオボタンを必ず選択してください。" End Sub 'フォームに終了ボタンを付ける事。 Private Sub CommandButton2_Click() Unload Me End Sub 'フォームの [X] ボタンをキャンセルするための処理 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Cancel = True End Sub

関連するQ&A

  • エクセル マクロ オプションボタン

    エクセル上にユーザーフォーム1を作り OptionButton1~4作成 Captionには OptionButton1)あ OptionButton2)い OptionButton3)う OptionButton4)え と名前を付けてOptionButton1をクリックすると TextBox1に”あ”と表示するようにしたいです! お願いします! 教えて下さい。 {宣言は何?} Dim i As Integer Dim s1 As String For i = 1 To 3 Step 1 s1 = Me.Controls("OptionButton" & i).Caption If Me.Controls("optionbutton" & i) = True Then With UserForm1 .TextBox1.Value = s1 End With End If Next i End Sub 上記の記述では無理でした! 教えて下さい。

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • エクセルVBAについて

    エクセルのVBAについて、質問させて下さい。 下記コードはform上に記述しました。 オプションコマンドのオブジェクト数をcaseで選択し、その選択したものを格納しています。 Private Sub CommandButton1_Click() Dim i As Long lngData(1) = 0 For i = 1 To 12 If Me.Controls("OptionButton" & i).Value Then lngData(1) = i Exit For End If Next Select Case lngData(2) '←次のUserForm Case 1 Unload Me UserForm2.Show ・・・・ End Select End Sub でまた別form上で呼び出しているのですが、 この時にオプションコマンドcaptionを格納するにはどういったコードになるのでしょうか? またそれに際してコードに変更がある場合も教えてください。 素人質問ですので、そもそもオプションボタンのcaptionは格納なんてできないのなら諦めます。 では、よろしくお願い致します。 以上

  • エクセルVBAマクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

  • オプションボタンとリストボックスの連動

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン1を選択=リストシートのB列をリストボックスへ表示 ・オプションボタン2を選択=リストシートのC列をリストボックスへ表示 ・リストボックスから一項目を選択、値を入力シートへ入力 Private Sub UserForm2_Initialize() If OptionButton1.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!B3:B" & lastRow End With End If If OptionButton2.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!C3:C" & lastRow End With End If End Sub Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Worksheets("入力!").ActiveCell.Value = ListBox1.Value End Sub 以上

  • オプションボタンについて

    VBAはまだやり始めたばかりで、ちょっとわからないので、教えて 下さい。 TextBox1~19に金額を入力すると、 TextBox60に小計 TextBox61に消費税 TextBox62に合計 が入るように設定してあります。 TextBox61のよこに OptionButton1 切捨て OptionButton2 切り上げ OptionButton3 四捨五入 OptionButton4 税込み(「-」を入力) を設定し、オプションボタンを選択するごとに、TextBox61の 消費税設定を変えたいと思っています。 標準では下記のコードでOptionButton1が選択されるように してあります。 オプションボタンで切り替えるにはどのようにしたら よいでしょうか。。。 Private Sub 合計Sub(ByVal myTextBox As MSForms.TextBox) Const cnsTax As Double = 0.05 Dim i As Long Dim v(1 To 19) As Long Dim y(60 To 62) As Long ' With myTextBox .Value = Format$(.Value, "#,##0") End With '再計算 On Error Resume Next For i = 1 To 19 v(i) = CLng(Me.Controls("TextBox" & i).Value) Next With Application.WorksheetFunction y(60) = .Sum(v) If myTextBox Is Me.TextBox61 Then y(61) = CLng(myTextBox.Value) Else y(61) = .RoundDown(y(60) * cnsTax, 0) End If y(62) = .Sum(y(60), y(61)) End With On Error GoTo 0 For i = 60 To 62 Me.Controls("TextBox" & i).Value = Format$(y(i), "#,##0") Next End Sub

  • VBAでオプションボタンの設定

    ワークシート上にOLEオブジェクトのオプションボタンを配置して、LinkedCellを設定し、同一行でGroupName を設定し、Caption をYesとNoにしようと思いました。 ところが、以下のコードですと、GroupName とCaption がエラーになってしまいます。 どのように直せばいいのでしょうか? エクセル2003です。 Sub test01() Dim n As Long, i As Long With ActiveSheet For n = 1 To 2 For i = 1 To 3 Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=.Cells(i, n).Left, Top:=.Cells(i, n).Top, Width:=50, Height:=18) opt.LinkedCell = .Cells(i, n).Offset(, 4).Address ' opt.GroupName = "OptG" & i ' opt.Caption = IIf(n = 1, "Yes", "No") Next i Next n End With End Sub

  • エクセルVBA 赤ペン先生をお願いします

    皆さんこんにちは。 エクセル2013使用しているVBA初心者です。 エクセルVBAでコードをど根性&こちらで質問させていただいた時のご回答を元に 作成してみたのですが思うような動作になりません。 下記のコードが美しくないのも重々承知しておりますが 下記内容で修正するべき個所を教えていただけないでしょうか。 やりたい事は ・ユーザーフォーム5でフレームが2個あり  1個は作成書類を7個から1つ選択  もう1個は支社を7個から1つ選択  →「次へ」のボタンを押すと「○○と△△支社を選択しています。お客様情報に~」のメッセージ表示  →OK→処理を続行します→OKならユーザーフォーム4(お客様情報)を開く   キャンセル→処理を中断します→ユーザーフォーム5を再度表示して選択し直せるように・・・   という事をやりたいのですが知識不足の上いくら参考書等を探しても これだ!というものにたどりつけずに困っています。 「○○と△△支社が選択されています」の箇所も myMSG & vbCrLf & "と" & myMSG & だと「△△と△△支社が選択されています」に なってしまうのは理解出来ているのですが代わりにいれるコードも分かりません。 また、「メッセージ表示のOK」を押して「処理を続行しますのキャンセル」を押しても ユーザーフォーム5に戻ることはなくユーザーフォーム4に 進んでしまう始末です。 毎度拙い質問文で申し訳ございませんが どうか皆様のお知恵をお借りできないでしょうか。 ※コードはコマンドボタン1(次へ)に書いてあります。 ---------------------------------------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 14 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If If (OptionButton1 Or OptionButton2 Or OptionButton3 Or OptionButton4 Or OptionButton5 Or OptionButton6 Or OptionButton7) = False Then MsgBox ("作成する書類を選択して下さい") Me.Hide UserForm5.Show End If If (OptionButton8 Or OptionButton9 Or OptionButton10 Or OptionButton11 Or OptionButton12 Or OptionButton13 Or OptionButton14) = False Then MsgBox ("支社を選択して下さい") Me.Hide UserForm5.Show End If Next i intRtn = MsgBox(myMSG & vbCrLf & "と" & myMSG & "支社" & vbCrLf & "が選択されています。" & vbLf & _ "お客様情報に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") Unload UserForm5 UserForm4.Show If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If End Sub Private Sub UserForm5_QueryClose(Cancel As Integer, CloseMode As Integer) 'Formが閉じるとき If CloseMode = 0 Then '×ボタンを押された場合 End 'プログラムの実行を終了 End If End Sub

  • Excel VBAフォーム 登録ボタンの作成方法

    いつもお世話になっています。 初めて、Excelのフォームで入力画面を作りました。 複数の項目があって、それを最後に[登録]ボタンをクリックで 表に入れたいのですが、一度にまとめて実行する方法が分かりません。 アドバイスよろしくお願いいたします。 Private Sub cmd_1() Dim i As String If man.Value = True Then ActiveCell = man.Caption End If If woman.Value = True Then ActiveCell = woman.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_2() Dim i As String If man.Value = True Then ActiveCell = Yes.Caption End If If woman.Value = True Then ActiveCell = No.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_downlist() Dim ListNo As Long ListNo = group.ListIndex ActiveCell.Value = group.List(ListNo, i) ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_comment() ActiveCell = comment.Text ActiveCell.Offset(1, -3).Select End Sub

  • エクセルVBAオプションボタンの選択画面に戻りたい

    皆さんこんにちは。 エクセルVBAの初心者です。 選択画面に戻るためのコードが足りていない感じなのですが・・ ご教授をお願いします。 ※エクセル2013を使用しています。 ユーザーフォーム1で作成書類を5種類から選択するようにしました。 選択後、「次へ」のボタンを押すと 『○○が選択されています。支社選択画面に移動します。』という メッセージが出るようにコードを作りました。 「OK」を押せば次の選択画面が開くように今後作っていく予定なのですが 「キャンセル」を押すとユーザーフォーム1が画面から消えるようになってしまっています。 やりたい事は「キャンセル」を押し『処理をキャンセルしました。』と メッセージが出た後に 最初のユーザーフォームで作成書類を選択し直すところに戻りたいのです。 私が作成したコードを記載しますので どこがどう間違っているのか、何が足りないのか ご教授いただければ幸いです。 ----------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 5 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If Next i intRtn = MsgBox(myMSG & vbCrLf & "が選択されています。" & vbLf & _ "支社選択画面に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If End Sub

専門家に質問してみよう