• ベストアンサー

オプションボタン

昨日も質問させていただいたものです。 オプションボタンの使い方について質問があります。 コマンドボタン1つ、テキストボックスを1つ、ラベルを一つ、 フレームを二つ用意し、それぞれのフレームに3つずつオプションボタンを配置します(●フレームA、B●オプションA1、A2、A3、オプションB1、B2、B3とする)。 オプションA1~3には1~3年生というキャプションを、 オプションB1~3には1~3組というキャプションを設定します。 テキストに名前を打ちこんでコマンドボタンを押すと、 ラベルに(テキストが太郎の場合)"太郎は3年1組です" と表示されるようなものを作ろうと考えています。 コマンドボタンを使用せずに、オプションボタンのみで作ると Privat Sub OptionA1_Click() If OptionB2.Valrue=True Then Label1.Caption="" と言うような感じで何個も書けば良いと思うのですが、 これにをコマンドボタンで実行させようとすると方法がわかりません。 アドバイスお願いします。

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

  • ベストアンサー
  • hd77
  • ベストアンサー率28% (17/60)
回答No.1

とりあえず、基本的な命令で書くとこんなかんじになると思います。 Private Sub CommandButton1_Click() Dim nen As String Dim kumi As String If TextBox1.Text = "" Then MsgBox ("氏名が入力されてません") Exit Sub End If If op1 = True Then nen = "1年" Else If op2 = True Then nen = "2年" Else If op3 = True Then nen = "3年" Else MsgBox ("年が指定されていません") Exit Sub End If End If End If If op4 = True Then kumi = "1組" Else If op5 = True Then kumi = "2組" Else If op6 = True Then kumi = "3組" Else MsgBox ("組が指定されていません") Exit Sub End If End If End If label1 = TextBox1.Text & "は" & nen & kumi & "です" End Sub

kogashiman
質問者

お礼

レスありがとうございました。 初心者の私にもとてもわかりやすかったです。 これから一生懸命勉強します。 またよろしくお願いします。

その他の回答 (2)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

