.NET VB 式と演算子について

最終更新日

.NET VB(VisualBasic)のifやselect等に使用される条件式や計算で使用される演算子(代入演算子、算術演算子、連結演算子、ビット演算子、比較演算子、論理演算子、ビット演算子、Like演算子、Is演算子、シフト演算子)の使用方法や使用時の注意点、優先順位についてサンプル付きで解説風に記録しておく。

式の種類

値、変数、定数、関数などを演算子で結びつけたものを式と言います。

式の種類図

演算子の優先順位

1つの式の中で複数の演算子が含まれている場合は、優先順位が高いものから実行及び評価されていく。また、同じ優先度の場合は左から右に評価される。

100 + 200 + 300 '100 + 200が最初に計算され、その後に300を足す
演算子優先度
()かっこ1
関数2
算術演算子^3
4
*5
/5
\6
Mod7
+8
8
&9
比較演算子=10
<>10
<10
<=10
>10
>=10
Like10
Is10
TypeOf Is10
論理演算子Not11
And、AndAlso12
Or,OrElse13
Xor14
=,^=,*=,/=,\=,+=,-=,&=15

明示的に優先順位を変更したい場合は、カッコを使う。

以下の例のように、合計金額の全体に対して消費税率を掛けたい場合などは、カッコを使用することで、計算や評価の優先順位を変更することができる。カッコは入れ子することができる。その際は、最も内側のカッコの優先順位が高い。

100 + 200 * 0.08    '200×0.08後に100を足す。
(100 + 200) * 0.08    '100 + 200が優先される。

代入演算子(変数と計算で使用される。)

主に変数に値を格納する場合に使用されます。

演算子内容使用例解説
=右辺の値を左辺に代入するDim a = 10aの変数内の値は10となる。
+=左辺の値に右辺の値を加算して左辺に代入する。Dim a As Integer = 10
a += 5
aの値は、15となる。
-=左辺の値から右辺の値を減算して左辺に代入する。Dim a As Integer = 10
a -= 5
aの値は、5となる。
*=左辺の値から右辺の値を乗算して左辺に代入する。Dim a As Integer = 10
a *= 5
aの値は、50となる。
/=左辺の値から右辺の値を除算して左辺に代入する。Dim a As Integer = 10
a /= 5
aの値は、2となる。
\=左辺の値から右辺の値を除算した結果の整数部分だけ
差辺に代入する。
Dim a As Integer = 5
a \= 2
aの値は、2となる。
^=左辺の値を右辺の値でべき乗して左辺に代入する。Dim a As Integer = 10
a ^= 2
aの値は、100となる。
※べき乗は、
10*10と同様になる。
a^=3は、10*10*10である。
&=左辺の文字列に右辺の文字列を連結して左辺に代入する。Dim a As String= “.NET”
a &= “VB”
aの値は、.NET VBとなる。
<<=2進数の値を右辺で指定した桁数の分左へシフトし
左辺へ代入する。
また、はみ出た部分は破棄され、
空いた上位ビットは0で埋められます。
Dim a As Byte= 1
Dim b As Byte=2
a <<= b
aの値は、4となる。
>>=2進数の値を右辺で指定した桁数の分右へシフトし
左辺へ代入する。
また、はみ出た部分は破棄され、
空いた上位ビットは0で埋められます。
Dim a As Byte= 10
Dim b As Byte=2
a >>= b
aの値は、2となる。

サンプル

'= の代入演算子
Dim a As Integer = 0
a = 10               '= の代入演算子
Console.WriteLine("変数名aの値は、" & a.ToString & "です。")

'+= の代入演算子
Dim b As Integer = 0
b += 10               '+= の代入演算子
Console.WriteLine("変数名bの値は、" & b.ToString & "です。")

'-= の代入演算子
Dim c As Integer = 20
c -= 10                '-= の代入演算子
Console.WriteLine("変数名cの値は、" & c.ToString & "です。")

'*= の代入演算子
Dim d As Integer = 10
d *= 5               '*= の代入演算子
Console.WriteLine("変数名dの値は、" & d.ToString & "です。")

