Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2660 / 13645 ツリー ←次へ | 前へ→

【66671】if文による条件わけ lenient 10/9/23(木) 17:02 質問[未読]
【66673】Re:if文による条件わけ かみちゃん 10/9/23(木) 17:14 発言[未読]
【66674】Re:if文による条件わけ Hirofumi 10/9/23(木) 17:52 回答[未読]
【66676】Re:if文による条件わけ Hirofumi 10/9/24(金) 8:09 発言[未読]
【66677】Re:if文による条件わけ lenient 10/9/24(金) 9:28 質問[未読]
【66679】Re:if文による条件わけ Hirofumi 10/9/24(金) 11:32 回答[未読]
【66680】Re:if文による条件わけ lenient 10/9/24(金) 12:00 お礼[未読]

【66671】if文による条件わけ
質問  lenient  - 10/9/23(木) 17:02 -

引用なし
パスワード
     For i = 1 To 15
    If i <> 12 Or i <> 13 Then
      CB(i) = Controls("ComboBox" & i)
      If i >= 2 And i <= 4 Then
        TB(i) = Controls("TextBox" & i)
      End If
    End If
  Next

2行目でiが12もしくは13の時以外は処理をしたく上記のように書きましたが
12,13でも実行されてしまいます。

Orの部分をAndに変えると12もしくは13の時以外で処理をしてくれます。
そういうものなのでしょうか。

  For i = 1 To 15
    If i = 12 Or i = 13 Then
    else
      CB(i) = Controls("ComboBox" & i)
      If i >= 2 And i <= 4 Then
        TB(i) = Controls("TextBox" & i)
      End If
    End If
  Next
要はこのような処理をさせたく、少しでも短くしたいだけなのですが。。。

よろしくお願いいたします。

【66673】Re:if文による条件わけ
発言  かみちゃん E-MAIL  - 10/9/23(木) 17:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>2行目でiが12もしくは13の時以外は処理をしたく上記のように書きましたが
>12,13でも実行されてしまいます。
>
>Orの部分をAndに変えると12もしくは13の時以外で処理をしてくれます。
>そういうものなのでしょうか。

そういうものだと思います。

12でもなく、かつ、13でもない
    If i = 12 Or i = 13 Then
    Else
     '〜処理〜
    End If
は、
    If i <> 12 And i <> 13 Then
     '〜処理〜
    End If
と同じ意味になります。

【66674】Re:if文による条件わけ
回答  Hirofumi  - 10/9/23(木) 17:52 -

引用なし
パスワード
   自分で言っている日本語通りのコードでは無いからでしょ?

iは12若しくは13では無い場合と言うなら

  If Not (i = 12 Or i = 13) Then

と書くし

iは12では無く、且つ13で無い場合と言うなら

  If i <> 12 And i <> 13 Then

と書くのでは?

【66676】Re:if文による条件わけ
発言  Hirofumi  - 10/9/24(金) 8:09 -

引用なし
パスワード
   尚、追伸として
Or、And等の使い分けは、各論理演算子のHelpに出ている真偽表(真理表)を見る事をお勧めします

【66677】Re:if文による条件わけ
質問  lenient  - 10/9/24(金) 9:28 -

引用なし
パスワード
   アドバイスありがとうござます。

If i <> 12 Or i <> 13 Then
〜処理〜
end if

If CB(14) <> 0 Or CB(15) <> 0 Then
〜処理〜
end if

上記二つの意味することは違うのでしょうか。
CB(14)が0ではない、もしくはCB(15)が0ではない場合処理に入ってくれるのですが違いは何なのでしょうか。
ちなみに

If Not(CB(14) = 0 Or CB(15) = 0) Then
〜処理〜
end if

では希望する処理とは違いました。

よろしくお願いいたします。

【66679】Re:if文による条件わけ
回答  Hirofumi  - 10/9/24(金) 11:32 -

引用なし
パスワード
   >If i <> 12 Or i <> 13 Then
