Excel VBAでの繰り返し処理についての質問

このQ&Aのポイント
  • Excel VBAで、B2セルにオプションボタンの選択結果をセットするプログラムを作成しています。この処理をB3〜B11にも繰り返すには、どのようなコードを記述すればよいでしょうか。
  • 現在、どのセルを選択してもオプションボタンが表示されますが、B2を選択したときのみ表示されるようにするには、どのようにすればよいでしょうか。
  • Excel VBAの繰り返し処理についての質問です。B2セルにオプションボタンの選択結果をセットするプログラムを作成し、それをB3〜B11にも繰り返したいです。また、B2を選択したときのみオプションボタンが表示されるようにしたいです。どのようなコードを記述すればよいでしょうか。
回答を見る
  • ベストアンサー

繰り返し処理について

設問をA列に、回答欄をB列に設定した10問程の 正誤問題の一覧を作ろうとしています。 (B1に問題文、B2に正または誤で回答) セルを選択時にオプションボタンが出るようにし、 選択したものがセルに入力されるように プログラムを組みました。 現在入力しているコードは以下のものになります。 ●User Form Private Sub CommandButton1_Click() If OptionButton1.Value = True Then Worksheets(1).Range("B2").Value = OptionButton1.Caption ElseIf OptionButton2.Value = True Then Worksheets(1).Range("B2").Value = OptionButton2.Caption End If End Sub ●Sheet1 Private Sub Worksheet_SelectionChange(ByVal Target As Range) UserForm1.Show End Sub これと同じことがB3~B11でも繰り返されるようにするには どのようにコードを入力すれば良いでしょうか。 (Do~LoopやFor each~Nextを使用するのでしょうか?) また、現在はどのセルを選択してもオプションボタンが出るように なっているのですが、B2を選択したときにだけ出すようにすることは 可能でしょうか? 初歩的な質問かもしれませんが、 全く検討がつかないのでご回答お願い致します。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>C2,D2が選択された時にもオプションボタンが出て・・・ ということは、 >設問をC列に、回答欄をD列に設定した10問程の・・・ の場合もあるということでしょうか? ActiveCell.Column で選択した列の番号がでます。 A列を選択した場合 ActiveCell.Column は 1 C列を選択した場合 ActiveCell.Column は 3 ですので Private Sub CommandButton1_Click() j = ActiveCell.Column + 1 i = ActiveCell.Row If OptionButton1.Value = True Then Worksheets(1).Cells(i,j).Value = OptionButton1.Caption ElseIf OptionButton2.Value = True Then Worksheets(1).Cells(i,j).Value = OptionButton2.Caption End If End Sub   選択した列の一つ右側に結果が入ると思いますが。

qwerghjk
質問者

お礼

よくわかりました!ありがとうございます。 お礼が遅くなりすみません。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

一例です。 回答したい問題文の行を選択したとします。 Private Sub CommandButton1_Click() i = ActiveCell.Row If OptionButton1.Value = True Then Worksheets(1).Range("B" & i).Value = OptionButton1.Caption ElseIf OptionButton2.Value = True Then Worksheets(1).Range("B" & i).Value = OptionButton2.Caption End If End Sub

qwerghjk
質問者

お礼

早速のご回答ありがとうございます。 大変不躾ではございますが、お手すきの際に補足の質問にご回答頂けると大変助かります。

qwerghjk
質問者

補足

C2,D2が選択された時にもオプションボタンが出て、その内容がセルに反映されるようにするには ・オプションボタンを新たに設置 ・コードのBをCやDに書き換える 必要があるという事でしょうか?

