- ベストアンサー
Excel VBAのOptionButtonで文字によってON/OFFを切り替える方法
- Excel VBAのOptionButtonを使用して、シート上の文字に応じてユーザーフォーム上のオプションボタンのON/OFFを切り替えたい場合、以下のようなコードを使用します。
- 具体的には、ユーザーフォーム上のCommandButton1を押下すると、sheet2のE22セルの文字がTRUEの場合、OptionButton1がON、OptionButton2がOFFに設定され、FALSEの場合はOptionButton1がOFF、OptionButton2がONに設定されます。
- 上記のコードを実行することで、文字に応じてオプションボタンの状態を切り替えることができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > sheet2のE22セルの文字がTRUEの場合 > sheet2のE22セルの文字がFALSEの場合 問題はこの部分のあやふやさが原因で、 条件分岐が正しく出来ていないということのようです。 Sheet2のE22セルの値は論理値で True の場合 False の場合 というように条件分岐するのが普通です。 それとも、、 Sheet2のE22セルの値は文字列値で "TRUE" の場合 "FALSE" の場合 というように条件分岐したいのならば、 ご提示の条件分岐の部分は正しいです。 要するに人間の感覚のように 見た目が一緒なら一致したと判断する、というような 曖昧さをプログラムに持ち込むことに難があります。 セルの値が論理値であるか文字列値であるかは VBA側の問題ではなくて、Excel一般機能の問題で、 シートでどのように値を設定しているか、 ということに依存します。 確認の為、シート上の空いているセルに 以下の数式を確定させてみてください。 =ISLOGICAL((Sheet2!E22)) =ISTEXT(Sheet2!E22) 前者はセルの値が論理値ならば、TRUEを返します。 後者はセルの値が文字列値ならば、TRUEを返します。 Sheet2のE22セルの値は論理値 であることが確認できたなら、 ご提示の条件分岐は以下のようになります。 If Sheet2.Range("E22").Value = True Then OptionButton1.Value = True ElseIf Sheet2.Range("E22").Value = False Then OptionButton2.Value = True End If あるいは Sheet2のE22セルの値が論理値であっても文字列値であっても 見た目上の"表示された文字"で判別したいということでしたら、 以下のようになります。 If StrComp(Sheet2.Range("E22").Value, "TRUE", vbTextCompare) = 0 Then OptionButton1.Value = True ElseIf StrComp(Sheet2.Range("E22").Value, "FALSE", vbTextCompare) = 0 Then OptionButton2.Value = True End If 次に、 > OptionButton1がON・OptionButton2がOFF > OptionButton1がOFF・OptionButton2がON ということが、 ご提示のコードで実現されるかどうかについては、 OptionButton1 と OptionButton2 を グループ化してあれば可能、ということになります。 この点は説明がありませんが、恐らく グループ化してあるものと推察します。 もしこの点で躓いているようでしたら、補足欄にでも書いてみて下さい。 以上です。
お礼
仰せの通り、論理値と文字列値を混同して 考えていたのが、問題でした。 確認したところ、ご指摘の通り私が条件分岐する 起点は論理値でした。 If Sheet2.Range("E22").Value = True Then OptionButton1.Value = True ElseIf Sheet2.Range("E22").Value = False Then OptionButton2.Value = True End If で解決しました。 とても勉強になるご指摘ありがとうございました。