[[20210727095031]] 『if文の書き方』(else) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『if文の書き方』(else)

最近ifをelse付きでも1行でまとめられることを知ったんですけど
この事について使用していいのかわからずネットで調べても記載がないんですが
?@は使用してもいいんでしょうか?
また皆さんはどんなふうにif文かいていますか?

?@If A=B Then 1 Else 2
?AIf A=B Then: 1: Else: 2: End If
?BIf A=B Then

      1
  Else
      2
  End If

< 使用 Excel:Office365、使用 OS:Windows10 >


 私はですが。

 1行でまとめられることに大した意義はない。(勘違いしている人が多い)
 IFで始まったらEnd If で終わるのがコーディングの王道である。
 マルチステートメントなんて書くべきじゃない。(変に好むキモい奴がいるね)

(半平太) 2021/07/27(火) 10:08


 マイクロソフトの公式。

https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/ifthenelse-statement
(ねむねむ) 2021/07/27(火) 11:15


自分の場合、Select Case以外、マルチステートメントは使いません。

 IF 判定 Then 短い1行の処理
 は多用します。
 ただ、コードが長く読みにくい場合や複数行の場合は、End Ifで括ります。

 IF 判定 Then True処理 Else False処理
 は今まで使ったことは無いですが、変数代入程度なら使えそうですね。

 IF 現在温度 > 28 Then 冷房ON = True Else 冷房ON = False
 こんな感じで、C#の条件演算子みたいに使えるかな、と。

(tkit) 2021/07/27(火) 11:33


 やたら1行で書きたがる人もいるけど、止めてくれ。
 1行で書くのが恰好がいいとか思う人が多くなる。
 結果、1行で完結しているのも解らず、動きませんなぜですか?
 てな、質問が多くなるから。
 ElseIf の使う時は、少しコツがいる場合もあるけど。
(poo) 2021/07/27(火) 11:51

 私はマルチステートメントたまに使います
 ただ、1行が長くなるのは避けたいので、横に長くなるか縦に長くなるか、その時々で。

 tkitさん
 >こんな感じで、C#の条件演算子みたいに使えるかな、と。
 こういうとき私はIIF関数をつかったりします。

 冷房ON = IIf(現在温度 > 28, True, False)
 とか。ただ、IIfは真、偽、両方の式が評価されるんで、使いどころが難しいんですよね。
(´・ω・`) 2021/07/27(火) 11:58

IF 現在温度 > 28 Then 冷房ON = True Else 冷房ON = False

まさにこんな使い方しようと思っていたんですがやっぱり嫌煙されてますねぇ

Iifはループの中で使うと処理速度落とす原因になるんで自分は極力避けてるんですよね・・・

短い処理に複数行書くのは個人的に不格好に見えるんで
できれば1行にしたかったですが複数行にしようかな・・・
(else) 2021/07/27(火) 12:05


 短い処理なら1行でいいんじゃないですか?

 あと、何行か同種の記述が続く時は、全体的にマトリックス状に見えるので
 1行書きの方が却って読みやすいです。

(半平太) 2021/07/27(火) 13:29


 >Iifはループの中で使うと処理速度落とす原因になるんで自分は極力避けてるんですよね・・・

 これはどういうことなんでしょうか?

 真偽共評価されるので、偽がエラーの時は厄介なことになるなぁとは思いますが、
 処理速度まで心配しなければならないものなんですか?
 ※理屈としては正しいでしょうが、潔癖症気味な気がします

(半平太) 2021/07/27(火) 13:40


 >Iif
 なるほど、If 条件1 Or 条件2 Then のように評価されちゃうんですね。

 時間計測してみましたが、If Then Else の7〜8倍違いました。
 使うターゲット次第ですね。
 また、End Ifで括ると若干遅くなりSelect Case と同じ程度でした。

 Sub Sample()
    Dim t As Single
    t = Timer
    Dim result As Boolean
    Dim i As Long
    For i = 1 To 1000000
        'result = IIf(i > 0, True, False)                   '120msec
        'If i > 0 Then result = True Else result = False    '15msec
        Select Case i > 0                                   '20msec
        Case True: result = True
        Case Else: result = False
        End Select
    Next
    Debug.Print Timer - t
 End Sub

 個人的には、Else があると End If したい(今までのコードとの差異が嫌)ので、
 変数代入みたいな場合は状況に応じて、Iif or Select Case にします。

(tkit) 2021/07/27(火) 13:42


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.