VBAの演算子とは

<< VBAの定数とは :前の記事

前回は、定数や定数の有効範囲について解説しました。複雑なプログラムほど多くの変数を利用します。規模が大きければ大きいほどバグも多数発生しますので、バグをなるべく少なくするためにも値を変える必要のない変数は定数として設定するようにしましょう。今回は、エクセルVBAの演算子について解説します。

目次

演算子とは

演算とは、変数や定数に値を代入したり、数値同士で計算を行ったりすることで、演算子(えんざんし)とは、演算で利用される計算を表す記号のことを指します。具体的に「+」「-」「×」「÷」のように計算する際に利用される記号のことを言います。掛算、割算の場合に利用する「×」「÷」はVBAなどプログラミングでは「*」「/」を利用します。演算子は計算だけでなく、文字を結合したり、値を比べたり、条件で比較したりすることもできます。

算術演算子とは

算術演算子とは計算に利用する記号のことを言います。「+」「-」「*」「/」といった記号がそちらに該当します。

演算子読み方説明使い方事例結果
+プラス足し算a = b + c1 + 23
-マイナス引き算a = b - c5 - 23
*アスタリスク掛け算a = b * c2 * 510
^キャレットべき乗a =b ^ c3 ^ 29
/スラッシュ割り算
bをcで割った値(浮動小数点数)をaに代入
(cが0の場合はエラーになります)
a = b / c8 / 51.6
\円マーク割り算の商
bをcで割った値(整数値)をaに代入
(cが0の場合はエラーになります)
a = b \ c8 \ 51
Modモッド割り算の余り
bをcで割った余りをaに代入
(b,cは整数部分のみ有効で、cが0の場合はエラーになります)
a = b Mod c9 Mod 54

比較演算子とは

比較演算子とは左辺と右辺の2つの値を比較して判定する演算子です。変数の値や数値の比較や条件式の真偽の結果を用いて処理を変えることができます。比較した結果は、ブール型(Boolean)の値として条件が成立した場合は「真(True)」、成立しない場合は「偽(False)」を返します。

また「=」は数値だけでなく、文字列も等しいか比較することができます。

演算子説明使い方事例結果
=aとbは等しいa = b2 = 2True
<>aとbは等しくないa <> b2 <> 5True
<aはbより小さいa < b8 < 6False
<=aはb以下a <= b3 <= 6True
>aはbより大きいa > b5 > 5False
>=aはb以上a >= b2 >= 8False
Likeaはbで指定したパターンを持つa Like b"文字" Like "文字"True
Isaとbが同じオブジェクトを参照しているa Is ba Is bTrue

こちらは、比較演算子を利用した事例です。変数xには「5」を変数yには「10」を代入しています。If~Then~Elseステートメントを利用して変数x変数yの値より大きい場合の条件分岐をしています。変数x変数yより大きいので、VBA関数MsgBox関数によりメッセージボックスが表示されます。


Sub sample()

    Dim x As Integer
    Dim y As Integer
    
    x = 10
    y = 5
    
    If x > y Then
    
        MsgBox "変数x:" & x & "は変数y:" & y & "より大きい"
    
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

算術演算子の結果

こちらは、真偽値を数値型(Byte,Integerなど)の変数に代入した場合の事例です、実行結果を見て分かると思いますが、数値型に代入した場合、Trueは「-1」でFalseは「0」に代入されます。これは1つの特性ですので、覚えておきましょう。


Sub sample()

    Dim x As Integer
    Dim y As Integer
    
    x = True
    y = False
    
    MsgBox "変数x:" & x & vbCrLf & _
           "変数y:" & y

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

比較演算子の真偽

Like演算子

こちらは、Like演算子を利用した事例ですが、ワイルドカード文字リストを利用して複雑な条件式を作成することもできます。ワイルドカードとは、「任意の文字」を意味する特殊文字のことを言います。

以下の事例では、Like演算子で「*(アスタリスト)」を利用して比較しています。「*(アスタリスト)」は、任意の数の文字を意味する特殊文字ですので、「VBA*」は「VBA」の文字列の後に任意の数の文字があるパターンに一致しているか比較しています。今回は、パターンに一致していますので、「True」を返します。


Sub sample()

    Dim strValue As String
    
    strValue = "VBAのIE操作"

    If strValue Like "VBA*" Then
        MsgBox "変数strValueにはVBAが含まれています。"
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

こちらは、Like演算子の文字パターンになります。Like演算子は指定した文字列が文字パターンの条件と一致しているかどうかを調べるときに有効ですので、是非覚えましょう。

文字パターンパターン内容事例結果
?任意の1文字"ABC" Like "AB?"True
*任意の数の文字"ABCDEFG" Like "AB*Z"False
#任意の数値1文字(0~9)"A1B2C3" Like "A1B#C3"True
[charlist]charlistに指定した文字中の任意の1文字"G" Like "[A-Z]"True
[!charlist]charlistに指定した文字以外の任意の1文字"G" Like "[!A,B,C,D]"False

「#」は1バイト(半角)の数字のみが一致します。その他の文字パターンでは2バイト(全角)も1文字として扱われ文字列比較を行います。

文字リストのパターン例

Is演算子

Is演算子はオブジェクト変数同じオブジェクトを参照しているかどうかを調べます。こちらは、オブジェクト変数a,bが同じオブジェクトを参照しているか比較したものでどちらも「Sheets(1)」を参照していますので、「True」を返します。


Sub sample()

  Dim a As Object
  Dim b As Object
    
  Set a = Sheets(1)
  Set b = Sheets(1)
  
  If a Is b Then
  
    MsgBox "aとbは同じオブジェクトを参照しています。"
  
  End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

続いてこちらの事例ですが、変わった点は参照するオブジェクトがRangeオブジェクトに変更されただけです。こちらを処理すると同じオブジェクトを参照しているはずなのに条件分岐が「False」を返したため、何も処理されません。

Rangeオブジェクトだけは、比較対象できませんので覚えておきましょう。


Sub sample()

  Set a = Range("A1")
  Set b = Range("A1")
  
  If a Is b Then
  
    MsgBox "aとbは同じオブジェクトを参照しています。"
  
  End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

論理演算子とは

論理演算子とは複数の条件式を組み合わせて、より複雑な条件式を作時に利用されるのが論理演算子です。

演算子説明事例結果
And論理積(かつ)a >= 1 And a < 10aは1以上かつ10未満
Or論理和(または)a = 4 Or a = 1aは4または1
Not論理否定(~ではない)Not a = 4aは4ではない
Xor排他的論理和a >= 1 Xor a <= 10aは1以上かつ10以下しかし、1以上かつ10以下ではない
Eqv論理等価演算a >= 1 Eqv a <= 10aは1以上かつ10以下または、1以上かつ10以下ではない
Imp論理包含演算a <= 10 Imp a Mod 2 = 0aは偶数、または10以下でも偶数でもない(=5より大きい奇数)
論理演算子図

代入演算子とは

代入演算子とは変数に値を代入する演算子で「=(イコール)」を利用します。こちらは左辺=右辺という意味ではなく、左辺を変数や定数、右辺をと見なします。

演算子説明事例結果
=右辺の値を左辺に代入しますa=3変数aに3を代入

以下の事例では、まず変数iに「2」を代入しています。続いての「i = i + 1」ですが、こちらは変数iに1を足した値を変数iに代入しています。(「iがi+1に等しい」という意味ではありません。初期の変数iは「2」ですが代入演算子により1+2=3で変数iは「3」になります。


Sub sample()

    Dim i As Integer
    
    i = 2
    i = i + 1
    
    MsgBox "変数iの値:" & i

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

文字列連結演算子とは

文字列連結演算子とは複数の文字列を連結するときに「&(アンバサンド)」を利用します。文字列と文字列の間に「&(アンバサンド)」を利用することで1つの文字列として結合されます。「+(プラス)」で文字列を結合することもできますが、算術演算子と混同してしまうため、「&(アンバサンド)」を利用するようにしましょう。

演算子読み方説明事例結果
&アンバサンド文字列の結合a >= 1 And a < 10aは1以上かつ10未満
+プラス文字列の結合a = 4 Or a = 1aは4または1

こちらは「&(アンバサンド)」を利用した文字列の結合です。「今日は晴れです。」が表示されます。


Sub sample()

    MsgBox "今日は" & "晴れです。"

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

こちらは数値と文字列の結合事例です。「&(アンバサンド)」を利用すると正常に結合できますが、「+(プラス)」を利用すると実行時エラーの「実行時エラー13:型が一致しません。」と表示されます。これは、11が数値として認識され「+(プラス)」が文字列連結演算子ではなく、算術演算子として利用された結果です。


Sub sample()

    MsgBox "今日は" & 11 & "日です。"
    MsgBox "今日は" + 11 + "日です。"  'エラーになります。

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行時エラー13

こちらは数値と数字のみの文字列の結合事例です。「+(プラス)」を利用すると数字のみの文字列は数値として認識されます。こちらでは「14」で表示されます。


Sub sample()

    MsgBox 11 + "3"

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

+(プラス)演算子の解釈

+(プラス)」は算術演算子文字列連結演算子で利用されます。いくつかの事例を挙げていますので、どのように解釈されるのかをご確認ください。

解釈結果
x = "あいうえ" + "お"文字列連結演算子"あいうえお"
x = "1234" + "5"文字列連結演算子文字列の"12345"
x = 1234 + "5"算術演算子数字の1239
x = 1234 + 5算術演算子数字の1239

演算の優先順位

演算子には優先順位があります。基本的には左から順に右へ計算していきますが、一般的な計算でも×は+よりも先に計算されるなど、演算の優先順位があることを覚えておきましょう。

優先順位演算子説明種類
1^べき乗算術演算子
2-負の符号
3*
/
乗算
除算
4¥整数除算
5Mod剰余算
6+
-
加算
減算
7&文字列連結文字列連結
8=
<
<>
<=
>
>=
Like
Is
等しい
等しくない
大なり
以上
小なり
以下
文字列のパターんが等しい
オブジェクト変数の比較
比較演算子
9And
Or
Not
Xor
Eqv
Imp
論理積(かつ)
論理和(または)
論理否定(~ではない)
排他的論理和
論理等価演算
論理包含演算
論理演算子

()かっこの使い方

演算子の優先順位に関係なく指定した順番に計算を行いたい場合は「()」(カッコ)を利用します。変数xは「-6」が変数yには「8」が代入されます。


Sub sample()

    Dim x As Integer
    Dim y As Integer
    
    x = 2 - 1 * 2 ^ 3
    y = ((2 - 1) * 2) ^ 3
    
    MsgBox "変数x:" & x & vbCrLf & _
           "変数y:" & y

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

まとめ

今回は演算子について解説しました。色々な演算子がありますが、すべてを覚える必要はありません。プログラムミングで必要になった場合に内容を確認して適切な演算子を利用するようにしましょう。次回は、VBA関数について解説しています。

次の記事: VBA関数とは >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください。

VBAのIE操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE操作にも挑戦してみてください。

目次

VBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。