• ベストアンサー

iと言う変数の値が1から10の間にないならば

「iと言う変数の値が1から10の間にないならば」、としたいのですが どのようなコードを書けばいいのでしょうか? Sub test1() Dim i As Integer i = 11 If 1 < i < 10 Then MsgBox i & "は1から10の間にはありません" End If End Sub だと、メッセージが表示されてしまいます。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.7

アナログ思考の習慣が災いしています。 i=1 iは1より大きい 1<i FALSE iは10より小さい i<10 TRUE i=5 iは1より大きい 1<i TRUE iは10より小さい i<10 TRUE i=15 iは1より大きい 1<i TRUE iは10より小さい i<10 FALSE あなたの論理式 1<i<10 iの値が1、5,15のすべての時 FALSE i=5 1<i<10→(1<i)<10→(TRUE)<10→FALSE 1つの数式に複数の論理演算子含まれると左から順に評価され、1つめの評価がTRUEでもFALSEでも次段の数値との比較ではFALSEになります。 今回の質問では「1<i」と「i<10」を夫々評価して、双方を「and」で評価すれば目的に合うでしょう。 但し、メッセージボックスの表示内容が逆転しているように思われます。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

その他の回答 (6)

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.6

一番最初の回答で既に正解は出てるので、別の視点でアドバイスです。 言語仕様書となるとチョット専門書になっちゃいますが、入門書で少し勉強すると、この程度の初歩的な疑問はすぐに解決できると思います。だって、質問して回答を得るまでに多少時間がかかりますよね。これって知ってれば無駄な時間を無くすことが出来ますよね。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

私共は小学校・中学校などの、学校で算数や数学の教育を受けてきています。 そこで現れる、式での表現法と、コンピュターの言語での表現は(似ていても厳密には)異なる場合が多いです。 そういう考え方の大変換を質問者が行ってください。 1つ1つ確認のべんきょうが必要です。 ーー いちいちOKWAVEで質問していたらきりがないので、とりあえずVB(A)の解説書で勉強すべきです。 ーー 本題に入って、2数の間の判定は (1)2つの比較を重ねる方法 (2)AND演算子を使う方法 (3)SQLという言語などBetweenという表現がつあえるものあり を(小生は)今まで経験しました。 まずは(1)ではIF文を使って Sub test01() Dim a As Integer a = 7 'この数をいろいろ変えて実行してください If a < 10 Then If a > 1 Then MsgBox "1より大で10より小です" End If End If End Sub (2)は Sub test02() Dim a As Integer a = 6 If a < 10 And a > 1 Then MsgBox "1より大で10より小です" End If End Sub ーー 再々使うなら、私製の関数化する方法もあります。 Function betw(x, a, b) If x < b And x > a Then 'MsgBox "1より大で10より小です" 'テスト用 betw = True End If End Function Sub test03() If betw(119, 1, 10) = True Then MsgBox "1より大で10より小です" Else MsgBox "1より大で10より小でありません" End If End Sub 実際の例で、以上、以下、未満、超えるの場合に(演算子という)コードの点検を念入りにしてください。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.4

「If 1 < i < 10 Then」 この書き方だと条件判定が2つ含まれています。 IF文では条件判定式は基本的には一つだけ。 だから2つ以上の条件を含ませたい場合はANDやORと併用して記述します。 「i>=1 AND i<=10」という書き方だとiが1から10の間、となりますよね。 これにNOTをあわせる記述もあります。 「NOT (i>=1 AND i<=10)」 この書き方だと「iの値が1から10の間、じゃない」という意味になります。 別の記述方法だと IF i>=1 Then IF i<=10 Then ELSE MsgBox i & "は1から10の間にはありません" End IF Else MsgBox i & "は1から10の間にはありません" End If という書き方も出来ます。 ※あってるよね?(^^; プログラミングでは、同じ結果でもコードはいくつか違う記述も出来るということです。 コンパイラやインタープリタによっては、記述方法で実行速度が変わることもあったりします。 繰り返しの中で使われるIF文の条件判定式を工夫するだけで処理時間が短縮することもあったりします。 特に数万とか数十万の繰り返しではその差は無視できなかったりもします。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

  • honoka69
  • ベストアンサー率50% (6/12)
回答No.3

この言語が何かわからず回答させてもらいますので、まちがってるかもしれませんが考え方だけわかってもらえればと思います。(おそらくVisualBasicですかね・・・) If 1 < i < 10 Then ここの部分が問題だと思います。 この書き方を日本語になおせば 「もし1よりiは大きくて10より小さいならば」という意味になると思います。 「iと言う変数の値が1から10の間にないならば」 を言い換えると 「iは1よりちいさいかつ10より大きい」になります。 この2つは全く同じ意味です。 なのでこの部分を変えてあげて 「もし1より小さいかつ10より大きければ」になおしてあげれば期待の動きが得られると思います。 具体的な書き方は If i <1 AndAlso 10 < i Then AndAlsoはかつという意味です。 「かつ」というのは A と B の両方の条件を満たしているとう意味です。 両方の条件をみたしていたらif文が真になるということです。 今回でいえば i <1 が Aにあたります。 10 < i  がBにあたります。 ちなみに今回の話とは関係ないですが、今後でてくると思うので「または」についても書いておきます。 A OrElse B これでAまたはBという意味なります。 Aの条件を満たしているかまたはBの条件のどちらか一方の条件を満たしていればif文は真になります。 ※もしVisualBasicでなければAndAlsoやOrElseの部分の書き方が変わると思います。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

If i < 1 Or i > 10 Then MsgBox i & "は1から10の間にはありません" End If または If i >= 1 And i <= 10 Then  Else MsgBox i & "は1から10の間にはありません" End If ですね。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

If i < 1 or i > 10 Then MsgBox i & "は1から10の間にはありません" End If iが1~10の間(1と10を含む)なら、 If i >= 1 and i <= 10 Then End If です。

ADQCPKET
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう