固定長文字列の配列またはユーザー定義型の配列を、バリアント型の変数に割り当てることはできませんCan't assign or coerce array of fixed-length string or user-defined type to Variant

Variant は、有効な VarType が含まれるデータの割り当てのみを取ることができます。A Variant can only accept assignment of data having a valid VarType. このエラーの原因と解決策を次に示します。This error has the following causes and solutions:

  • 固定長文字列の配列を渡そうとしました。You tried to pass an array of fixed-length strings. 1 つの固定長文字列が Variant に割り当てられている場合、その文字列は可変長文字列に強制的に変換されますが、この処理は、固定長文字列の配列に対しては実行されません。When a single fixed-length string is assigned to a Variant, it's coerced to a variable-length string, but this can't be done for an array of fixed-length strings.

    配列を渡す必要がある場合は、ループを使用して、配列の個別の要素を、可変長文字列の一時配列の要素に割り当てます。If you must pass the array, use a loop to assign the individual elements of the array to the elements of a temporary array of variable-length strings. その後、配列をバリアントに割り当てて、Erase を使用して一時配列の割り当てを解除できます。You can then assign the array to a variant and use Erase to deallocate the temporary array. ただし、Erase では、固定サイズの配列の割り当てを解除することはできません。However, you can't deallocate a fixed-size array with Erase.

  • 固定長文字列またはユーザー定義型VarType 関数または TypeName 関数に渡そうとしました。You tried to pass a fixed-length string or user-defined type to the VarType function or TypeName function.

    VarType または TypeName 関数の引数は、有効な Variant 型である必要があります。An argument to the VarType or TypeName function must be a valid Variant type.

  • ユーザー定義型を Variant 変数に渡そうとしました。You tried to assign a user-defined type to a Variant variable. ユーザー定義型の変数全体を Variant に直接割り当てることはできませんが、Array 関数を使用すると、ユーザー定義型の変数の個別の要素を Variant に割り当てることができます。Although you can't directly assign a whole variable of user-defined type to a Variant, you can use the Array function to assign the individual elements of a variable of user-defined type to a Variant. これにより、バリアントの配列が含まれる Variant が作成されます。This produces a Variant containing an array of variants. バリアントのこの配列における各要素の VarType は、ユーザー定義型の各要素の元の型に対応します。The VarType of each element in this array of variants corresponds to the original type of each element of the user-defined type.

  • 固定長文字列またはユーザー定義型の配列を、Variant 引数を必要とするプロシージャ呼び出しで引数として渡そうとしました。You tried to pass an array of fixed-length strings or user-defined types as an argument in a procedure call that requires a Variant argument. プロシージャが遅延バインドされている場合、つまり、実行時に呼び出しを行う必要があるときは必ず、すべての引数を Variant 型として渡す必要があります。Note that any time a procedure is late bound, that is, when the call must be constructed at run time, all arguments must be passed as Variant types. たとえば、次のコードにより、このエラーが発生します。For example, the following code causes this error:

      Dim MyForm As Object    ' Because MyForm is Object, binding is late. 
      Set MyForm = New Form1 
      Dim StringArray(10) As String * 12 
      ' The next line generates the error. 
      MyForm.MyProc StringArray 
    

    文字列配列については、ループを使用して、配列の個別の各メンバーを、可変長文字列の一時配列に割り当てます。For the string array, use a loop to assign each individual member of the array to a temporary array of variable-length strings. その後、その配列を Variant に割り当てて、プロシージャに渡すことができます。You can then assign that array to a Variant to pass to the procedure. ユーザー定義型の配列については、Array 関数を使用して、ユーザー定義型の変数の個別の要素を Variant に割り当てることができます。For an array of user-defined types, you can use the Array function to assign the individual elements of a variable of user-defined type to a Variant. これにより、バリアントの配列が含まれる Variant が作成されます。This produces a Variant containing an array of variants. バリアントのこの配列における各要素の VarType は、ユーザー定義型の各要素の元の型に対応します。The VarType of each element in this array of variants corresponds to the original type of each element of the user-defined type.

詳細については、該当する項目を選択し、F1 キー (Windows の場合) または HELP (Macintosh の場合) を押してください。For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.