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