- ベストアンサー
VBAとJIS Full BASICでピタゴラス数を求める方法
- VBAとJIS Full BASICでピタゴラス数を求めるためのコードを実行しましたが、エラーが発生しました。
- コード中のZ = Sqr(x^2 + y^2)の部分でエラーが発生しているようです。
- ピタゴラス数を求めるためのコードを修正して再度実行してみてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Public Function 関数名(ByVal 引数名 As データ型) As 戻り値のデータ型 ................. .............. ................. Return 戻り値 End Function https://www.adonetvb.com/Learning/FunctionProcedure.html
その他の回答 (3)
- kawais070_1
- ベストアンサー率55% (515/931)
JIS Full Basic をよく知らないけど、関数は値渡しなのかな?VBAだと、参照渡しがデフォルト動作なのよね。 そんなわけで、 Function gcd(a, b) これ↑は、 Function gcd(ByVal a, ByVal b) というように変えて、値渡しであることを明記しないとダメだと思いました。
- kawais070_1
- ベストアンサー率55% (515/931)
https://social.msdn.microsoft.com/Forums/ja-JP/a463b4ef-aa3c-4742-a122-35f5eac85f2e/vba199781239112398320472005565288124091236520055652891239812456?forum=vbajp 上記のページを見て初めて知りましたが、 ^ は64ビット環境だと、LongLongのサフィックスなんですね。 べき乗として使うには、^ の前にスペースが要るということで。
補足
貴重な情報まことにありがとうございます。 Dim x As Double, y As Double, z As Double z = Sqr(x*x + y*y) としてみましたが、やはり暴走します。うーん?
- kawais070_1
- ベストアンサー率55% (515/931)
Z = Sqr(x^2 + y^2) 上記の行を Z = Sqr(CDbl(x)^2 + CDbl(y)^2) と変更すればよいかも。 Integerで計算されてしまい、オーバーフローしているのかなと思いました。
補足
すばやい回答まことにありがとうございます。 Z = Sqr(CDbl(x)^2 + CDbl(y)^2) でやったのですが、暴走しました(笑)。 元に戻して Dim x As Double, y As Double, z As Double としてみましたが、やはりコンパイルエラーが出ます。 VBA も BASIC も久しぶりに触るので、どこか見落としがあるのかも知れません。BASIC の方は期待通りに動くのですけどね。
お礼
ありがとうございました。