Excel総合相談所 62

このエントリーをはてなブックマークに追加
522名無しさん@そうだ選挙にいこう
【3 VBAが使えるか    .】 いいえ(これから使いたいので勉強中) 【4 VBAでの回答の可否】 可

A1の値がが10以上ならB1に”10以上”と入力、5以下なら”5以下”と入力。
という簡単な物なのですが、基礎がわからないので質問させてください。

@
if range("a1").value >= 10 then range("b1").value = "10以上"
if range("a1").value <= 5 then range("b1").value = "5以下"
A
if range("a1").value >= 10 then
 range("b1").value = "10以上"
end if
if range("a1").value <= 5 then
 range("b1").value = "5以下"
end if
B
if range("a1").value >= 10 then
 range("b1").value = "10以上"
elseif range("a1").value <= 5 then
 range("b1").value = "5以下"
end if

@〜Bどれも目的の動作をしてくれたのですが、
質問1:@とAについて、then のあとに改行があればend ifが必要であり、
    その表記が違うだけで@とAはまるっきり同じものと捕らえて合ってますか?

質問2:AとBについて、一つ目の条件をend ifで終えて、二つ目の条件をまたifで始めるのと、
    二つ目の条件をelseifで表記するのとでは何が違うのでしょうか?

質問3:Bについて、どの参考サイトを見ても、elseifで複数の条件分岐があったあと、
    最後にelse(=どの条件にも当てはまらないときの処理)が使われているのですが、
    そういった処理の必要が無い場合、これは無くても問題ないのでしょうか?
523名無しさん@そうだ選挙にいこう:2007/12/03(月) 09:45:46
質問1:そのとーり
質問2:例えばa1が10以上の時 5以下のはずが無いのだが
     Aではその評価が実行される。
質問3:無くても良い
524名無しさん@そうだ選挙にいこう:2007/12/03(月) 09:56:10
回答1:
 合ってる

回答2:
 この条件では結果は変わらないけど、前者の条件に一致した際に後者の条件が評価されるか否かが違う
 Aでは前者の条件の一致不一致に関係なく後者の条件が評価されるが、Bでは前者の条件が不一致の場合のみ後者の条件が評価される

 条件を「>=10 → 10以上、<=5 → 5以下」から「<=5 → 5以下、<=10 → 10以下」にしてみると結果も違うよ
 この条件でA1が3の場合、Aの書き方だと<=5に一致し"5以下"が入力されたあと、<=10の条件も評価され
 これにも一致するので更に"10以下"が入力され、結果"10以下"が入力された状態で処理が終わる
 対してBの書き方だと<=5に一致し"5以下"が入力されたら、<=10の条件は無視され一致していても"10以下"の入力は行われず
 結果"5以下"が入力された状態で処理が終わる

回答3:
 問題ない
 ElseIfが無くてもIf文が成立するように、Else文が無くてもIf文は成立する
 解説サイトでは使える物を説明しなかったら不備になるので書いてあるだけ
 例文とかではなく構文解説では[ ]で囲ってあると思うが、[ ]ってのは省略可能って意味

捕捉:
 If文ではなくSelect Case文を使うとこうなる
  Select Case Range("A1").Value
    Case Is <= 5
      Range("B1").Value = "5以下"
    Case Is >= 10
      Range("B1").Value = "10以上"
  End Select
 因みにこれはBと同じ意味を持つ
 >>522の条件では@、A、B、更に上のSelectも同じ結果になるがコードの意味には違いがある
 @とAは表記が違うだけで意味は同じだが、@とBまたはAとBは「回答2」で説明したように意味も違う
 今回のような場合、前者の条件に一致したら後者の評価を行う意味はないので
 Bもしくは上にSelect文が正解であり、@とAは「(この条件では)結果に不都合はないが不正解」ということになる