【Word VBA】IFステートメント(条件分岐)のOrとAndの書き方

2012年10月22日

先日、水野麻子さんから質問があって回答したときに、Ifステートメントにて、ORやANDを使いました。

そのことが記事に書かれています。

偽ハイフンを自動で全角ハイフンに変換

この記事では、ハイフンに似た記号を特定して処理をするときの文字コードの考え方が記載されています。

で、マクロで処理をするとことで話題になっているのが、以下の記述。

  For i = 8208 To 8722
   If i = 8722 Or i = 8259 Or (i >= 8208 And i <= 8213) Then
   ・・・・・

 

このようにして、Ifステートメントの条件を複数記載しています。

 

i の値が8722の場合、または

i の値が8259の場合、または

i の値が8208以上8213以下の場合に、

 

という意味です。

 

ここで注意したいことがあります。

 

「i が8722か8259である」という条件は、

i = 8722 Or 8259

としてはいけません。

 

しっかり、

i = 8722 Or i = 8259

と i を繰り返し記述します。

 

また、「8208以上で 8213以下」という条件は、

 

8208 <= i <= 8213

 

と、数学の式のようにしてもいけません。

 

 

i >= 8208 And i <= 8213

 

i を条件ごとに繰り返して、条件自体をAndで結びます。

 

また、And でつながれたものをひとくくりにするときに括弧を使います。

 

If i = 8722 Or i = 8259 Or (i >= 8208 And i <= 8213) Then

 

このようにすると意味がわかると思います。

 

可読性をよくするためには、記載する順序を変えてもいいかもしれないですね。

 

小さい順に書いた方が自然かもしれません。

 

If (i >= 8208 And i <= 8213) Or i = 8259 Or i = 8722 Then

 

ループ処理において、カウンタ変数(i)が変化したときにその値によって処理を分けるときに使えます。

コメント

 

  • 2. Re:Re:IFステートメント(条件分岐)のOrとAnd

    >kinuasaさん

    どうもありがとうございます。

    Select Case ステートメントは便利ですね。

    複数個の分岐条件がある時に使うような
    気がして今回思いつきませんでした。

    1つのケースで分岐するときでも、
    複数の条件を1行に簡単に書けて
    いいですね!

    いただいたリンクですが、これ面白いですね。
    ありがとうございます。

    「2.Case文は意外と多機能」

    この項目にある「Case "か" To "こんん"」という記述ですが、ワイルドカードのように使えますね。

    文字列の判定に今後使ってみます。

    毎度おもしろ技を教えていただきありがとうございます。

  • 1. Re:IFステートメント(条件分岐)のOrとAnd
    こんにちは、kinuasaです。
    Select Caseを使うなら下記のような感じでしょうか?Public Sub Sample()
    Dim i As LongFor i = 8208 To 8722
    Select Case i
    Case 8208 To 8213, 8259, 8722
    Debug.Print i
    End Select
    Next
    End Sub結構複雑な条件でも分岐できるCase文も便利です(^^)・Select Case はもっと使える
    http://homepage1.nifty.com/rucio/main/technique/Select.htm

    kinuasa

 

-コード