• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA と JIS Full BASIC)

VBAとJIS Full BASICでピタゴラス数を求める方法

このQ&Aのポイント
  • VBAとJIS Full BASICでピタゴラス数を求めるためのコードを実行しましたが、エラーが発生しました。
  • コード中のZ = Sqr(x^2 + y^2)の部分でエラーが発生しているようです。
  • ピタゴラス数を求めるためのコードを修正して再度実行してみてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hahaha8635
  • ベストアンサー率22% (800/3609)
回答No.4

Public Function 関数名(ByVal 引数名 As データ型) As 戻り値のデータ型 ................. .............. ................. Return 戻り値 End Function https://www.adonetvb.com/Learning/FunctionProcedure.html

musume12
質問者

お礼

 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

JIS Full Basic をよく知らないけど、関数は値渡しなのかな?VBAだと、参照渡しがデフォルト動作なのよね。 そんなわけで、  Function gcd(a, b) これ↑は、  Function gcd(ByVal a, ByVal b) というように変えて、値渡しであることを明記しないとダメだと思いました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

https://social.msdn.microsoft.com/Forums/ja-JP/a463b4ef-aa3c-4742-a122-35f5eac85f2e/vba199781239112398320472005565288124091236520055652891239812456?forum=vbajp 上記のページを見て初めて知りましたが、 ^ は64ビット環境だと、LongLongのサフィックスなんですね。 べき乗として使うには、^ の前にスペースが要るということで。

musume12
質問者

補足

 貴重な情報まことにありがとうございます。   Dim x As Double, y As Double, z As Double   z = Sqr(x*x + y*y) としてみましたが、やはり暴走します。うーん?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

Z = Sqr(x^2 + y^2) 上記の行を Z = Sqr(CDbl(x)^2 + CDbl(y)^2) と変更すればよいかも。 Integerで計算されてしまい、オーバーフローしているのかなと思いました。

musume12
質問者

