VBAの演算子とは
<< VBAの定数とは :前の記事
前回は、定数や定数の有効範囲について解説しました。複雑なプログラムほど多くの変数を利用します。規模が大きければ大きいほどバグも多数発生しますので、バグをなるべく少なくするためにも値を変える必要のない変数は定数として設定するようにしましょう。今回は、エクセルVBAの演算子について解説します。
目次
演算子とは
演算とは、変数や定数に値を代入したり、数値同士で計算を行ったりすることで、演算子(えんざんし)とは、演算で利用される計算を表す記号のことを指します。具体的に「+」「-」「×」「÷」のように計算する際に利用される記号のことを言います。掛算、割算の場合に利用する「×」「÷」はVBAなどプログラミングでは「*」「/」を利用します。演算子は計算だけでなく、文字を結合したり、値を比べたり、条件で比較したりすることもできます。
算術演算子とは
算術演算子とは計算に利用する記号のことを言います。「+」「-」「*」「/」といった記号がそちらに該当します。
演算子 | 読み方 | 説明 | 使い方 | 事例 | 結果 |
---|---|---|---|---|---|
+ | プラス | 足し算 | a = b + c | 1 + 2 | 3 |
- | マイナス | 引き算 | a = b - c | 5 - 2 | 3 |
* | アスタリスク | 掛け算 | a = b * c | 2 * 5 | 10 |
^ | キャレット | べき乗 | a =b ^ c | 3 ^ 2 | 9 |
/ | スラッシュ | 割り算 bをcで割った値(浮動小数点数)をaに代入 (cが0の場合はエラーになります) | a = b / c | 8 / 5 | 1.6 |
\ | 円マーク | 割り算の商 bをcで割った値(整数値)をaに代入 (cが0の場合はエラーになります) | a = b \ c | 8 \ 5 | 1 |
Mod | モッド | 割り算の余り bをcで割った余りをaに代入 (b,cは整数部分のみ有効で、cが0の場合はエラーになります) | a = b Mod c | 9 Mod 5 | 4 |
比較演算子とは
比較演算子とは左辺と右辺の2つの値を比較して判定する演算子です。変数の値や数値の比較や条件式の真偽の結果を用いて処理を変えることができます。比較した結果は、ブール型(Boolean)の値として条件が成立した場合は「真(True)」、成立しない場合は「偽(False)」を返します。
また「=」は数値だけでなく、文字列も等しいか比較することができます。
演算子 | 説明 | 使い方 | 事例 | 結果 |
---|---|---|---|---|
= | aとbは等しい | a = b | 2 = 2 | True |
<> | aとbは等しくない | a <> b | 2 <> 5 | True |
< | aはbより小さい | a < b | 8 < 6 | False |
<= | aはb以下 | a <= b | 3 <= 6 | True |
> | aはbより大きい | a > b | 5 > 5 | False |
>= | aはb以上 | a >= b | 2 >= 8 | False |
Like | aはbで指定したパターンを持つ | a Like b | "文字" Like "文字" | True |
Is | aとbが同じオブジェクトを参照している | a Is b | a Is b | True |
こちらは、比較演算子を利用した事例です。変数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文字として扱われ文字列比較を行います。
文字リストのパターン例
- [0-9]・・・0~9
- [A-Z]・・・A~Z(半角)
- [a-z]・・・A~Z(半角)
- [A-z]・・・A~Z,a-z(半角)
- [A-Z]・・・A~Z(全角)
- [a-z]・・・a~z(全角)
- [A-z]・・・A~Z,a~z(全角)
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 < 10 | aは1以上かつ10未満 |
Or | 論理和(または) | a = 4 Or a = 1 | aは4または1 |
Not | 論理否定(~ではない) | Not a = 4 | aは4ではない |
Xor | 排他的論理和 | a >= 1 Xor a <= 10 | aは1以上かつ10以下しかし、1以上かつ10以下ではない |
Eqv | 論理等価演算 | a >= 1 Eqv a <= 10 | aは1以上かつ10以下または、1以上かつ10以下ではない |
Imp | 論理包含演算 | a <= 10 Imp a Mod 2 = 0 | aは偶数、または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 < 10 | aは1以上かつ10未満 |
+ | プラス | 文字列の結合 | a = 4 Or a = 1 | aは4または1 |
こちらは「&(アンバサンド)」を利用した文字列の結合です。「今日は晴れです。」が表示されます。
Sub sample()
MsgBox "今日は" & "晴れです。"
End Sub
こちらは数値と文字列の結合事例です。「&(アンバサンド)」を利用すると正常に結合できますが、「+(プラス)」を利用すると実行時エラーの「実行時エラー13:型が一致しません。」と表示されます。これは、11が数値として認識され「+(プラス)」が文字列連結演算子ではなく、算術演算子として利用された結果です。
Sub sample()
MsgBox "今日は" & 11 & "日です。"
MsgBox "今日は" + 11 + "日です。" 'エラーになります。
End Sub
こちらは数値と数字のみの文字列の結合事例です。「+(プラス)」を利用すると数字のみの文字列は数値として認識されます。こちらでは「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 | ¥ | 整数除算 | |
5 | Mod | 剰余算 | |
6 | + - | 加算 減算 | |
7 | & | 文字列連結 | 文字列連結 |
8 | = < <> <= > >= Like Is | 等しい 等しくない 大なり 以上 小なり 以下 文字列のパターんが等しい オブジェクト変数の比較 | 比較演算子 |
9 | And 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関数とは >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。