Excel VBAでフィボナッチ数列のプログラムを作成できない

このQ&Aのポイント
  • Excel VBAを学習中で、フィボナッチ数列のプログラムを作成する問題に取り組んでいますが、困っています。
  • フィボナッチ数列は帰納的に定義され、その関数fib(n)を定義する必要があります。
  • また、fib関数を呼び出すメインプロシージャも作成し、結果を指定したセルに書き込む必要があります。
回答を見る
  • ベストアンサー

excel vbaのプログラムが作成できません

プログラミングでexcel vbaを勉強しています。 excel vbaのプログラムでフィボナッチ数列のプログラムを作れという問題なんですけど、正直全くわかりません。誰かこのプログラミングを教えてください。お願いします。 フィボナッチ数列は次のように帰納的に定義される。 fib(1) = fib(2) = 1 fib(n) = fib(n - 1) + fib(n - 2) (ただしn >= 3) この関数fib(n)を定義せよ。ただし引数nはInteger型、fib関数の返す値はLong型とする。 またfib関数を呼び出す適当なメインプロシージャを定義し、A1セルからA20セルまでに fib数列の1~20番目の値を書き出すようにせよ。 という問題です。ほんとに困ってますお願いします

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

  • ベストアンサー
  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.1

vbaの基礎はできているのですか。 要するにプログラムのメインの部分は dim FIB(1000) FIB(1)=1 : FIB(2)=1 for N=2 to 100 : FIB(N)=FIB(N-1)+FIB(N-2) : next N あとは手続的な話だけでしょう。

その他の回答 (2)

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.3

No2投稿前に書き換えてミスしてました 誤 Cells(i, 1).Value = CalFIB(i) 正 Cells(i, 1).Value = fib(i)

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.2

もし、問題文が質問内容の通りなら、「自分で考えて作りました!」とか言うと ボロが必ず出る設問になっています。教えて貰った事を必ず申告しましょう Sub fncFib()  Dim i As Integer  For i = 1 To 20   Cells(i, 1).Value = CalFIB(i)  Next i End Sub Function fib(n As Integer) As Long  ' 戻り値  fib = 0  ' 計算結果を格納する配列arrayFibを宣言する  ' ただし、47回目の帰納で計算結果がLong型の上限を超える為、配列数は46とする  Dim arrayFib(46) As Long  arrayFib(1) = 1  arrayFib(2) = 1  For i = 3 To n arrayFib(i) = arrayFib(i - 1) + arrayFib(i - 2)  Next i  ' 戻り値を設定する  fib = arrayFib(n) End Function

