ループの境界とステップの句が同じ型に変換されないため、'<variablename>' の型があいまいです。

更新 : 2007 年 11 月

コードに For...Next ループが含まれていますが、次の条件が満たされているため、コンパイラはそのループの中でループ制御変数のデータ型を推論できません。

  • ループ コントロール変数のデータ型が As 句で指定されていません。

  • ループ境界とステップ変数に少なくとも 2 つのデータ型が含まれています。

  • 複数のデータ型変換の可能性があります。

  • ループ コントロール変数のデータ型の候補の中で最適なデータ型を絞り込めず、あいまいな状態になっています。

たとえば、以下のループには Integer 型のループ境界と UInteger 型のループ境界がそれぞれ 1 つずつあります。

Dim m As Integer = 1
Dim n As UInteger = 10
' Not valid.
' For i = m To n
    ' Loop processing.
' Next

Integer と UInteger の間でも、UInteger と Integer の間でも変換は可能ですが、どちらも縮小変換なので、どちらが最適かを決められません。

次の例では、第 3 の変数として Double 型の変数を追加します。Integer にも UInteger にも Double に対する標準の拡大変換があるので、Double への変換が最適だということになります。型の推論によって、ループ コントロール変数 i にはデータ型 Double が割り当てられます。

Dim stepVar As Double = 1
' Valid.
For i = m To n Step stepVar
    ' Loop processing.
Next

エラー ID: BC30983

このエラーを解決するには

  • いずれかの変数を、他の変数から見て拡大変換に相当するデータ型に明示的に変換します。たとえば、次のようにします。

    For i = m To CLng(n)
    
  • As 句を使用して、コントロール変数の型を指定します。

    For i As Double = m To n 
    

参照

概念

暗黙の型変換と明示的な型変換

ローカル型の推論

拡大変換と縮小変換

参照

For...Next ステートメント (Visual Basic)

Option Infer ステートメント