![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセルのVBAでフォームをつくり
3つのオプションボタンを配置し
チェックした項目のとき、指定したセルに「レ」の印を書き込ませたいのですが、うまくいきません。
同じフォーム内のテキストボックスやコンボボックスの内容はうまくセルに書き込めるのですが・・・
オプションボタンのグループは設定してあります。
下のように記述したのですが、なぜ思うように動作しないか教えてください。
If オプション(3) = True Then
ActiveCell.Value = "レ"
ElseIf オプション(1) = True Then
Range("H21").Value = "レ"
ElseIf オプション(2) = True Then
Range("H23").Value = "レ"
End If
No.1ベストアンサー
- 回答日時:
チェックボタンではなく、オプションボタンって事は、いずれか1つしか「レ」は付かないようにしたいって事ですよね?
OptionButton3 をチェックしたら、OptionButton1 と OptionButton2 に対応するセルをクリアしないと、チェックした全部にレが付いちゃいますけど、、、
そう言う事ではない?
'--------------------------------------------------
Private Sub OptionButton1_Click()
OpValueSet (Array("レ", Null, Null))
End Sub
'--------------------------------------------------
Private Sub OptionButton2_Click()
OpValueSet (Array(Null, "レ", Null))
End Sub
'--------------------------------------------------
Private Sub OptionButton3_Click()
OpValueSet (Array(Null, Null, "レ"))
End Sub
'--------------------------------------------------
Sub OpValueSet(myArray)
Dim rAddress, i As Integer
If Not IsArray(myArray) Then Exit Sub
rAddress = Array("H21", "H23", "H25")
For i = 0 To 2
ActiveSheet.Range(rAddress(i)) = myArray(i)
Next i
End Sub
うまく動作しました。ありがとうございました。
勉強のために教えていただきたいのですが、
rAddress = Array("H21", "H23", "H25")
For i = 0 To 2
ActiveSheet.Range(rAddress(i)) = myArray(i)
Next i
この部分を解説していただけないでしょうか
よろしくお願いします。
No.6
- 回答日時:
質問者がやりたいこととあっているか心配ですが
ワークシートにUserformを貼り付けました。
実はVBEの画面で挿入-ユーザーフォームです。
そしてそのユーザーフォームの上にチェックボックスを貼り付けました。
標準モジュールに
Sub test01()
UserForm1.Show vbModeless
End Sub
別にチェックボックスのクリックイベントプロシージュアーに
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
ActiveCell = "V"
Else
ActiveCell = ""
End If
End Sub
を作りました。
実行すると、ワークシート画面になりフォームが現れます。
好きなセルを指定して、ユーザーフォームのチェックボックスをクリックすると、アクチブセルに「V」が
入ります。別のセルの「V」の入ったセルでチェックボックスのVをクリックするとそのアクチブセルは空白になります。
vbModelessのことが言いたかったのですが、エクセル
2000以上でないと使えないそうです。
フォームが表示されている間も、セルの指定を動かすことができました。
No.5
- 回答日時:
投稿途中で中止して、ちょっと書換えたら#3~4が2重投稿になっちゃったようでスミマセン。
Wendy02さん
こんにちは。
> なお、グループ化しても、オブジェクトとしてまとまるだけで、あまり役に立たないと思います。
> 使う場合は、フレームで囲います。
たぶんグループ化ではなく GroupName プロパティで同グループに設定してあるって意味ではないかと、、、
フレームに置かなくてもすみますし。
No.4
- 回答日時:
もう、解決をしているようですが、少し、私のほうからも書かせていただきます。
papayukaさんの回答でうまく行っているというと、ユーザーフォームなんですね。
ご質問は、「フォーム」と、お書きになっていたので、EXCELでは、「フォーム」は、ワークシートのオブジェクトの配下に入りますので、そちらのように読めました。
ユーザーフォームでは、あえて、個別のコントロール・コレクションを作らないと、VBのようには、コレクション化ができません。
>If オプション(3) = True Then
を使うのでしたら、以下のようになります。
'<ユーザーフォーム・モジュール>
Dim オプション As New Collection
Private Sub UserForm_Initialize()
'コントロールのコレクション化
For i = 1 To 3
オプション.Add Me.Controls("OptionButton" & i)
Next
End Sub
Private Sub CommandButton1_Click()
Union(ActiveCell, Range("H21"), Range("H23")).ClearContents
If オプション(3).Value = True Then
ActiveCell.Value = "レ"
ElseIf オプション(1).Value = True Then
Range("H21").Value = "レ"
ElseIf オプション(2).Value = True Then
Range("H23").Value = "レ"
End If
End Sub
'※UserForm の起動は、モードレス(0)
'第3番目のElseIf があるというのは、他にもOptionButton がある、ということでしょうか?なければ、Else だけでもよいです。
のようにします。
しかし、一般的なOfficeのVBAのコードですと、このようにしたら楽だと思います。
'<ユーザーフォーム・モジュール>
Private Sub OptionButton1_Click()
ActiveCell.ClearContents
Range("H23").ClearContents
Range("H21").Value = "レ"
End Sub
Private Sub OptionButton2_Click()
ActiveCell.ClearContents
Range("H21").ClearContents
Range("H23").Value = "レ"
End Sub
Private Sub OptionButton3_Click()
Range("H21,H23").ClearContents
ActiveCell.Value = "レ"
End Sub
'※UserForm の起動は、モードレス(0)
なお、グループ化しても、オブジェクトとしてまとまるだけで、あまり役に立たないと思います。使う場合は、フレームで囲います。
No.3
- 回答日時:
#2です。
> rAddress = Array("H21", "H23", "H25")
> For i = 0 To 2
> ActiveSheet.Range(rAddress(i)) = myArray(i)
> Next i
各OptionButton のクリックでサブルーチンを呼ぶ際に配列を渡します。
OpValueSet (Array("レ", Null, Null))
受け取った配列 myArray は 3つ値を保持しています。
最初の Index は 0 なので、myArray(0)で "レ" を取り出せます。
同様に セルのアドレスを配列にして、0~2でループすれば、
ActiveSheet.Range("H21") = "レ"
ActiveSheet.Range("H23") = Null
ActiveSheet.Range("H25") = Null
こう書いたのと同じ意味です。
押されたボタンによって、
ActiveSheet.Range("H21") = Null
ActiveSheet.Range("H23") = "レ"
ActiveSheet.Range("H25") = Null
や
ActiveSheet.Range("H21") = Null
ActiveSheet.Range("H23") = Null
ActiveSheet.Range("H25") = "レ"
となります。
No.2
- 回答日時:
#2です。
> rAddress = Array("H21", "H23", "H25")
> For i = 0 To 2
> ActiveSheet.Range(rAddress(i)) = myArray(i)
> Next i
各OptionButton のクリックでサブルーチンを呼ぶ際に配列を渡します。
OpValueSet (Array("レ", Null, Null))
受け取った配列 myArray は 3つ値を保持しています。
最初の Index は 0 なので、myArray(0)で "レ" を取り出せます。
同様に セルのアドレスを配列にして、0~2でループすれば、
ActiveSheet.Range("H21") = "レ"
ActiveSheet.Range("H23") = Null
ActiveSheet.Range("H25") = Null
こう書いたのと同じ意味です。
押されたボタンによって、
ActiveSheet.Range("H21") = Null
ActiveSheet.Range("H23") = "レ"
ActiveSheet.Range("H25") = Null
と
ActiveSheet.Range("H21") = Null
ActiveSheet.Range("H23") = Null
ActiveSheet.Range("H25") = "レ"
となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelVBAでユーザーフォームでテキストボックスなどからセルに連続して入力するコーディングの際の 2 2022/06/29 22:51
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このギャル文字の意味を教えて...
-
[至急]作文の数字の書き方に...
-
漢文のレ点について
-
「レレレのレ」って・・・
-
エクセルマクロで結合されたセ...
-
無所属 不可分 有備無患 傍若無...
-
漢文の返り点について
-
侵官之害について。訓読文、書...
-
漢文、返り点の問題の考え方
-
所以見賢 これで けんとせらる...
-
漢文について
-
fXって儲かるの?(^◇^)
-
(*´꒳`*)、(^^)、╰(*´︶`*)╯♡の...
-
この顔文字( ー̀ωー́ ) は、どう...
-
(*´∀`*)と(*´꒳`*)の顔文字の...
-
(*´◒`*)←顔文字意味を教えてく...
-
この顔文字「(ーー゛)」の意味...
-
あなたの顔文字
-
「顔文字」は好きですか(よく...
-
申しありません。 この顔文字の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このギャル文字の意味を教えて...
-
所以見賢 これで けんとせらる...
-
エクセルマクロで結合されたセ...
-
「レレレのレ」って・・・
-
無所属 不可分 有備無患 傍若無...
-
ギャル文字の文章です。訳して...
-
相談させてください。 バックレ...
-
レ点の入力方法がわかりません...
-
レ点が連続で付く場合・・・
-
ゲーミングマウスのg703hの初期...
-
努力と才能に関する漢文生まれ...
-
[至急]作文の数字の書き方に...
-
チェックボックスにレ点を入れ...
-
立川駅の米タンについて
-
返り点の問題まじでわかりませ...
-
わかる方ご回答お願い致します...
-
漢文のレ点について
-
漢文について。
-
【エクセル】 レ点をつける□を...
-
返り点の問題で質問です ○ レ ○...
おすすめ情報