関連するQ&A

  • フィボナッチ数列のプログラム

    問題で フィボナッチ数列のn番目の値を計算する関数 int fib(int n) を再帰的に定義し、この関数を利用してフィボナッチ数列の最初の10個を表示するプログラムを書けという問題があるのですが、大まかな流れは想像できるのですが、できないので困っております。  何方か教えてください。

  • フィボナッチ数列 プログラミング C言語

    「フィボナッチ数を次の手順で求めるプログラムfib2.cを作成。 再帰関数 int fib(int n)を定義し,再帰呼出しによりfib(n)の値を求める。n=30までのフィボナッチ数を求めて表示せよ。 またどのnの値まで求めるか?」という問題です。 で下記のように作りましたが再帰関数をつかわなかったので再提出になってしまいました。 再帰関数はどうやって使うのでしょうか。 今回の場合はどの部分が再帰関数になるのでしょうか? おねがいします。 #include<stdio.h> main() { int fib[100], i; fib[0] = 0; fib[1] = 1; printf("F0=0\nF1=1\n"); for(i=2; i<=30; i++) { fib[i] = fib[i-1]+fib[i-2]; printf("F%d=%d\n",i, fib[i]); } }

  • rubyの特異メソッド

    Rubyプログラミング入門という本を読んでいた際、 フィボナッチ数列を求めるプログラムが例としてありました。 以下はソースと実行結果です。 def (Fib = [0, 1]).[](n) super || Fib[n] = Fib[n-1] + Fib[n-2] end p fib(30)[0] #=>832040 このプログラムを理解するキーワードは特異メソッドと明記されていましたが、 (Fib = [0, 1]).[](n) や super || Fib[n] の部分がわかりません。 ご教授よろしくお願いします。

  • フィボナッチ数列 c言語

    c言語でフィボナッチ数列を求めるプログラムを再帰関数をつくり作れという問題でしたのように作りました。 windowsでcygwinというものを使ってコンパイルしています #include <stdio.h> int fib(int); main() { int n,i; printf(\"第何項までのフィボナッチ数? n=\"); scanf(\"%d\",&n); fib(0)=0; fib(1)=1; for(i=2;i<=n;i++){ print(\"f(%d)=%d\",n, fib(n));} } エラーは $ gcc fib2.c fib2.c: In function `main\': fib2.c:10: error: invalid lvalue in assignment fib2.c:10: error: invalid lvalue in assignment とでました。 どこかちがいますか?

  • エクセル VBAで関数を定義したけれどもうまくいかない

    以前ここで教えていただいた方法ですが、 セルB1からB100までのいずれかを変更した際に プロシージャが起動する方法として まず VBAで標準モジュールに 関数を定義して Function mykansu(dum As Range) for i=1 to 100 if cells(i,2)=1 then cells(i,6)="yes" next i End Function そしてexcelシートでセルA1に =mykansu(B1:B100) とやれば、B列の変更を加えたらプロシージャが起動する と教えていただきました。 しかし A1に #Value と出たきりでVBAのプロシージャが動かないのはなぜでしょうか。教えてください。

  • VBAでの戻り値と引数について

    最近VBAでプログラムを勉強しています。 引数と戻り値について教えてください。 定義としては、 引数:プロシージャに渡される定数、変数、および式。 戻り値:呼び出し元に処理の結果を戻す値。 となっているのですがいまいちピンときません。 SubプロシージャとFunctionプロシージャでその違いがあると思うのですが、具体的にどれが引数でどれが戻り値なのかわかりません。 他のプログラミングも全く経験がない初心者で初歩的な質問ですみませんがご教授お願いします。

  • ExcelのVBAのテクニック

    ExcelのVBAを3時間前位から使い始めました。矩形波のフーリエ級数展開の式を項数nを変化させたときのグラフのプログラムを作っています。n,xがある値の時のyの値を出力できるところまでできたのですが、n,xを変化させたときのyの出力の簡単な方法はないでしょうか?配列にn,xの値を代入すればできるのかもしれませんが、Excelのふつうの関数のようにセルを相対参照させて、フィルを使うようにはできないでしょうか?誰か知っていたら教えてください!

  • VBAのFunction内でのセル値書き換え

    Excel上でVBAを使ってある値を求めるユーザー定義関数を 自作しようとしています。 その関数の中でワークシートの中のセル値を書き換えようとしましたが そこでプログラムは停止してしまいます。 エラーメッセージなどは無く、VBAプログラムが終了します。 サブプロシージャの中でなら当然書き換えはできるのですが、 関数の中でセル値を書き換えることはできないのでしょうか? 環境はWinXP SP2, Office 2000です。 どなたか分かる方、教えていただけると幸いです。 よろしくお願いします。

  • excelマクロ subプロシージャに関して

    excelでセルの色を変えるというものをコーディングしました。 選択したセルの隣のセルの値がそれぞれ、○だったら選択したセルの色を変えるプログラムです。 引数なしのため、ユーザー定義関数として定義することができず?、subプロシージャとして定義しているので、 シート内で全ての行に対応させることができず、実行するには一行ずつ、マクロの実行をさせなければ、このプロシージャを使えず、困っています。1行ずつでは作った意味がないので。。。 作ったプロシージャが手元にないので、明日アップしたいと思いますが、質問の意味がわかるかたいましたら、お願いします。

  • Python: print fib(0) None

    「Pythonチュートリアル」というO'REILLYの本の33ページ目に、 >>> print fib(0) None を返すように書かれているのですが、実際にはエラーが返ってきます。 本当にNoneが返ってくるべきなのでしょうか? そして、Noneを返すにはどうすればいいのでしょうか? 本はPython 3.1.1を使用しているそうです。 私はPython 3.5.1を使用しています (同じVersionにしましょう、という回答はなしの方向でお願いします)。 実際の結果: In [87]: fib(3) 0 1 1 2 In [88]: fib(0) [空白です] In [89]: print fib(0) File "<ipython-input-89-1cd6a4451e49>", line 1 print fib(0) ^ SyntaxError: invalid syntax 関数fib自体は以下の通りです: In [73]: def fib(n): # フィボナッチ級数をnまで書き出す ....: """nまでのフィボナッチ級数を表示する""" ....: a, b = 0, 1 ....: while a < n: ....: print(a, end=' ') ....: a, b = b, a+b ....: print() ....: In [74]: # では、この関数を呼び出してみよう: In [75]: fib(2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 ・・・ではお願いします。