ヘッダー
Visual Basic サンプル集
VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

If を使用した条件判断

2023/1/15

→ C# のサンプルに切り替える → Python のサンプルに切り替える

目次

 

変数 value の値が 5 なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 5

If value = 5 Then
    Debug.WriteLine("valueは5です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 5

If value = 5 Then Debug.WriteLine("valueは5です。") '←これが表示されます。

Debug.WriteLineが表示される場所

 

 

変数 value の値が "こんにちは" なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "こんにちは"

If value = "こんにちは" Then
    Debug.WriteLine("valueは「こんにちは」です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

変数 value の値が True なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Boolean = True

If value Then
    Debug.WriteLine("valueはTrueです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:If value = True Thenと書いても同じです。

 

 

関数のような条件判断(If演算子)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 5

Dim result As String = If(value = 5, "Fiveです。", "Fiveではありません。")

Debug.WriteLine(result)

Debug.WriteLineが表示される場所

 

 

条件が成立していないなら、別の処理を実行する。(Else)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 123

If value = 5 Then
    Debug.WriteLine("valueは5です。")
Else
    Debug.WriteLine("valueは5ではありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

If の処理は書かないで、Elseの処理だけ書く

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 123

If value = 5 Then
    '何もしません。このコメントを記述する必要はありません。
Else
    Debug.WriteLine("valueは5ではありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

複数の条件に応じてそれぞれ別の処理を実行する (ElseIf)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 66

If value = 5 Then
    Debug.WriteLine("valueは5です。")
ElseIf value > 10 Then
    Debug.WriteLine("valueは10より大きいです。") '←これが表示されます。
ElseIf value > 50 Then
    ' 10より大きい場合、1つの上のElseIfが実行されるので、このElseIfの処理はvalueの値に関係なく絶対に実行されません。 
    Debug.WriteLine("valueは50より大きいです。")
Else
    Debug.WriteLine("valueは 5 ではないし、10より大きくもないです。")
End If

Debug.WriteLineが表示される場所

メモ:ElseIf を使う場合、If よりも Select Caseの方が適しているかもしれません。

 

 

変数 value の値が 5 ではないなら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Integer = 123

If value <> 5 Then
    Debug.WriteLine("valueは5ではありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

条件を反転させる (Not)

条件式に Not を付けると結果が判定します。次の例は、OSがLinuxでなければ処理を実行します。

VB2019対応 Visual Studio 2022

If Not System.OperatingSystem.IsLinux() Then
    Debug.WriteLine("実行環境はLinuxではありません。") '←これが出力されます。
End If

Debug.WriteLineが表示される場所

メモ:この例では、If System.OperatingSystem.IsLinux() = False Then と書いても同じです。

 

 

x = 5 で かつ y = 8 なら、処理を実行する (AndAlso)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 5
Dim y As Integer = 8 

If x = 5 AndAlso y = 8 Then
    Debug.WriteLine("x は 5 で かつ y は 8 です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:Andも同じような機能ですがショートサーキットではない(つまり、常に両方の条件を評価するので)使用しないように気を付けてください。

 

 

x = 5 か または y = 8 なら、処理を実行する (OrElse)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 123
Dim y As Integer = 8 

If x = 5 OrElse y = 8 Then
    Debug.WriteLine("x が 5 か または y が 8 か またはその両方です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:Orも同じような機能ですがショートサーキットではない(つまり、常に両方の条件を評価するので)使用しないように気を付けてください。

 

 

x が 5 でなく、8 でもないなら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 123

If x <> 5 AndAlso x <> 8 Then
    Debug.WriteLine("x が 5 ではないし、8 でもありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 123

If Not (x = 5 OrElse x = 8) Then
    Debug.WriteLine("x が 5 ではないし、8 でもありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

x が 5以上なら、処理を実行する (>=)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 78  

If x >= 5 Then
    Debug.WriteLine("x は 5 以上です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:「以上」にはその数を含みます。たとえば、5以上の一番小さい数は5です。

 

 

x が 5より大きいなら、処理を実行する (>)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 78  

If x > 5 Then
    Debug.WriteLine("x は 5 より大きいです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:「より大きい」にはその数を含みません。たとえば、5より大きい一番小さな整数は6です。

 

 

x が 5以下なら、処理を実行する (<=)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = -45  

If x <= 5 Then
    Debug.WriteLine("x は 5 以下です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:「以下」にはその数を含みます。たとえば、5以下の一番大きい数は5です。

 

 

x が 5より小さいなら、処理を実行する (<)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = -45  

If x < 5 Then
    Debug.WriteLine("x は 5 より小さいです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:「より小さい」にはその数を含みません。たとえば、5より小さい一番大きな整数は4です。

 

 

x が 5 ~ 12 のなら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As Integer = 12  

If x >= 5 AndAlso x <= 12 Then
    Debug.WriteLine("x は 5 ~ 12 の間です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

x と y が同じインスタンスなら、処理を実行する (Is)

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As New List(Of Integer)({1, 2, 3})
Dim y As New List(Of Integer)({1, 2, 3})
Dim z = x

If x Is y Then
    'これは表示されません。 x と y は内容が同じでも別のインスタンスです。
    Debug.WriteLine("x と y は同じインスタンスです。")
End If

If x Is z Then
    'これが表示されます。
    Debug.WriteLine("x と z は同じインスタンスです。")
End If

Debug.WriteLineが表示される場所

 

 

Listの要素が同じなら、処理を実行する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim x As New List(Of Integer)({1, 2, 3})
Dim y As New List(Of Integer)({1, 2, 3})
Dim z = x

If x.SequenceEqual(y) Then
    'これは表示されます。
    Debug.WriteLine("x と y の要素は同じです。")
End If

If x.SequenceEqual(z) Then
    'これも表示されます。
    Debug.WriteLine("x と z の要素は同じです。")
End If

メモ:SequecneEqual での比較では、要素の順序も一致している必要があります。

Debug.WriteLineが表示される場所

 

 

文字列に "A" を含むなら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "ITALIA"

If value.Contains("A") Then
    Debug.WriteLine("ITALIA には A が含まれています。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

文字列が "ベルギー" か "オランダ" か "ルクセンブルグ" なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "オランダ"  

If value = "ベルギー" OrElse value = "オランダ" OrElse value = "ルクセンブルグ" Then
    Debug.WriteLine("ベネルクスです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "オランダ"  

If {"ベルギー", "オランダ", "ルクセンブルグ"}.Contains(value) Then
    Debug.WriteLine("ベネルクスです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

これでもできます。If ではないですが。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "オランダ"  

Select Case value
    Case "ベルギー", "オランダ", "ルクセンブルグ"
        Debug.WriteLine("ベネルクスです。") '←これが表示されます。
End Select

Debug.WriteLineが表示される場所

 

 

文字列が "徳川家康" か "徳川家光" なら、処理を実行する(Likeと正規表現)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "徳川家光"  

If value Like "徳川家[康光]" Then
    Debug.WriteLine("徳川家康または徳川家光です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:Likeのパターンマッチングは独自の構文です。正規表現ではありません。→ Like 演算子

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "徳川家光"  

If System.Text.RegularExpressions.Regex.IsMatch(value, "^徳川家[康光]$") Then
    Debug.WriteLine("徳川家康または徳川家光です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:Regexクラスは正規表現でのパターンマッチングを行います。

 

 

文字列が 0文字(=空文字)なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "" ' 長さ 0 の文字列。「空文字」とも呼びます。

If String.Equals(value, "") Then
    Debug.WriteLine("文字列は空文字です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:value が Nothing のときはメッセージを表示しません。 If value = "" Then と記述すると Nothing のときもメッセージが表示されます。

 

 

文字列が Nothing か 0文字(=空文字)なら、処理を実行する

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = ""
'Dim value As String = Nothing '← Nothing で試したい場合

If String.IsNullOrEmpty(value) Then
    'これが表示されます。
    Debug.WriteLine("文字列はNothingか空文字です。")
End If

If Not String.IsNullOrEmpty(value) Then
    'この例ではこれは表示されません。 value は空文字だからです。
    Debug.WriteLine("文字列には何か1文字以上あります。※スペースも1文字とみなします。")
End If

Debug.WriteLineが表示される場所

メモ:String.IsNullOrEmpty は C# でも共通なので、この例は一般的に理解されやすくお勧めです。

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = ""
'Dim value As String = Nothing '← Nothing で試したい場合

If value = "" Then
    'これが表示されます。
    Debug.WriteLine("文字列はNothingか空文字です。")
End If

If value <> "" Then
    'この例ではこれは表示されません。 value は空文字だからです。
    Debug.WriteLine("文字列には何か1文字以上あります。※スペースも1文字とみなします。")
End If

Debug.WriteLineが表示される場所

メモ:value = "" は value が空文字またはNothingのときにTrueになります。 value <> "" はその逆です。

メモ:この例は一見直感的ですが、Nothingの判定がC#や他の言語と異なっているので、一般的にはわかりにくいかもしれません。

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = ""
'Dim value As String = Nothing '← Nothing で試したい場合

If Len(value) = 0 Then
    'これが表示されます。
    Debug.WriteLine("文字列はNothingか空文字です。")
End If

If Len(value) > 0 Then
    'この例ではこれは表示されません。 value は空文字だからです。
    Debug.WriteLine("文字列には何か1文字以上あります。※スペースも1文字とみなします。")
End If

Debug.WriteLineが表示される場所

メモ:Lenを使うこの方法は20世紀から続く伝統的な方法で、意味も理解しやすいので私の好みです。

 

 

文字列が null か 0文字(=空文字)か、スペースのみなら、処理を実行する

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "   " '3つのスペース 

If String.IsNullOrWhiteSpace(value) Then
    Debug.WriteLine("文字列はNothingか空文字か1つ以上のスペースです。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

 

 

文字列が "france" なら大文字でも小文字でも、処理を実行する

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "frANCE"

If value.Equals("France", StringComparison.OrdinalIgnoreCase) Then
    Debug.WriteLine("大文字小文字を無視すると文字列は France と等価です。")
End If

Debug.WriteLineが表示される場所

メモ:この例では、ドイツ語のエスツェット "ß" は "ss" と等しいとはみなされません(ドイツ人は日常生活でこれを等しいと認識しているようです)。このような言語文化的な同一性への対応は文字種によって異なります。.NETのグローバリゼーション機能でこのような比較ができるものもありますし、できないものもあります。

 

ドイツ語のエスツェット (ß) と ss を等しいとみなすような比較は下記でできます。IgnoreNonSpaceがポイントです。

VB2019対応 Visual Studio 2022

Dim value As String = "Fleiß"

Dim gc = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace)
If gc.Equals(value, "Fleiss") Then
    Debug.WriteLine("言語特性を考慮すると Fleiß と Fleiss は等価です。")
End If

Debug.WriteLineが表示される場所

参考:.NET 5 以降で文字列を比較するときの動作の変更

 

 

文字列が "リンゴ" なら ひらがな でも カタカナ でも、処理を実行する

VB2019対応 Visual Studio 2022

Dim value As String = "リんゴ"

If Umayadia.Kana.KanaConverter.ToKatakana(value) = "リンゴ" Then
    Debug.WriteLine("ひらがな・カタカナを無視すると文字列は リンゴ と等価です。")
End If

Debug.WriteLineが表示される場所

メモ:この例を実行するには、NuGetで Kana.NET をインストールする必要があります。→ NuGetでパッケージをインストールする方法

メモ:→ Kana.NET での ひらがな・カタカナ変換

メモ:ひらがなとカタカナを変換したり比較したりできる.NETの標準的な機能はありません。

 

 

これでもできますが、悪い例です。注意喚起のためあえて掲載します。StrConvはWindowsでしか動作しないうえ、Unicodeの文字で正常に扱えない文字があるからです。「𩸽」などいわゆるサロゲートペアを使用する文字や、多くの絵文字が文字列に含まれている場合、想定通りに動作しません。

VB2019対応 Visual Studio 2022

#If NETCOREAPP Then
    '.NET CoreでShift_JISなど追加のエンコーディングを扱うために必要です。
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
#End If

Dim value As String = "リんゴ"

'これは悪い例です。StrConv を使わないことを強く推奨します。
If StrConv(value, vbKatakana) = "リンゴ" Then
    Debug.WriteLine("ひらがな・カタカナを無視すると文字列は リンゴ と等価です。")
End If

Debug.WriteLineが表示される場所

メモ:value が "𩸽" の場合、If StrConv(value, vbKatakana) = "𩸽" Then は 期待に反して False になります。StrConv は「𩸽」を正しく変換できないからです。

 

 

変数が Nothing なら、処理を実行する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = Nothing

If value Is Nothing Then
    Debug.WriteLine("value は Nothing です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:If IsNothing(value) Then でもできますが、速度が遅く、使うメリットがないのでお勧めはしません。

 

 

変数が Nothing ではないなら、処理を実行する

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "OK!"

If value IsNot Nothing Then
    Debug.WriteLine("value は Nothing ではありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:If Not IsNothing(value) Then でもできますが、速度が遅く、使うメリットがないのでお勧めはしません。

 

 

変数が指定した型なら、処理を実行する (TypeOf ... Is ...)

この例は、変数 value の値が Date 型であるなら処理を実行します。(メモ参照)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = Date.Now

If TypeOf value Is Date Then
    Debug.WriteLine("value は Date型 と互換性があります。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:TypeOF ... Is ... は厳密に型が一致していなくても互換性がある型であれば True を返します。たとえば、基底クラスや実装するインターフェースの型 は True と判断します。わかりやすい例では TypeOf value is Object は value が Nothing でなければ常に True です。

メモ:もし、TypeOf で判定しようとしている変数がAs Integer や As Dateなどで宣言されている場合、BC30021「 'TypeOf ... Is' の左には参照型を持つオペランドが必要ですが、このオペランドの値型は 'Integer' です。」のようなエラーになります。Integerとわかっているのに、IfでIntegerかどうか判断しようとしていることになるので無意味ですが、勉強用のサンプルなどでこのようなプログラムを書いてしまうことがあります。

 

参考:変数 value の値が Date 型であるか厳密に判断するには GetType を使用して比較します。

VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = Date.Now

If TypeOf value Is Object Then
    ' このメッセージは表示されます。TypeOf ... Is ... は 互換性がある型を True と判断するからです。
    Debug.WriteLine("value は Object型 と互換性があります。")
End If

If value?.GetType() Is GetType(Object) Then
    ' このメッセージは表示されません。GetType と Is を組み合わせた比較は厳密に判断するからです。
    Debug.WriteLine("value は Object型 です。")
End If

If TypeOf value Is Date Then
    ' このメッセージは表示されます。
    Debug.WriteLine("value は Date型 と互換性があります。")
End If

If value?.GetType() Is GetType(Date) Then
    ' このメッセージは表示されます。
    Debug.WriteLine("value は Date型 です。")
End If

Debug.WriteLineが表示される場所

 

 

変数が指定した型なら、型変換して、処理を実行する

この例は、変数 value が Date 型であるならメッセージを出力します。(メモ参照)

VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = Date.Now

If TypeOf value Is Date Then
    Dim dt As Date = CType(value, Date)
    Debug.WriteLine($"value は {dt.Month}{dt.Day}日です。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:TypeOF ... Is ... は厳密に型が一致していなくても互換性がある型であれば True を返します。たとえば、基底クラスや実装するインターフェースの型 は True と判断します。わかりやすい例では TypeOf value is Object は value が Nothing でなければ常に True です。

 

 

変数が指定した型で、プロパティも一致すれば、処理を実行する

この例は、変数 value が Date 型でDayプロパティが1、Hourプロパティが12以上ならばメッセージを出力します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = New Date(2024, 2, 1, 15, 0, 0)

If TypeOf value Is Date Then
    Dim dt As Date = CType(value, Date)
    If dt.Day = 1 AndAlso dt.Hour >= 12 Then
    'これが出力されます。valueはDayが1でHourが15だからです。
        Debug.WriteLine("月の初めの日の午後ですね。")
    End If
End If

Debug.WriteLineが表示される場所

 

 

 

変数が指定した型でなければ、処理を実行する

この例は、変数 value の値が Date 型と互換性がなければ処理を実行します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = "OK!"

If Not (TypeOf value Is Date) Then
    Debug.WriteLine("value は Date型 と互換性がありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:この例は 変数が Nothing の場合にもメッセージを出力します。

 

この例は、上記とほぼ同じですが、変数がNothingの場合はメッセージを出力しない点で異なります。

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As Object = "OK!"

If TypeOf value IsNot Date Then
    Debug.WriteLine("value は Date型 と互換性がありません。") '←これが表示されます。
End If

Debug.WriteLineが表示される場所

メモ:この例は 変数が Nothing の場合はメッセージを出力しません。

 

 

条件判断と同時に変数に代入する

この例は、1~6のランダムな数値を生成し、数値によってメッセージを変えます。メッセージには生成された数値を含みます。

Visual Studio 2022

Dim i As Integer

Dim assign = Function(ByRef v As Integer, value As Integer)
                 v = value
                 Return value
             End Function

If assign(i, Random.Shared.Next(1, 7)) >= 4 Then
    Debug.WriteLine($"高い数 {i} が生成されました。")
Else
    Debug.WriteLine($"低い数 {i} が生成されました。")
End If

Debug.WriteLineが表示される場所

メモ:C#の代入演算子 = は代入した値を返しますが、VBの代入演算子 = は何も値を返さないので、VBでは代入と条件判断を組み合わせて記述することができません。この例では、代入を実行し、代入した値を返す関数を 変数 assign で定義することでC#の代入演算子を同じことを実現しています。しかし、この方式はサンプルを見てわかるように少しトリッキーです。ここまでして代入と条件判断を組み合わせる必要はないはずなので、このサンプルは参考程度にご活用ください。