'/= の代入演算子
Dim e As Double = 10
e /= 5               '/= の代入演算子
Console.WriteLine("変数名eの値は、" & e.ToString & "です。")

'\= の代入演算子
Dim f As Integer = 5
f \= 2               '\= の代入演算子
Console.WriteLine("変数名fの値は、" & f.ToString & "です。")

'^= の代入演算子
Dim g As Double = 10
g ^= 2               '^= の代入演算子
Console.WriteLine("変数名gの値は、" & g.ToString & "です。")

'&= の代入演算子
Dim h As String = ".NET"
h &= "VB"            '&= の代入演算子
Console.WriteLine("変数名hの値は、" & h.ToString & "です。")

代入演算子による簡略表記

書式

通常表記簡略表記
a = a + ba += b
a = a – ba -= b
a = a * ba *= b
a = a / ba /= b
a = a \ ba \= b
a = a ^ ba ^= b
a = a & ba &= b
a = a << ba <<= b
a = a >> ba >>= b
Dim a As Decimal = 20
Dim b As Decimal = 10

'a = a + bの短縮形
a += b
Console.WriteLine("a += b 値:" & a.ToString)

'a = a - bの短縮形
a -= b
Console.WriteLine("a -= b 値:" & a.ToString)

'a = a * bの短縮形
a *= b
Console.WriteLine("a *= b 値:" & a.ToString)

'a = a / bの短縮形
a /= b
Console.WriteLine("a /= b 値:" & a.ToString)

'a = a \ bの短縮形
Dim c As Integer = 5
Dim d As Integer = 2

c \= d
Console.WriteLine("c \= d 値:" & c.ToString)

'a = a ^ bの短縮形
Dim e As Double = 5
Dim f As Double = 2

e ^= f
Console.WriteLine("e ^= f 値:" & e.ToString)

'g = g & hの短縮形
Dim g As String = "VB"
Dim h As String = ".NET"

g &= h
Console.WriteLine("g &= h 値:" & g.ToString)


'i = i << jの短縮形
Dim i As Byte = 1
Dim j As Byte = 2

i <<= j
Console.WriteLine("i <<= j 値:" & i.ToString)


'i = i >> jの短縮形
i >>= j
Console.WriteLine("i >>= j 値:" & i.ToString)

算術演算子(計算で使用される)

