• 締切済み
  • 困ってます

fortranとVBAのdo文

fortranをBVAのプログラムに直す作業をしています。 プログラムが不慣れなもので、基本的なことかもしれませんが書き込みます。 fortranにて do 10 i=1, n call SET(IX, i, x(i)) 10 continue ここでn、IXは整数で、サブルーチンSETで作業はします。 これをVBAで書き直すとどのようにあらわされるのでしょうか。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数321
  • ありがとう数2

みんなの回答

  • 回答No.1
  • notnot
  • ベストアンサー率47% (4590/9635)

使う言語のことを全く勉強しないというのは無茶です。 とりあえず、質問の答えは for i=1 to n call setsub(ix,i,x(i)) next i VBAではsetは予約語で名前として使えませんので、setsubとかにしてください。 まずは入門書などで一通りの文法を調べましょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どうもありがとうございます。 参考書を対比させるだけではどうしようもないんですね。 失礼しました。 一通り勉強しなおします。

関連するQ&A

  • Fortran の DO

    Fortran 初心者です。質問があります。よろしくお願いします。 くりかえしのDOについてなのですが、Iを0から360まで30刻みで繰り返す場合は DO 10 I = 0,360,30 10 CONTINUE ですが、30というのをキーボードから入力して任意の刻み幅にしたい場合は READ(5,*) A DO 10 I = 0,360,A 10 CONTINUE としたのですが、エラーになります。なぜなのでしょうか?

  • fortran 渡す値について

    fortranの質問です。 integer ix,iy,maxX,maxY で宣言しており、 do istep=1,100 call B_DIF(☆) do ix=0,maxX do iy=0,maxY B_M(ix,iy)=B_P(ix,iy) end do end do end do のルーチンで悩んでいます。 B_DIFは B_P(ix,iy)=K(係数のことです)*B_M(ix,iy)+B_M(ix+1,iy)-B_M(ix-1,iy) といった感じのサブルーチンです。functionで表していないのは、ややこしい関数があるので、サブルーチンでまとめてメインに返すという手法をとっています。ご了承下さい。 ここで、B_P(☆)の☆には何を入れると適切に動くと思いますか? ☆に データix,iyを入れるだけで意とするB_P(ix,iy)がでてくるのか、 それとも、ix,iy,B_Mのデータを受け渡すべきか・・ 一番の問題は、 B_P(ix,iy)=K(係数のことです)*B_M(ix,iy)+B_M(ix+1,iy)-B_M(ix-1,iy) にix,iyを送ったとき、B_M(ix+1,iy)などが意図する値を吐いてくれるのかということです。 ix=1,iy=2でB_DIFのルーチンにおいて、 B_P(1,2)=K(係数のことです)*B_M(1,2)+B_M(2,2)-B_M(0,2) とパソコンが読み取ってくれるのか疑問です。 ちなみに、B_M(1,2)、B_M(2,2)、B_M(0,2)は既知の値です。 頭がこんがらがって、どうすべきかわかりません。 2次元配列の添字の継承・・ よろしくお願いします。

  • Do文で副プログラムの増やす【Fortran】

    Fortranを使用してます。 DO文で副プログラムをループさせて増やしたいのですが、どうすればいいか分りません。 具体的には、副プログラムの「SUBROUTINE」文+サブルーチン名 であるサブルーチン名の後にループを使って番号を付けたいのですが・・・ 簡易なイメージとして以下のソースでtest0、test1、test2、・・・・・test10となるようなサブルーチン名にしたいのです。 do x=0,10 SUBROUTINE test+x y=x+10 retun end end do Fortran初心者ですが、解決したいので難しい解説でも大丈夫です。 分る方は宜しくお願いいたします。

  • FORTRAN→Cに翻訳

     どなたか、次のFORTRANのプログラムを、Cに、翻訳して頂けないでしょうか。C++ではなく、Cです。ANSI準拠のCでお願いします。  プログラムの内容は、最小二乗法による計算プログラムです。MS-DOS Ver3.3~6.0の頃の、MS FORTRANコンパイラ仕様のものです。その頃持っていたFORTRANの本も処分してしまい、今からFORTRANを学びなおすのにも多大な労力と時間がかかりそうなので、Cに翻訳して頂ければ大変ありがたいです。よろしくお願いします。 (“□”はタブ) ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ C□LEAST SQUARE APPROXIMATION □PROGRAM MAIN9 □DIMENSION X(100),Y(100),S(0:18),T(0:9),SM(10,10),TV(10),AV(10) □WRITE(*,*) 'N ?' □READ(*,*) N □WRITE(*,*) 'x1,x2,..,xn ?' □READ(*,*) ( X(I),I=1,N ) □WRITE(*,*) 'y1,y2,..,yn ?' □READ(*,*) ( Y(I),I=1,N ) □WRITE(*,*) 'M ?' □READ(*,*) M □DO 110 K=0,M*2 □□VS=0. □□DO 100 I=1,N □100□VS=VS+X(I)**K □□S(K)=VS □110□CONTINUE □□DO 130 K=0,M □□□VS=0. □□□DO 120 I=1,N □120□VS=VS+Y(I)*X(I)**K □□□T(K)=VS □130 CONTINUE □□DO 140 I=1,M+1 □□□DO 140 J=1,M+1 □□□□K=I+J-2 □□□□SM(I,J)=S(K) □140 CONTINUE □□DO 150 I=1,M+1 □150 TV(I)=T(I-1) □□CALL SIMULE( AV, SM, TV, M+1 ) □□DO 160 I=1,M+1 □160 WRITE(*,1000) I-1,AV(I) □1000 FORMAT(1H ,'A',I1,'=',F10.5) □□STOP □□END ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

  • FortranのGO TO文について。

    Fortranのプログラムソースで 90 CONTINUE IF (式) GO TO 100 DO 110…[略] 110 CONTINUE 100 CONTINUE IF (式) THEN DO 120…[略] 120 CONTINUE GO TO 90 のような場合どのように処理が進んでいくのですか? 「GO TO(行番号)」で指定された行番号で戻った先が「(行番号)CONTINUE」の場合、 その次の行からの処理を行うのですか?

  • fortran77教えてください

    fortran77の問題で次のプログラムの作成の仕方を教えてください 整数A,B,Cを読み込み、それを係数とする2次方程式Ax^2+Bx+C=0の解を計算して表示するプログラムを サブルーチン副プログラムを用いて作成せよ(複素数型を使うこと) メインプログラムでは整数A,B,Cの入力および解の出力および解の出力を行い解の計算はサブルーチン副プログラムで行うこと なお'keisan.txt'という名前のデータファイルに結果を出力するように 計算時は以下の3つの方程式を用いること x^2+3x+5=0 X^2+6x+4=0 x^2+x+1=0

  • Fortranでのファイル名操作について

     Fortranを使っているものです。 プログラムで、ファイル名は文字列形式でしか付けれないと思いますが、そのファイル名をメインプログラムから何か値をもらって、それをサブルーチンでファイル名につけるということはできるのでしょうか?  例えば、iをメインプログラムで10~100まで10ずつ動かすとします。そのiの値をわかりやすくするためにファイル名に付けたいと思っていて、do文でサブルーチン中でまわしてファイル名に入れる・・・なんてことは可能でしょうか?

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

  • FORTRANとC++の連動について

    私は,Fortranを用いて解析の業務をしている,プログラム初心者です。 購入したのは,Intel Visual Fortran8.0(VF)ですが,Windows環境でコンパイルリンクするには,Microsoft Visual C++ .NET 2003(VC++)が必要ということで,こちらも購入しました。 普段は,Fortranのコンソールで ifort **.f といったコマンドでコンパイルリンクし,実行しているだけです。 これからは,VC++の方に移行していきたいと考えていますが,しばらくはFortranで作成したサブルーチンを有効活用したと考えています。 そこで,VC++ベースのメインプログラムからFortranのサブルーチンを呼び出すプログラムの作成方法,コンパイルリンク方法をご教授ください。よろしくお願いします。 (1)ソースにどう記述するか? void CMyDlg::OnBnClickedOk() { ここで,FORTRANのサブルーチンを呼び出したい。     Fortranなら call subroutine( a, b ) } (2)コンパイルするときは, Visual Studio開発環境で,コンパイル→実行で良いのか? それとも,あらかじめVC++とVFで.objファイルを作成する必要があるのか?

  • プログラミング Fortran

    以下のプログラムの空白部分が分かる方、是非力を貸して下さい!!(> <) 次の数列ai=1,…,N(1≦N≦100)                  ai=1, ai+1=2ai-3 に対して               S=Σai(※Σの上はN、下はi=1) を計算・表示するプログラムは以下のようになる。ここでは整数Nは端末から入力する。 common num,a(100),sum read(5,*) num call [ ] call pqrstu write(6,*) ‘a=’,(a(i),i=1,num) write(6,*) ‘sum=’,sum end * subroutine abcdef common num,a(100) a(1)=[ ] do 20 i=1,num a(i+1)=a(i)*2.0-3.0 20 continue end * subroutine pqrstu common [ ] sum=[ ] do 20 i=1,num sum=[ ] 20 continue end よろしくお願いします!!