補足

 すばやい回答まことにありがとうございます。   Z = Sqr(CDbl(x)^2 + CDbl(y)^2) でやったのですが、暴走しました(笑)。  元に戻して   Dim x As Double, y As Double, z As Double としてみましたが、やはりコンパイルエラーが出ます。  VBA も BASIC も久しぶりに触るので、どこか見落としがあるのかも知れません。BASIC の方は期待通りに動くのですけどね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラミングの問題です

    このプログラムは何をするものか詳しく説明しなさい。 100 FOR x=1 TO 100 110 FOR y=x TO 100 120 LET a=x 130 LET b=y 140 DO 150 LET r=MOD(a,b) 160 IF r=0 THEN EXIT DO 170 LET a=b 180 LET b=r 190 LOOP 200 IF b=1 THEN 210 LET z=SQR(x^2+y^2) 220 IF INT(z)=z THEN PRINT x,y,z 230 END IF 240 NEXT y 250 NEXT x プログラムに関して初心者で、120~230(ほとんどですが…)の部分で何をしようとしているのかが分かりません。何か参考になるHPや考え方だけでも教えていただけないでしょうか。

  • Basicのプログラミングについて… (game)

    箱の上から自然に落ちるようにするにはどうすればよいのでしょうか? SET bitmap SIZE 500,500 SET WINDOW 0,10000,10000,0 LET x=5000 LET y=5000 LET jsw=0 DO UNTIL getkeystate(13)<0 PLOT LINES:0,5000+110;10000,5000+110 PLOT LINES:6000,4000;7000,4000 PLOT LINES:6000,4000;6000,5000+110 PLOT LINES:7000,4000;7000,5000+110 SET AREA COLOR "white" DRAW disk WITH SCALE(100)*SHIFT(x,y) IF getkeystate(37)<0 THEN LET x=x-50 IF getkeystate(39)<0 THEN LET x=x+50 IF x<0 THEN LET x=0 IF x>10000 THEN LET x=10000 IF getkeystate(38)<0 AND jsw=0 THEN LET jsw=1 LET i=-SQR(2500) END IF IF jsw=1 THEN LET y=i^2+2500 LET i=i+1 IF i>SQR(2500) THEN LET jsw=0 end if if i>0 then if 6000<x and x<7000 then if 4000-140<=y THEN LET jsw=0 end if end if end if if i>0 then if 6000>x then LET y=i^2+2400 IF i>SQR(2500) THEN LET jsw=0 end if end if SET AREA COLOR "black" DRAW disk WITH SCALE(100)*SHIFT(x,y) WAIT DELAY 0.01 LOOP END

  • Excel VBA 条件分岐のスマートな書き方

    すみません。すごく初歩的な質問なのですが、 Excel VBAで以下のような条件分岐をさせたい場合、 もっとスマートな書き方できませんか? 命題 AとBに対して if not A then 処理X end if if not B then 処理Y end if if not(A and B) then 処理Z(この処理の中には処理Xと処理Yの結果が含まれている) end elseifを使った書き方が思い浮かばず、 同じことを何度も書いているようで、もっと上手に書けそうな気がしまして・・・ どなたかご教示頂けたらと思います。

  • VBAでのシート選択について

    いつもお世話になります。 VBA初心者で、基本的な質問をしているかもしれませんが、 どうかお付き合いください;; たとえば、以下のようなコードがあったとします。 例) Function Sample() dim x As Integer dim y As Integer x=10 y=100 If x > sheets("シート2").Range("A1") AND y < sheets("シート2").Range("A1") Then 処理 End If End Function 例えば上記のコードのようなものがあったとして、 シート名を省いて文字数を減らす方法はあるでしょうか? 1つのFunction内では「このシート」しか参照しないというような指定が出来ると、 If x > Range("A1") AND y < Range("A1") Then というように簡単にできますよね? 他のFunctionでは、シートの指定はさせたくないので、 End Functionの手前で、「シート指定終了」というのを 記述できればベストなのですが…。 どうかよろしくお願いいたします。

  • 08年センター試験本試数学Bコンピュータ

    以下はユークリッドの互除法という自然数x,yの最大公約数を求めるためのプログラムです。 センター試験の問題では、130~150行目が空欄になっていて、その部分に当てはまるものは何か問うていました。 私は勉強不足で、高校で学ぶコンピュータプログラミングを知りません。 ユークリッドの互除法といえば、130~150行目は 130 LET Z=X 140 LET X=Y 150 LET Y=Z と、即答できねばいけないものなのでしょうか。 それともこの部分は考えて求められるものなのでしょうか。 もし後者であれば、その考える道筋を解説していただきたいです。 100 INPUT "x=";X 110 INPUT "y=";Y 120 IF X<Y THEN 130 LET Z=X 140 LET X=Y 150 LET Y=Z 160 END IF 170 IF Y=0 THEN 180 PRINT X 190 GOTO 270 200 END IF 210 LET R=X 220 LET R=R-Y 230 IF R>=Y THEN GOTO 220 240 LET X=Y 250 LET Y=R 260 GOTO 170 270 END

  • ■Excel VBA グローバルな書き方■

    Sub 跳ね返る() Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim hyouji As String, yoko As String, tate As String hyouji = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do Cells(X, Y).Value = hyouji '★ For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next Cells(X, Y).Value = hyouji For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next          '★ If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If Loop End Sub ************************************ 上記のプログラムを Dim a() EndSub Dim b() EndSub Dim c() endSub Sub main() a b c EndSub のような、mainを動かせばabcも動く グローバルな(ローカルでもいいのですが) プログラムにするにはどうしたらいいですか? ★印から★印までの間の動作が同じような動作で 二つあるので、それを一つにまとめ 尚且つ、表示と時間稼ぎと表示削除の 3つの動作を分けた形にしたいです。 質問が下手で申し訳ありません…;;

  • 十進BASICでの衝突プログラミング

    十進ベーシック超初心者です。二次元の箱の中に円を置き、そこで衝突を繰り返すプログラムをつくりたいのですが行き詰っています。 箱の中だけでの衝突は、以下のようにプログラムできたのですが、円にぶつかるときどのようにプログラムをくんで跳ね返させればいいかわかりません。どなたか教えて下さい。 SET WINDOW -20,20,-20,20 DRAW GRID(2,2) PLOT LINES: -10,-10 ;10,-10;10,10;-10,10;-10,-10 DRAW CIRCLE WITH SCALE (2) LET X=-10 LET Y=-10 LET T=0 LET V=4.53574748 LET A=56.654968 LET VX=COS(A) LET VY=SIN(A) 100 PLOT LINES:X,Y ; IF VX>0 THEN LET LX=20-(10+X) END IF IF VX<0 THEN LET LX=20-(10-X) END IF IF VY>0 THEN LET LY=20-(10+Y) END IF IF VY<0 THEN LET LY=20-(10-Y) END IF LET T=MIN(LX/ABS(VX),LY/ABS(VY)) LET X=VX*T+X LET Y=VY*T+Y IF T=LX/ABS(VX) THEN LET VX=-VX END IF IF T=LY/ABS(VY) THEN LET VY=-VY END IF GOTO 100 END

  • Maltabについて3

    2変数の極地問題について、どのようにプログラムを書けばいいのでしょうか? 具体的には、fortranでは、以下のように書かれているのですが、、、 次のzがなる時のxとyは? z=-x^2+5x-2y^2+2y+2 (以下のページ http://www8.plala.or.jp/uemura/sim2.html を参照しています。) DOUBLE PRECISION X,Y,H,MAXZ,Z1,Z2,Z3,Z X=0 !xの初期値 Y=0 !yの初期値 H = 0.1 !ステップ幅 MAXZ = -100000 100 Z1 = Z(X, Y) Z2 = Z(X + H, Y) Z3 = Z(X, Y + H) IF (Z2.GT.Z1.AND.Z2.GT.Z3) THEN  MAXZ = Z2  X = X + H  GOTO 100 END IF IF (Z3.GT.Z1.AND.Z3.GT.Z2) THEN  MAXZ = Z3  Y = Y + H  GOTO 100 END IF IF (Z1.GE.Z2.AND.Z1.GE.Z3) THEN  H = H / 10  IF (H.GT..000001) GOTO 200  GOTO 100 END IF 200 WRITE(*,*) 'X*= ', X WRITE(*,*) 'Y*= ',Y WRITE(*,*) 'Z*= ',Z1 END DOUBLE PRECISION FUNCTION Z(X,Y) DOUBLE PRECISION X,Y Z=-X**2+5*X-2*Y**2+2*Y+2 END これを実行すると次の解が求まる。 X*= 2.500000037252903 Y*= 5.000000074505806E-001 Z*= 8.749999999999998

  • ▲ExcelのVBA▼困っています

    何度もVBAで質問させてもらい助けてもらっています。 懲りずにまた質問ですが… 下のプログラムは"●"が跳ね返るものなのですが… ●の後を■と▲が追うようなプログラムにするには なにを追加すればいいのでしょうか…?; どなたか教えて下さい;;お願いします;; Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim maru As String, yoko As String, tate As String Sub 描画() Cells(X, Y).Value = maru End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() maru = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

  • VBAでShift-JISのURLエンコード

    Excelにおいて、マクロを使ってShint-JIS形式のエンコードを行いたいのですが その方法(ソース)がネット上で見つかりません。。どなたかご教授いただけないでしょか!  ※VBA(マクロ)について、ぜんぜん詳しくありません。。 検索 ⇒ %8c%9f%8d%f5 UTF-8の場合ならば、シンプルなものが見つかりました。 ----------------------------------------------------- Public Function UrlEncode(ByVal sText As String) As String If Len(sText) = 0 Then Exit Function With CreateObject("ScriptControl") .Language = "JScript" UrlEncode = .CodeObject.encodeURIComponent(sText) End With End Function また、デコードするものも見つかりました。 ----------------------------------------------------- Function URLDecodeSJIS(src) src = UnEscape(src) For i = 1 To Len(src) srcCh1 = AscW(Mid(src, i, 1)) If (&H0 <= srcCh1 And srcCh1 <= &H80) Or (&HA0 <= srcCh1 And srcCh1 <= &HDF) Then URLDecodeSJIS = URLDecodeSJIS & Chr(srcCh1) ElseIf (&H81 <= srcCh1 And srcCh1 <= &H9F) Or (&HE0 <= srcCh1 And srcCh1 <= &HFF) Then i = i + 1 srcCh2 = AscW(Mid(src, i, 1)) clcCh = srcCh1 * 256 + srcCh2 If (Asc(Chr(clcCh)) And &HFFFF&) = clcCh Then clcCh = Chr(clcCh) URLDecodeSJIS = URLDecodeSJIS & clcCh End If Next End Function Function UnEscape(s) With CreateObject("MSScriptControl.ScriptControl") .Language = "VBScript" .Reset UnEscape = .Eval("unescape(""" & s & """)") End With End Function よろしくお願い致します。