>〜処理〜
>end if
>
>If CB(14) <> 0 Or CB(15) <> 0 Then
>〜処理〜
>end if
>
>上記二つの意味することは違うのでしょうか。
>CB(14)が0ではない、もしくはCB(15)が0ではない場合処理に入ってくれるのですが違いは何なのでしょうか。
>ちなみに
>
>If Not(CB(14) = 0 Or CB(15) = 0) Then
>〜処理〜
>end if
>
>では希望する処理とは違いました。
>
>よろしくお願いいたします。

論理演算子のHelpを見ましたか?

先ずIf文に就いて

If 評価式 Then
  処理A
Else
  処理B
Enf if

Ifは、評価式が真(True)の時、Then節の処理Aが実行され
評価式が偽(False)の時、Else節の処理Bが実行されます

比較演算子

= :(等しい)
<>:(等しくない)

等が有り、右項と左項を比較し真(True)または、偽(False)を返します

Or論理演算子に就いて

結果 = 式1 Or 式2

真偽表

式1     式2     結果
True     True     True
True     False    True
False    True     True
False    False    False

と成ります

If i <> 12 Or i <> 13 Then は

i=12の時
式   結果
i <> 12 False
i <> 13 True

因って、上記真偽表から「i <> 12 Or i <> 13」
の結果はTrueに成ります
因ってIf文はThen節が実行されます

同様に
i=13の時
式   結果
i <> 12 True
i <> 13 False

真偽表より結果はTrue
Then節が実行

同様に

i=14の時
式   結果
i <> 12 True
i <> 13 True

真偽表より結果はTrue
Then節が実行

同様に
12、13以外の結果は全てTrue成る

詰まり
結果がFalse(Else節の実行)に成りえない


If CB(14) <> 0 Or CB(15) <> 0 Then は

CB(14)が0以外、CB(15)が0以外の時
式      結果
CB(14) <> 0  True
CB(15) <> 0  True

因って、上記真偽表から「CB(14) <> 0 Or CB(15) <> 0」
の結果はTrueに成ります
因ってIf文はThen節が実行されます

同様に

CB(14)が0、CB(15)が0の時
式      結果
CB(14) <> 0  False
CB(15) <> 0  False

因って、上記真偽表から「CB(14) <> 0 Or CB(15) <> 0」
の結果はFalseに成ります
因ってIf文はElse節が実行されます

同様に

CB(14)が0以外、CB(15)が0の時
式      結果
CB(14) <> 0  True
CB(15) <> 0  False

因って、上記真偽表から「CB(14) <> 0 Or CB(15) <> 0」
の結果はTrueに成ります
因ってIf文はThen節が実行されます

同様に

CB(14)が0、CB(15)が0以外の時もTrueに成り
Then節が実行されます

次に
Not論理演算子に就いて
Notは否定ですので、評価式の結果を反転させます
詰まり、評価式の値がTrueならFalseに
FalseならTrueにします

そこで
If Not(CB(14) = 0 Or CB(15) = 0) Then は

CB(14)が0以外、CB(15)が0以外の時
式      結果
CB(14) = 0  False
CB(15) = 0  False

因って、上記真偽表から「CB(14) = 0 Or CB(15) = 0」
の結果はFalseに成りますが、Notで否定しているので結果はTrueに成ります
因ってIf文はThen節が実行されます

同様に

CB(14)が0、CB(15)が0の時
式      結果
CB(14) = 0  True
CB(15) = 0  True

因って、上記真偽表から「CB(14) = 0 Or CB(15) = 0」
の結果はTrueに成りますが、Notで否定しているので結果はFalseに成ります
因ってIf文はElse節が実行されます

同様に

CB(14)が0以外、CB(15)が0の時
式      結果
CB(14) = 0  False
CB(15) = 0  True

因って、上記真偽表から「CB(14) = 0 Or CB(15) = 0」
の結果はTrueに成りますが、Notで否定しているので結果はFalseに成ります
因ってIf文はElse節が実行されます

同様に

CB(14)が0、CB(15)が0以外の時も最終結果はFalseに成り
Else節が実行されます

【66680】Re:if文による条件わけ
お礼  lenient  - 10/9/24(金) 12:00 -

引用なし
パスワード
   大変解りやすいご説明ありがとうございました。

Helpは見たのですがそもそもを勘違いしていたので何を間違っているのかまったくわかりませんでした。

本当にありがとうございます。

2660 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free