関連するQ&A

  • excel ユーザーフォームでシートごとに転記2

    先日ユーザーフォームへの転記について質問させていただきました。 ご回答いただき、ありがとうございました。 今度はオプションボタンで選択したときに、シートごとに転記する方法を 教えていただけますでしょうか。 ユーザフォーム上で、オプションボタンを選択。 OptionButton1・・・シート1へ転記 OptionButton2・・・シート2へ転記 これをOKボタンを押したときに転記するようにしたいと思っています。 Private Sub OK_Click() Dim CLrow As Long Dim KYrow As Long CLrow = Worksheets("Sheet1").Range("A65536").End(xlUp).Row KYrow = Worksheets("Sheet2").Range("A65536").End(xlUp).Row If OptionButton1.Value = True Then Worksheets("Sheet1").Range("A" & CLrow).Value = .TextBox1.Value ElseIf OptionButton2.Value = True Then Worksheets("Sheet2").Range("A" & KYrow).Value = .TextBox1.Value End With End Sub ここまでやってみたのですが「参照が不正または不完全です」 と出てしまいます。 どなたかご教示願います。 よろしくお願いします。

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • オプションボタンで選択したセルにキー入力出来ない他

    UserForm1を配置しその中にOptionButtonを2つ配置しまして、 OptionButton1をクリックした時は、a1セルに東京と表示した後カーソルをb1セルに移動させて、 そのB1セルに数字をキー入力する。 OptionButton2をクリックした時は、a1セルに大阪と表示した後カーソルをb1セルに移動させて、 そのB1セルに数字をキー入力するマクロをつくりました。 '---------------------------- Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub OptionButton1_Click() Range("a1").Value = "東京" Range("b1").Activate End Sub Private Sub OptionButton2_Click() Range("a1").Value = "大阪" Range("b1").Activate End Sub '---------------------------- 動かしてみて、下記2点を改良したいのですが 1、OptionButtonをクリック後、数字キーを押してもb1セルに表示されません、b1セルをマウスでクリック後キー入力すると入力した数字が表示されます。マウスでクリックしなくてもキー入力出来る   ようにしたい 2.ファイルを保存終了後、再度開いたときオプションボタンの丸印が2つ共○になっているが、前回終了時に選んだオプションボタンに●がついた状態で表示させたい 以上 よろしくお願いします

  • エクセルVBA ユーザーフォームの表示内容を選択条件によって変更する

    ExcelVBA初心者です。 ユーザーフォーム1でsheet1を選択した場合→次のユーザーフォーム2ではsheet1の内容を、 sheet2を選択した場合→sheet2の、sheet3を選択した場合→sheet3の 内容をそれぞれキャプションとして表示したいのですが、 なかなか上手く出来ません。 Private Sub UserForm_Initialize() If UserForm1.ComboBox1 = Worksheets("Sheet1").Select Then UserForm2.Caption = Worksheets("Sheet1").Range("B3").Value ElseIf UserForm1.ComboBox1 = Worksheets("Sheet2").Select Then UserForm2.Caption = Worksheets("Sheet2").Range("B3").Value Else UserForm1.ComboBox1 = Worksheets("Sheet3").Select UserForm2.Caption = Worksheets("Sheet3").Range("B3").Value End If End Sub としてみたのですが、どのシートを選択してもsheet3の内容が ユーザーフォーム2のキャプションとして表示されてしまいます。 どのようにしたら良いでしょうか? よろしくお願い致します。

  • Excel VBA OptionButton

    Excel VBAのOptionButtonについてお伺いします。 現在、Excel2007にてユーザーフォームを作成しております。 シート上の文字によって、ユーザーフォーム上のオプションボタンの ON/OFFを切り替えたいのですがうまく動作しません。 具体的には・・・・ ユーザフォーム上のCommandButton1を押下すると、 sheet2のE22セルの文字がTRUEの場合、ユーザーフォーム上の OptionButton1がON・OptionButton2がOFF sheet2のE22セルの文字がFALSEの場合、ユーザーフォーム上の OptionButton1がOFF・OptionButton2がON 以下のように考えていたのですが、動作しません。 ------------------------------ Private Sub CommandButton1_Click() If sheet2.Range("E22").Value = "TRUE" Then OptionButton1.Value = True ElseIf sheet2.Range("E22").Value = "FALSE" Then OptionButton2.Value = True End If ------------------------------ お知恵お借りしたく存じます。 宜しくお願い致します。

  • タブストリップの中のオプションボタン

    お世話になります。 Excel2007を使用しており、VBAでの質問です。 ユーザーフォームに、タブストリップを作成し、クイズを作っています。その中に選択肢として、フレームの中にオプションボタンを3つ配置しました。 オプションボタンを押すと、ワークシート"緑"のI列のセルに反映させるようにしています。 Private Sub OptionButton1_Click() Worksheets("緑").Select Select Case TabStrip1.Value Case 0  Range("I3").Value = "A" Case 1  Range("I4").Value = "A" Case 2  Range("I5").Value = "A" Case 3      Range("I6").Value = "A" End Select End Sub これをOptionButton2なら、"B"。OptionButton3なら"C"にします。 しかし、今の状態では、OptionButton1を押し、タブを替えると、すべてOptionButton1が選択されているように見えてしまいます。実際には、セルに反映しているので、後の答え合わせなどは大丈夫なのですが、ユーザーフォームから見直ししたい場合にみると、わかりにくいのではないかと思います。なので、オプションボタンは ・タブを替えても、自分が選択したものにチェックがはいっている。 ・まだ、回答をクリックしてないものには、チェックが入っていない。 つまりタブごとに、違う選択を表示させたいのです。それとも、マルチページで作成したほうがいいのでしょうか? 説明が下手ですみません。どうぞよろしくお願いします。

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

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン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マクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタン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」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

  • 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

  • ユーザーフォームのデータ

    ユーザーファームを2つ作成しました。 そのユーザーフォームのデータを表の最終行に追加をしたいのです。 Range("A65536").End(xlUp).Offset(1,0).select を使おうと思っていますが、うまくいきません。 どなたか教えてください。 <ユーザーフォーム1> Private Sub CommandButton1_Click() Sheet2.Range("H7") = TextBox1 Sheet2.Range("I7") = TextBox2 Sheet2.Range("J7") = TextBox3 Sheet2.Range("K7") = TextBox4 Sheet2.Range("L7") = TextBox5 Sheet2.Range("P7") = TextBox6 If CheckBox1.Value = True Then Worksheets(2).Range("M7") = "0:30" Else Worksheets(2).Range("M7") = "0:00" End If If CheckBox2.Value = True Then Worksheets(2).Range("R7") = "1000" Else Worksheets(2).Range("R7") = "0" End If If CheckBox3.Value = True Then Worksheets(2).Range("S7") = "3000" Else Worksheets(2).Range("S7") = "0" End If If CheckBox4.Value = True Then Worksheets(2).Range("T7") = "1500" Else Worksheets(2).Range("T7") = "0" End If Unload Me End Sub <ユーザーフォーム2> Private Sub CommandButton1_Click() Sheet2.Range("V7") = TextBox1 Sheet2.Range("W7") = TextBox2 Sheet2.Range("X7") = TextBox3 Unload Me End Sub