![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
エクセルの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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ギャル文字の文章です。訳して...
-
無所属 不可分 有備無患 傍若無...
-
努力と才能に関する漢文生まれ...
-
相談させてください。 バックレ...
-
[至急]作文の数字の書き方に...
-
Google Chromeの拡張機能設定_...
-
漢文、返り点の問題の考え方
-
「レレレのレ」って・・・
-
(*´꒳`*)、(^^)、╰(*´︶`*)╯♡の...
-
(*´∀`*)と(*´꒳`*)の顔文字の...
-
顔文字の意味を教えてください
-
⊂⌒~⊃。Д。)⊃、の意味を教えてく...
-
(≧∀≦)←この顔文字について
-
(*´∇`)ノの顔文字の意味教えて...
-
d( ̄  ̄)この顔文字の意味って...
-
ブフォッwww みたいな顔文字く...
-
ビルの屋上の『R』の意味
-
ᐠ( 'ᴗ' )ᐟ\\( ¨̮ )/この2つの...
-
( ・ ̫・ ) ↑この顔文字ってな...
-
申しありません。 この顔文字の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このギャル文字の意味を教えて...
-
[至急]作文の数字の書き方に...
-
ギャル文字の文章です。訳して...
-
相談させてください。 バックレ...
-
無所属 不可分 有備無患 傍若無...
-
寝バックレ常習犯のゲーム友達...
-
「レレレのレ」って・・・
-
チェックボックスにレ点を入れ...
-
エクセルマクロで結合されたセ...
-
ゲーミングマウスのg703hの初期...
-
レ点が連続で付く場合・・・
-
漢文のレ点について
-
漢文の返り点について
-
漢文について。
-
所以見賢 これで けんとせらる...
-
へた文字(ギャル文字)を簡単...
-
漢文の書き下しと訳をどなたか...
-
漢文 書き下し文
-
漢文の句法について
-
努力と才能に関する漢文生まれ...
おすすめ情報