- ベストアンサー
エクセルでOptionButtonのセル値を反映させる方法
- エクセルのOptionButtonを使ってセルの値を表示させる方法について質問があります。
- 現在はOptionButton1をクリックしたらSheetのセルに'男'と記載されるようなマクロを作成できていますが、セルの値が'男'の場合にOptionButton1にマークを付ける方法がわかりません。
- 現在試しているコードではうまく動作せず、どうすればいいかわかりません。ご教示いただけますと幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
From は、おそらくは、UserForm のことだと思います。 質問のコードには不明な点もあり、のた。#1補足は、最初の質問要件とは内容が違っていますから、整合性が取れません。 そういう場合は直接の回答は出来ませんので、こちらでサンプルを作ります。 双方向で、反映することが可能ですが、以下のような簡単なコードでも、慣れていないと難しいです。説明の要点が取れていないレベルのご様子から、動的な入力位置のセルから、その値を取得し、その値をOptionButtonに反映させることは、「モジュールレベルの変数」が分からないと、おそらく解決しないのではないかと思います。シート・セルからの反映は割愛します。 言葉で説明するよりも、コードで示したほうが分かりやすいはずで、ここから参考になるものがあるはずです。 条件:OptionButton1, OptionButton2 TextBox1 UserForm1 上に取りける シートには、Changeイベントを設ける。 気をつける点は、UserForm を立ち上げる時に、Modal モード Offにする UserForm1.Show False 'または 0 '// '標準モジュール(シートモジュールを使う場合は必要ですが、使わないなら、UserForm1モジュールに書いてもよい) Dim Sh2 As Worksheet Dim lngNumber As Long --------------------- 'ユーザーフォームモジュール Private Sub TextBox1_Change() If IsNumeric(TextBox1.Text) Then lngNumber = TextBox1.Text Call OptionBPr2 End If End Sub Private Sub UserForm_Initialize() Dim i As Long Set Sh2 = ThisWorkbook.Worksheets("Sheet1") Application.Goto Sh2.Range("A1") i = Sh2.Cells(Rows.Count, 6).End(xlUp).Row TextBox1.Text = i lngNumber = i Call OptionBPr2 End Sub Private Sub OptionButton1_Change() Call OptionBPr End Sub Private Sub OptionBPr() lngNumber = Val(TextBox1.Text) If lngNumber = 0 Then MsgBox "数字が入っていません。", vbExclamation Exit Sub Else With Sh2 .Cells(lngNumber, 6).Value = IIf(OptionButton1, "男", "女") End With End If End Sub Private Sub OptionBPr2() Dim i As Long Dim strTxt As Variant lngNumber = Val(TextBox1.Text) If lngNumber = 0 Then Exit Sub Else With Sh2 strTxt = Trim(.Cells(lngNumber, 6).Value) If strTxt <> "" Then i = InStr("男女", strTxt) If i = 1 Then OptionButton1.Value = True ElseIf i = 2 Then OptionButton2.Value = True End If Else OptionButton1.Value = False OptionButton2.Value = True End If End With End If End Sub -------- 適当な場所にボタンで、UserForm 起動用 Sub Button_Click() UserForm1.Show False 'モーダルモードをオフにする End Sub --------
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>下記のようにしてみましたができません! 上手くできるためには,そのマクロについて 1.「どのタイミングで作動させたいのか」正しく整理し,適切なプロシジャに記述すること。 たとえばFormがInitializeされるタイミングで? たとえばFormの何かを(何を?)クリックしたとき? たとえばFormの何かが(何が?)updateされた後? もしかしたらシートのセルに(どこのセルに?)「男」とか「女」とか他の要件を記入した時? 2.データを取得するため必要なlngNumberに,事前に適切な値が格納されていること。 漠然と「セルの値が」じゃなく,具体的に「どのセル」の値を検査したいのか? そのセルを決定できる(=OptionButtonにマークできる)のは,そもそもいつ何をしたときなのか? といったような事を明確に設計しなければ出来ません。 ひっくり返せば,そういった動作の流れをきちんと定義すれば,どんな風にマクロを書けば良いのかは自ずから明らかです。 いま,一体何を考えてどんなプロシジャの中にそのマクロを書いて失敗したのか,よく考えたらどうしなきゃいけなかったのか(何をしたかったのか)もう一度よく整理して考えてみて,それでもマクロが書けなかったら考えた具体的な内容を添えてもう一度ご質問を投稿し直してみましょう。
補足
ありがとうございます。すいません補足します! 1タイミングとしては、From内のTextBox1にID番号を入力させ コマンドボタンをクリックしたら、他のBookが開き”Sheet1”の AセルにID番号が同じ番号があれば、検索して 例えば他のBook”Sheet1” A B C 12 Aさん 男 13 Bさん 女 がある場合 FromのTextBoXに12と入力してクリックすると TextBoX2=Aさんと表示 OptionButton1=”男”というように表示させたいのですが チェックを表示させるのに困っています。 このFromは新規登録でも使用しています。
お礼
いつもありがとうございます! 私自身質問が下手で答える側大変だと痛感しています! 今後とも宜しくお願いします