演算子(内容使用例
べき乗(指数演算)Dim a As Integer = 0
a = 10 ^ 2
aの値は、100となる。

数値を負(マイナス)の値にするDim a As Integer = 0
a = 10 – 2
aの値は、8となる。
*乗算Dim a As Integer = 0
a = 10 * 2
aの値は、20となる。
/除算Dim a As Integer = 0
a = 10 / 2
aの値は、5となる。
整数除算Dim a As Integer = 0
a = 5 \ 2
aの値は、2となる。
5/2=2.5のうち整数
部分が代入される。
Mod剰余(割り算の余り)Dim a As Integer = 0
a = 5 Mod 2
aの値は、1となる。
5÷2の内余りの1
が代入される。
+加算Dim a As Integer = 0
a = 10 + 5
aの値は、15となる。
減算Dim a As Integer = 0
a = 10 – 5
aの値は、5となる。

サンプル

'^ 算術演算子
Dim a As Double = 0
a = 10 ^ 2            '^ の算術演算子
Console.WriteLine("変数名 aの値は、" & a.ToString & "です。")

'-(負) 算術演算子
Dim b As Integer = 0
b = 10 + -2           '- の算術演算子
Console.WriteLine("変数名 bの値は、" & b.ToString & "です。")

'* 算術演算子
Dim c As Integer = 0
c = 10 * 5            '* の算術演算子
Console.WriteLine("変数名 cの値は、" & c.ToString & "です。")

'/ 算術演算子
Dim d As Double = 0
d = 10 / 5            '/ の算術演算子
Console.WriteLine("変数名 dの値は、" & d.ToString & "です。")

'\ 算術演算子
Dim e As Integer = 0
e = 5 \ 2             '\ の算術演算子
Console.WriteLine("変数名 eの値は、" & e.ToString & "です。")

'Mod 算術演算子
Dim f As Integer = 0
f = 5 Mod 2           'Mod の算術演算子
Console.WriteLine("変数名 fの値は、" & f.ToString & "です。")

'+ 算術演算子
Dim g As Integer = 0
g = 10 + 5            '+ の算術演算子
Console.WriteLine("変数名 gの値は、" & g.ToString & "です。")

'- 算術演算子
Dim h As Integer = 0
h = 10 - 5            '- の算術演算子
Console.WriteLine("変数名 hの値は、" & h.ToString & "です。")

連結演算子(文字列と文字列を結合させる)

連結演算子は、文字列同士をつなげるための演算子です

演算子内容使用例優先度
&文字列の連結Dim str As String = “”
str = “VB” & “.NET”
strの内容は、”VB.NET”となります。7
+文字列の連結Dim str As String = “”
str = “VB” + “.NET”
strの内容は、”VB.NET”となります。7

サンプル

'& 連結演算子
Dim a As String = ""
a = "VB" & ".NET"            '& の連結演算子
Console.WriteLine("変数名 aの値は、" & a & "です。")

'+ 連結演算子
Dim b As String = ""
b = "VB" + ".NET"            '+ の連結演算子
Console.WriteLine("変数名 bの値は、" + b + "です。")

文字列と文字列を結合させる場合、&と+をどちらを使用すべきか。

&演算子で統一するようにしよう。数値型と文字列型を+で連結した場合は、文字列を数字として扱い計算してしまうため、&で統一しておくほうが安全である。

ビット演算子

ビット演算子は、整数型データ(Byte,Integer,Long,列挙型)に対してビット単位で演算を行います。ビット演算を行うには、「&HFFFF」のように16進数を使用します。16進数は、2進数の4桁を常に1桁で表すことができるのでデータをビット単位で扱う場合に利用されます。

Notによるビットの反転

ビットの反転では、ビットが1であれば0,0であれば1に反転します。Not演算の目的は、すべてのビットを強制的に反転(0なら1、1なら0)することです。

Dim a As Integer = &H80000001
a = Not a                       'aの値は7FFFFFFEになる。

2進数の表記

1000 0000 0000 0000 0000 0000 0000 0001(0x80000001)
0111 1111 1111 1111 1111 1111 1111 1110(0x7FFFFFFE)

Or演算

Or演算では、同じ位置のビットに1があれば、結果を1があれば、結果を1にします。Or演算の目的は、特定のビットだけ強制的にオンにして、その他のビットはそのままにすることです。

Dim a As Short
b = &H5A Or &H11 ' bの値は5bになる

And演算

And演算では、同じ位置のビットがどちらも1であれば結果を1にします。And演算の目的は特定のビットだけを強制的にオフにして、その他のビットはそのままにすることです。このことビットをマスクするといいます。

Dim a As Short
b = &H5A And &H11 'bの値は10になる

Xor演算

Xor演算では、同じ位置のビットが異なっていれば、結果を1にします。Xor演算の目的は特定のビットだけを強制的に反転(0なら1、1なら0)し、その他のビットはそのままにすることです。

Dim a As Short
b = &H5A And &H11 'bの値は4bになる

比較演算子(if、selectで使用される)

比較演算子は2つの式を比較する場合に使用されrます。比較結果は、True(真)または、False(偽)のどちらかの値で返されます。

演算子内容
=等しいif price = 10 thenpriceが10であればTrue(真)
priceが10以外であればFalse(偽)
<>等しくないif price <> 10 thenpriceが10以外であればTrue(真)
priceが10であればFalse(偽)
<右辺より小さいif price < 10 thenpriceが10小さければTrue(真)
priceが10以上であればFalse(偽)
<=右辺以下if price <= 10 thenpriceが10以下であればTrue(真)
priceが10より大きければFalse(偽)
>右辺より大きいif price > 10 thenpriceが10より大きければ、True(真)
priceが10以下であれば、False(偽)
>=右辺以上if price >= 10 thenpriceが10より以上であれば、True(真)
priceが10より小さければ、False(偽)

サンプル

Dim price As Integer = 100

'= 比較演算子
If price = 100 Then
    Console.WriteLine("100円です。")
Else
    Console.WriteLine("100円以外です。")
End If

'<> 比較演算子
If price <> 50 Then
     Console.WriteLine("50円以外です。")
Else
     Console.WriteLine("50円です。")
End If

'< 比較演算子
If price < 200 Then
     Console.WriteLine("200円より小さいです。")
Else
     Console.WriteLine("200円以上です。")
End If

'< 比較演算子
If price <= 200 Then
     Console.WriteLine("200円以下です。")
Else
     Console.WriteLine("200円を超えています。")
End If

'> 比較演算子
If price > 50 Then
     Console.WriteLine("50円を超えています。")
Else
     Console.WriteLine("50円以下です。")
End If

'>= 比較演算子
If price >= 50 Then
     Console.WriteLine("50円以上です。")
Else
     Console.WriteLine("50円未満です。")
End If

論理演算子

論理演算子は、複数の条件式を組み合わせて、複合的な条件の判定を行う場合に利用します。判定はの結果は、True(真)またはFalse(偽)のどちらかの値で返されます。

And演算子

演算子内容
And2つの条件式の論理積を求める。2つの式が両方ともTrueの場合にのみTrueとなる。それ以外はFalse

サンプル

 Dim priceA As Integer = 100 'A商品価格
 Dim priceB As Integer = 200 'B商品価格
 Dim priceC As Integer = 300 'C商品価格

 'AND 論理演算子
 If priceA = 100 And priceB = 200 Then
     Console.WriteLine("A商品価格は100円です。B商品価格は200円です。")
 Else
     Console.WriteLine("A商品価格は100円以外か、B商品価格が200円以外です。")
 End If

'AND 論理演算子 ANDを複数繋げた例
If priceA = 100 And priceB = 200 And priceC = 300 Then
     Console.WriteLine("A商品価格は100円、B商品価格は200円、C商品価格は300円です。")
Else
     Console.WriteLine("A商品価格は100円、B商品価格は200円、C商品価格300円のいずれかが異なります。")
End If

Or演算子

演算子内容
Or2つの条件式の論理和を求める。2つの式のどちらかがTrueであればTrueとなり、
2つの式の両方がFalseの場合にのみFalseになる。

サンプル

Dim priceA As Integer = 100 'A商品価格
Dim priceB As Integer = 200 'B商品価格
Dim priceC As Integer = 300 'C商品価格

'OR 論理演算子
If priceA = 100 Or priceB = 100 Then
    'True(真)の処理
    Console.WriteLine("A商品価格が100円もしくは、B商品価格が100円です。")
Else
'False(偽)の処理
    Console.WriteLine("A商品価格は100円以外かつ、B商品価格が100円以外です。")
End If

'OR 論理演算子
If priceA = 100 Or priceB = 100 Or priceC = 100 Then
    'True(真)の処理
    Console.WriteLine("A商品価格は100円、もしくは、B商品価格が100円、または、C商品価格が100円です。")
Else
    'False(偽)の処理
    Console.WriteLine("A商品価格は100円、かつ、B商品価格が100円、かつC商品価格100円です。")
End If

Not演算子

演算子内容
Not2つの条件式の論理否定を求める。条件式の真偽を反対に変換する。
条件式がTrueあればFalse、条件がFalseであればTrueの結果を返す。

サンプル

Dim priceA As Integer = 100 'A商品価格

'Not 論理演算子
If Not priceA = 100 Then
     'True(真)の処理
      Console.WriteLine("A商品価格が100円です。")
Else
     'False(偽)の処理
      Console.WriteLine("A商品価格は100円ではないです。")
End If

Dim flg As Boolean = True

flg = Not flg
Console.WriteLine("flgの値は、" & flg.ToString)

Xor演算子

演算子内容
Xor2つの条件式の排他的論理和を求める。
2つの式のどちらかがTrueの場合にのみTrueの結果を返し、2つの式の両方がTrue,またはFalseの場合は、Falseの結果を返す。

サンプル

Dim a As Integer = 1
Dim b As Integer = 2

'変数 a側がFalseで、b側がTrueのため、XorはTrueを返す。
If a > 1 Xor b > 1 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

'変数 a側がTrueで、b側がFalseのため、XorはTrueを返す。
If a >= 1 Xor b > 2 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

'変数 a側がTrueで、b側がTrueのため、XorはFalseを返す。
If a >= 1 Xor b > 1 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

'変数 a側がFalseで、b側がFalseのため、XorはFalseを返す。
If a > 1 Xor b > 2 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

AndAlso演算子

演算子内容
AndAlso左右がTrueであれば、Trueを返す。
ただし、1つ目の条件式がFalseであれば、2つ目の条件式を評価せずFalseの値を返す。
そのため、パフォーマンスが期待できる。

右辺の式の評価が必要な場合は使用できないので注意が必要。

サンプル

Dim priceA As Integer = 100
Dim priceB As Integer = 200

'priceBを評価せず、Falseを返す
If priceA > 100 AndAlso priceB > 100 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

OrElse演算子

演算子内容
OrElse左右の内のどちらかがTrueであれば、Trueを返す。
ただし、1つ目の条件式がTrueであれば、2つ目の条件式を評価せずTrueの値を返す。
そのため、パフォーマンスが期待できる。

右辺の式の評価が必要な場合は使用できないので注意が必要。

サンプル

'priceBを評価せず、Trueを返す
If priceA > 50 OrElse priceB > 200 Then
    Console.WriteLine("True")
Else
    Console.WriteLine("False")
End If

Like演算子による文字列の比較

Like演算子は、文字列を他の文字列のパターン比較し、マッチすればTrueを返します。マッチしない場合はFalseを返します。

書式

変数名 = 比較対象の文字列(String) Like パターン(文字列 )
パターンマッチ文字解説
?任意の1文字,a?cでは、abc,accなどにマッチする。
*0個以上の任意の文字。a*zでは、abc…zやabczなどにマッチする。
#1文字の数字(0~9),0#0では、080や090にマッチする。
[charlist]charlistに指定した文字の中の1文字。カンマで複数選択可能。
ハイフン(-)で範囲指定も可能。
[a-z]であれば、a~zの中の1つの文字。[a-z,0-9]
[!charlist]charlistに含まれない1文字

【変数名】

比較対象の文字列(String)がパターンと一致したかどうかの結果がBoolean型でセットされます。

【比較対象の文字列(String)】

任意の文字列及び変数を指定します。

【パターン文字列】

比較する文字列をしています。

サンプル

Dim match As String = "password"
'Dim match As String = "pass?word"
'Dim match As String = "password[0-9]"
'Dim match As String = "password[0-9.a-z]"

Console.WriteLine("パスワードを入力してください。")
If Console.ReadLine() Like match Then

    Console.WriteLine("パスワードが一致しました。")

Else
    Console.WriteLine("パスワードが一致しません。")
End If

Is・NotIs演算子によるオブジェクト比較

Is演算子は、2つのオブジェクトが同じものか判定します(キャスト)。同一であればTrue、異なるものであればFlaseを返します。

サンプル

If TypeOf obj Is ComboBox Then
End if

シフト演算子

シフト演算子は、Byte、Short、Integer、Longのデータ型の数値に対して演算ができます。

<<演算子は、左辺の数値のビット(2進数)を右辺で指定した回数分だけ左側にシフトします。

>>演算子は、左辺の数値のビット(2進数)を右辺で指定した回数分だけ右側にシフトします。

はみ出たビットは破棄されます。

演算子結果解説
<<左シフト1(左辺) << 2(右辺)4左へ2つビットが移動します。
2進数:0000001→00000100
>>右シフト10(左辺) >> 2(右辺)2右へ2つビットが移動します。
2進数:0001010→00000010

<< サンプル

Dim a As Integer = 0
a = 1 << 2
Console.WriteLine("1 << 2 値:" & a.ToString)

>> サンプル

Dim a As Integer = 0
a = 10 >> 2
Console.WriteLine("10 >> 2 値:" & a.ToString)

演算子には、優先順位がある。1+2*3では、*の優先順位が高いので、2*3が先に計算される。