仕様ではオプションボタンを6つ必要ですが、そのボタン全てにOp1~Op6までの名前を付けていては大変です。 質問でも書いてあった通り、このままではコーディングの時、一つ一つのボタンについてのTrue/Falseの調査ロジックが必要です。なので、Op1とOp2で済むようにしましょう。 コントロールを配列にしてしまうのです。 オプションボタンのプロパティに[Index]っていうのがありますよね?それを使用します。 以下の処理を手順どおりにデザインで行ってください。 フレーム1の中で・・・ 1.[Name]Option1を、[Index]を'0'にしてください。 2.[Name]Option2を、[Name]をOption1、[Index]を'1'にしてください。 3.[Name]Option3を、[Name]をOption1、[Index]を'2'にしてください。 [ フレーム2の中で・・・ 4.[Name]Option4を、[Name]をOption2、[Index]を'0'にしてください。 5.[Name]Option5を、[Name]をOption2、[Index]を'1'にしてください。 6.[Name]Option6を、[Name]をOption2、[Index]を'2'にしてください。 できたら、それぞれのキャプションを設定してください。 7.[Name]Option1・[Index]0を、[Caption]を'1年生' 8.[Name]Option1・[Index]1を、[Caption]を'2年生' 9.[Name]Option1・[Index]2を、[Caption]を'3年生' 10.[Name]Option2・[Index]0を、[Caption]を'1組' 11.[Name]Option2・[Index]1を、[Caption]を'2組' 12.[Name]Option2・[Index]2を、[Caption]を'3組' 13.コマンドボタンを用意してください[Name]Command1 で次のプログラムを実行してみてください Private Sub Command1_Click() Dim wkGAKUNEN As String '学年 Dim wkKUMI As String '組 With Me 'フレーム1(学年)についての調査 wkGAKUNEN = getSelectOptionButtonCaption(.Option1) If wkGAKUNEN = "" Then MsgBox "学年が選択されてない" Exit Sub End If 'フレーム2(組)についての調査 wkKUMI = getSelectOptionButtonCaption(.Option2) If wkKUMI = "" Then MsgBox "組が選択されてない" Exit Sub End If 'イミディエイトウィンドウへ出力 Debug.Print wkGAKUNEN & ":" & wkKUMI End With End Sub '【機能】コントロール配列のオプションボタンの中で選択されているボタンのキャプションを得る '【注意】制限として、オプションボタンはコントロール配列(インデックスを持つコントロール)であること Private Function getSelectOptionButtonCaption(inOptionButton As Object) As String Dim OpBtn As OptionButton For Each OpBtn In inOptionButton If OpBtn Then 'もし選択されていたら、その学年を記憶しループを抜ける getSelectOptionButtonCaption = OpBtn.Caption Exit For End If Next OpBtn End Function

kogashiman
質問者

お礼

レスありがとうございます。 私はまだ、配列とかループとかってのを 勉強してないので、チョト難しかったです。 でも、これからがんばります。 丁寧な回答ありがとうございました。

  • ayucat
  • ベストアンサー率12% (7/55)
回答No.2

# まず、これってVBですかね? >Privat Sub OptionA1_Click() ^  eがないのは入力ミスかな? >If OptionB2.Valrue=True Then ^  Valueですよね。   >Label1.Caption=""  ここで、Label1を空文字列にすることって何か意図が あるのですか?

kogashiman
質問者

お礼

レスありがとうございます。 >まず、これってVBですかね?  はい、そうです。書いてませんでしたね。すいません。  それにしてもタイプミスばかりで・・・・・・

関連するQ&A

  • オプションボタンの名前を変更したい

    Excel2007を使用しています。VBAでの質問です。 ユーザーフォームに、タブストリップを作成し、その中にラベルとオプションボタンを配置しました。 タブは4ページありますが、切り替わるごとにラベルとオプションボタンの表示が下の様に変わるようにしたいのです。 (1) Label1 の value → ワークシート"緑"のA列に入力されている文字 (2) OptionButton1 の caption → ワークシート"緑"のB列に入力されている文字 (1)のラベルは、ネットで調べわかりました。  Private Sub TabStrip1_Change()    Dim myindex As Integer    myindex = TabStrip1.Value    Label1.ControlSource = "緑!A" & myindex  end sub (2)でも、(1)と同じように ControlSource で変わると思いましたが、valueでしかできないようです。 オプションボタンでも同じように表示を変えたいのですが、どのようにすればいいでしょうか? よろしくお願いします。

  • 複数コントロールテキストの同一セルへの入力

    はじめまして。 エクセルVBAについて質問させて頂きます。 ユーザーフォームにラベル・テキストボックスそれぞれ1~6があって ラベルのキャプションとテキストボックスのテキストをセル同一セルに 入力したくて With UserForm1 Range("A1") = .Label1.Caption & .TextBox1.Text & .Label2.Caption & .TextBox2.Text _ & .Label3.Caption & .TextBox3.Text & .Label4.Caption & .TextBox4.Text _ & .Label5.Caption & .TextBox5.Text & .Label6.Caption & .TextBox6.Text End With と、このように記述したのでが、これをもっと簡潔に書く方法はございませんでしょうか? ご教授よろしくお願いします。

  • 3つのオプションボタンの場所によって分岐させるselect文

    3つのうち一つしか選べないオプションボタンのチェックした場所によってテキストボックスに数字を表示させる文を書きたいのですがどのようにselect case 文を書いていけばよいのでしょうか? ・3つともボタンのオブジェクト名(opt)は同じです。indexプロパティは1,2,3にしています。 select case index case 1 label.caption = 1 case 2 label.caption = 2 case 3 label.caption = 3 End select 上記ではうまくいきませんでした。

  • オプションボタンの使い分けによる時間計算

    オプションボタンの使い分け(自動入力と手動入力)によって、 「●やりたい操作」を行うには以下のコードをどのように修正すれば、 良いでしょうか?ご存知の方ご教示願います。 使用機種はWindowsVistaでExcel2007です 私はVBAをはじめて2カ月程度の初心者です。 ●やりたい操作 A)「自動入力」を選択(赤色部分)→原則の操作 1.「作業開始ボタン」を押すと「開始時間」が現在の時間になる。 2.「作業開始ボタン」を押すと表記が「作業終了」になる。 3.「作業終了ボタン」を押すと「終了時間」が現在の時間表記になる。 4.3と同時に「作業時間」が「終了時間」-「開始時間」の時間計算を行って   表記される。 ※このとき「手動入力ラベル」や「テキストボックス」には、それぞれロックが かかり、入力不可状態にする B)「手動入力」を選択(青色部分)→例外の操作 1.左から1番目のテキストボックスに「hh:mm」形式で任意の時間を入力 2.左から2番目のテキストボックスに「hh:mm」形式で任意の時間を入力 3.左から3番目のテキストボックスに「hh:mm」形式で2-1の時間計算   を行う ※このとき「自動入力ラベル」、「作業開始ボタン」、「開始時間」、 「終了時間」にそれぞれロックがかかる。 ●コード Option Explicit ' True なら計測中を表す Dim inProcess As Boolean Private j_Kaishi As Date Private j_Syuryo As Date Private s_kaishi As Date Private s_Syuryo As Date Private Sub UserForm_Initialize() OptionButton1 = True OptionButton2 = False TextBox5.Locked = True TextBox6.Locked = True TextBox7.Locked = True Label22.Caption = "開始時間" Label23.Caption = "終了時間" Label23.Caption = "作業時間" 'オプションボタンが1「自動」にオンならば、CommandButton6_Clickを呼び出す If OptionButton1 = True Then Call CommandButton6_Click 'オプションボタン1が「自動」にオフならば、 OptionButton2_Clickを呼び出す Else Call OptionButton2_Click End If End Sub '開始時間を自動入力クリックするとラベル1が時間に変わる Private Sub CommandButton6_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True j_Kaishi = Time Label22.Caption = Format(j_Kaishi, "hh:mm") Label23.Caption = "" Label24.Caption = "" CommandButton6.Caption = "作業終了" Case True ' 計測を終了してインターバルを表示 inProcess = False j_Syuryo = Time Label23.Caption = Format(j_Syuryo, "hh:mm") Label24.Caption = Format(j_Syuryo - j_Kaishi, "hh:mm") CommandButton6.Caption = "作業開始" End Select End Sub '開始時間を手動入力 Private Sub OptionButton2_Click() CommandButton6.Locked = True TextBox5.Locked = False TextBox6.Locked = False s_kaishi = Time TextBox5.Text = Format(s_kaishi, "hh:mm") s_Syuryo = Time TextBox6.Text = Format(s_Syuryo, "hh:mm") TextBox7.Text = Format(s_Syuryo - j_Kaishi, "hh:mm") End Sub

  • ボタンを押すとラベルの文字をかえるには

    VB2008エクスプレスを使っています 初歩的な質問なんですが フォームにボタンとラベルを貼って ボタンを押すとラベルの文字が変わるように設定したいです buttun1クラスで clickメドットで Label1.Text = Label.text("") で("")内に文字を入力したんですが エラーになってしまします

  • オプションボタンによっての表示/非表示

    連続の質問で申し訳ございません。。。 オプションボタンが4つあります。 それによって、隣のframe113を表示/非表示にしたいです。 考え出したのが、↓なのですが、a4というオプションボタンをクリックすると表示されるようになったのですが、一度表示されたら最後、その他a1~a3をクリックしても(a4がFALSEの状態になっても)消えません。 Private Sub a4_Click() Frame113.Visible = True End Sub 基本的事ばかりで申し訳ございませんが宜しくお願いします。

  • ユーザーフォームの描画が遅れるのは?

    ExcelのVBAで簡単な処理をしているのですが、困っています。 ユーザーフォームにラベル1つとコマンドボタンを2つ用意しました。 ラベルには「・・・よろしいですか?」と質問形式の文章を 表示し、コマンドボタンにはそれぞれ「OK」と「キャンセル」を 表示してあります。 「OK」のコマンドボタンをクリックされたら、2つのコマンドボタン のvisibleプロパティをfalseにして隠し、ラベルには 「しばらくお待ちください。」と表示してセルの計算をさせます。 私の考えでは、コマンドボタンが消えラベルに「しばらく・・」が 表示されてから計算が行われセル上に計算結果が 表示されるはずなのですが、何故か計算結果が全て表示されてから コマンドボタンが消え、ラベルに「しばらく・・」と表示され 次の命令を実行してしまいます。 何がいけないのかが分かりません。 宜しくお願いいたします。 Private Sub CommandButton1_Click()  UserForm1.CommandButton1.Visible=False  UserForm1.CommandButton2.Visible=False  UserForm1.Label1.Caption="しばらくお待ちください。" '計算のsubへ飛ぶ  Call Keisan  UserForm1.Label1.Caption="終了しました。" End Sub

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • Visual Basic 6.0でのLabelについて質問です。

    Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • ユーザーフォームのキャプションに中国語を表示したい

    VBAのユーザーフォームのキャプション(タイトル)に中国語を表示する方法が分かりません。 VBEではコードに中国語の簡体字を入力できないので、ワークシートに中国語を入力しておいて、それをキャプションに表示させたいです。 ラベルのTextやコマンドボタンのCaptionにはこの方法で簡体字を表示できるのですが、ユーザーフォームのCaptionでは?に置換されてしまいます。