- VBAでの計算式の書き方が知りたい
- 「演算子」って何?
演算子とは、計算を行うための記号(または、単語)で、主に四則演算や比較演算子があります。
この記事では、VBAで開発する上で必須な演算子について解説しています。
すべて覚える必要はありませんが、必須級の演算子は覚えていないと正直開発は厳しいです。
それくらい重要な内容なので、ぜひとも覚えてください。
Excelはもちろんのこと、WordやPowerPointだけでなく、AccessやTeamsなどのMicrosoft製品を使うならMicrosoft 365 Personalの利用がおすすめです。
\ExcelやPowerPointなどを使うなら!/
演算子とは計算するための記号(単語)
演算子とは、計算を行うための記号です。
VBAの場合、単語(AND など)も存在します。
計算とは、四則演算(足す・引く・掛ける・割る)のほかに、「比較する・文字をつなげる・条件を組み合わせる」という計算もあります。
そして、それぞれを
- 算術演算子
- 比較演算子
- 連結演算子
- 論理演算子
といい、これに代入用の演算子代入演算子を組み合わせた計5種類が存在しています。
また、演算子から得た結果は必ず代入するか条件式として使用する必要があります。
例えば
x + 5
この式だけでは成り立ちません。
'代入 y = x + 5 '条件 If x + 5 = y Then y = x End If
このように、代入か条件式として使用してあげる必要があります。
各演算子同士の優先度
数学の世界では
- 掛け算・割り算を優先、足し算・引き算はその後に計算する。
- 基本、左から順に計算する。
というルールが存在します。
VBAでも同じで、各演算子同士の計算の優先度が設定されています。
VBAでは、「算術演算子>比較演算子>論理演算子」の順に計算が行われます。
また、算術演算子と論理演算子のグループ内では、その中での優先度が存在しています。
優先度 | 算術演算子 | 論理演算子 |
---|---|---|
↑ ↓ 低 | 高^(指数) | Not |
-(符号反転) | And | |
* /(乗算と除算) | Or | |
\(割り算の商) | Xor | |
Mod(割り算の余り) | Eqv | |
+ -(加算と減算) | Imp | |
&(文字列連結) |
そして、数学同様「()(かっこ)」で囲うとその計算の優先度が一番上になります。
ただし、かっこの中では、演算子の優先度が適用されます。
代入演算子
変数に値を代入するための演算子です。
代入演算子は「=(イコール)」のみが該当します。
後述する比較演算子の時に全く同じ形で登場するので、少しややこしいですが、条件式の中(IF文など)であれば、比較になります。
Anser = A = B
A=B
は条件式、Anser=
の部分は代入になります。
この場合、A=B
の結果がAnser
に代入されるので、TrueかFalseが格納されます。
算術演算子
四則演算などの計算を行うための演算子です。
演算子 | 内容 | 例 | 結果 | 備考 |
---|---|---|---|---|
+ | 足し算 | 12 + 5 | 17 | |
– | 引き算 | 12 – 5 | 7 | |
* | 掛け算 | 12 * 5 | 60 | ×ではなく「*(アスタリスク)」です。 |
/ | 割り算 | 12 / 5 | 2.4 | ÷ではなく「/(スラッシュ)」です。 |
\ | 割り算の商 | 12 \ 5 | 2 | バックスラッシュです。環境によっては、表示が「¥(円マーク)」になったりします。 |
Mod | 割り算の余り | 12 Mod 5 | 2 | |
^ | 累乗(べき乗) | 12 ^ 5 | 244,832 |
割り算系(割り算・商・余り)は0で割るとエラーになるので、気をつけましょう。
これらは、基礎なので必ず覚えておきましょう。
比較演算子
式を比較するための演算子です。
プログラミングにおいて、もっとも使う演算子です。
演算子 | 内容 | 例 | 結果 | 備考 |
---|---|---|---|---|
< | より小さい | 5 < 3 | False | |
<= | 以下 | 5 <= 3 | False | 「=<」と書いても、VBAが勝手に「<=」に直してくれます。 |
> | より大きい | 5 > 3 | True | |
>= | 以上 | 5 >= 3 | True | 「=>」と書いても、VBAが勝手に「>=」に直してくれます。 |
= | 等しい | 5 = 3 | False | |
<> | 等しくない | 5 <> 3 | True | |
Like | パターンマッチング | ”MSらるじゅ” Like “らるじゅ” | True | |
Is | オブジェクト比較 | Sheets(“Sheet1”) Is Sheet(1) | True |
この中で、LikeとIsは少し特殊なので深掘りしていきます。
Like演算子
文字列の中に特定の文字が含まれているかなどを確認するときに使います。
Like演算子にはワイルドカードが使え、これを使うと「〇〇から始まる」「〇〇で終わる」「〇が含まれる」などのあいまい検索が出来るようになります。
ワイルドカード | 内容 | 例 | Trueになる条件 |
---|---|---|---|
* | 0文字以上の任意の文字列 | “A” | “A”が含まれる任意の文字数の文字列 |
? | 任意の1文字 | “??B” | “B”で終わる3文字の文字列 |
# | 任意の1数字 | “#月” | 1文字目が数字+“月”で終わる文字列 |
[] | []内に指定した1文字 | [ABC] | A・B・Cのいずれか1文字が含まれる文字列 |
[!] | []内に指定した文字以外の1文字 | [!ABC] | A・B・Cどれも含まれていない文字列 |
[-] | []内に指定した範囲の1文字 ※文字リストに該当しなければいけません。(A~Z、0~9など) | [A-C] | AからCまでの1文字 |
例えば、タイムスタンプ(日付を文字列にしたもの、「20220101」など)がファイル名の先頭に付与されるツールがあった場合、そのファイルをインプットとして使うときにファイル名 Like "2022*"
と指定すれば、2022年のファイルのみを指定することが出来ます。
覚えておくと開発の幅が広がるので是非ともマスターしたい演算子です。
Is演算子
オブジェクトに対して比較をするときに使う演算子です。
オブジェクト自体が難しいかもしれないので、理解しずらいかもしれませんが、「オブジェクト1 Is オブジェクト2」は「オブジェクト1 = オブジェクト2」という意味であると理解していただければ十分です。
ただ、オブジェクト同士を比較するというのは実務ではあまり使用しません。
よく使うのがオブジェクト Is Nothingという条件です。
これは、オブジェクト変数が「Nothing」である。つまり、何も設定されていないことを確認しています。
具体的には、
If Not ブック Is Nothing Then 終了処理 End If
- Excelブックを変数に格納した処理の最後に、ブックを閉じる処理を起動したい。
- しかし、ブックが開かれていないときに閉じる処理をするとエラーになる。
- なので、
If Not ブック Is Nothing
という条件でTrueになれば、”ブック”というオブジェクト変数に値がある(つまり、ブックが開かれている)のでIF文内に閉じる処理を記述できる。 - 開かれていない場合はIF文で弾かれるので、閉じる処理を通らずに進めることができる。
このように、オブジェクトを解放する(終了処理のこと)時、エラーを出さないように確認をする際などにも使用されます。
連結演算子
文字列を連結(くっつける)ための演算子です。
「文字と変数の値を連結させ、1つの文字列にしたり…」など、需要が高い演算子です。
演算子 | 内容 | 例 | 結果 |
---|---|---|---|
& | 文字列の連結 | “こんにちは” & “らるじゅです” | こんにちはらるじゅです |
+ | 文字列の連結 | “よろしく” + “お願いいたします” | よろしくお願いいたします |
算術演算子でも出てきた「+」がありますが、「+」は連結か算術かの判断が特殊で、「数値+文字」はエラーが起きたりと少し厄介です。
もし、+演算子の条件が気になるという方は以下を参照してみてください。
論理演算子
条件を満たすか否かを判断するための演算子です。
そのため、結果は「True」か「False」のどちらかが返ってきます。
比較演算子と違い、「同じかどうか」という1つの条件ではなく「複数の条件を組み合わせた時に、この値は当てはまるのか」という判断を行います。
なので、論理演算子は複数の条件が必要な際に使われます。
演算子 | 例 | 内容 | 備考 |
---|---|---|---|
And | A And B | AとB両方を満たす。論理積 | |
Or | A Or B | AかBどちらかを満たす。論理和 | |
Not | Not A | Aではない。論理否定 | |
Xor | A Xor B | AかBどちらか一方のみを満たす。排他的論理和 | |
Eqv | A Eqv B | AとB両方満たす。または、AとB両方満たさない。論理等価演算 | Xorの否定と同義 |
Imp | A Imp B | AならばB。論理包含演算 |
例えば、A「私が20歳以上」とB「私が10歳以上」という条件の時、
- AのTrueとBのTrue=True
- AのTrueとBのFalse(この場合「私が10歳未満」)=False(当てはまらないため)
- AのFalseとBのTrue=True(私が「20歳未満~10歳以上」ならあり得る)
- AのFalseとBのFalse=True(私が10歳未満なら20歳未満でもある)
正直、EqvとImpは実務でほとんど使わないので、あまり深く理解しなくてもいいです。(何か特殊な業種などなら、使うかもしれないですが。。。)
しかし、「And・Or・Not」は必須級です。必ず覚えましょう。
論理演算はベン図という図で表すことが多く、情報系の勉強をするとよく見かけるので図でイメージをつかんでおきましょう。
個人的には「Not」は出来るだけ使わないようなコーディングを心がけています。
なぜなら、「Not」の大半は言い換えができるからです。
例えば、「A=Bではない」はNot(A=B)
ではなくA<>B
と記述できます。
ただし、IF文などで、
IF オブジェクト Is Nothing Then Else 処理 End if
このように、無駄な行が発生してしまう場合はNotをつけてコードが長くならないようにしています。
If Not オブジェクト Is Nothing Then 処理 End if
まとめ|よく使う 必ず覚えろ 演算子!
今回はVBAの演算子について解説しました。
演算子はVBAに限らずプログラミングの中で、呼吸のように使っていきます。
IF文や繰り返し処理、その他関数などにフォーカスされがちですが、こういう基礎部分を疎かにすると後々ツケが回ってきます。
「暗記しろ!」というわけではありませんが、実際にコードを書きながら覚えていき、演算子とその結果を解説を見なくても結果が分かるレベルになれるようにしましょう。