Larsは、マクロでATAN2関数を使用すると問題が発生しました。彼はかなり複雑な一連の命令を開発しましたが、ATAN2関数を使用しようとしたときにVBAがエラーを生成するだけでした。彼はマクロを単純化して問題を再現することができました:

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

コードを実行すると、ATAN2を実行した行にエラーが発生します。ラースは、正確には何が問題を引き起こしたのか疑問に思っていました。

この問題は、C変数をどのように操作しているかに明らかに関係しています。最初にCをゼロとして定義し、次にこの値を否定します。負のゼロのようなものはありません。値を否定しようとすると、Excelは、その値が後で数式で使用されるときに明らかに失敗します。

この問題を解決する1つの方法は、ゼロ値を考慮してCを変換する方法を変更することです。次のようにマクロを変更します。

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     If C <> 0 Then C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

これで、マクロはゼロに等しくない場合にのみCで変換を実行するため、正常に機能します。

また、Cが浮動小数点値として定義されている場合にのみ、エラーが生成されるようです。 Cを整数として次元化した場合、元のマクロはエラーを生成しません。これは、問題が、存在しない負のゼロの浮動小数点表現が内部的にどのように表現されるかに関連していることを示している可能性があります。整数データ型は厳密に整数を処理するため、その表現の問題は発生しません。

また、CをVariantデータ型として宣言する場合、または宣言行を完全に削除する場合(つまり、VBAは最初に使用されたときにCをVariantとして宣言するようにデフォルト設定されます)、問題を取り除くことができます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2892)は、Microsoft Excel 97、2000、2002、および2003に適用されます。