• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA OptionButton)

Excel VBAのOptionButtonで文字によってON/OFFを切り替える方法

このQ&Aのポイント
  • Excel VBAのOptionButtonを使用して、シート上の文字に応じてユーザーフォーム上のオプションボタンのON/OFFを切り替えたい場合、以下のようなコードを使用します。
  • 具体的には、ユーザーフォーム上のCommandButton1を押下すると、sheet2のE22セルの文字がTRUEの場合、OptionButton1がON、OptionButton2がOFFに設定され、FALSEの場合はOptionButton1がOFF、OptionButton2がONに設定されます。
  • 上記のコードを実行することで、文字に応じてオプションボタンの状態を切り替えることができます。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.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 を グループ化してあれば可能、ということになります。 この点は説明がありませんが、恐らく グループ化してあるものと推察します。 もしこの点で躓いているようでしたら、補足欄にでも書いてみて下さい。 以上です。

ukbr_555111
質問者

お礼

仰せの通り、論理値と文字列値を混同して 考えていたのが、問題でした。 確認したところ、ご指摘の通り私が条件分岐する 起点は論理値でした。   If Sheet2.Range("E22").Value = True Then     OptionButton1.Value = True   ElseIf Sheet2.Range("E22").Value = False Then     OptionButton2.Value = True   End If で解決しました。 とても勉強になるご指摘ありがとうございました。

関連するQ&A

専門家に質問してみよう