![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在、大学の講義でプログラミングを学んでいます。
以下の問題が全く歯が立たないため困っています。
分かる方がいらしたら、どうか教えてください。お願いします。
次の数列はフィボナッチ数列と呼ばれる。
1,1,2,3,5,8,13,21・・・
この数列は、a(1)=1、a(2)=1、a(n)=a(n-1)+a(n-2) (n>=3)で定義される。
(1)
B2セルに3以上の整数をnの値として入力すると、C2セルにa(n)の値を出力するプログラムを作成せよ。
(2)
a(n)の値が初めて1000を超えるnの値をB2セルに、そのときにa(n)の値をC2セルに入力するプログラムを作成せよ。
以上が問題です。
ちなみに、
私はVBAはおろか、Excelすら大学生になるまでほとんど使ってきませんでした。
VBAで学んだことは「IFを用いた条件構文」、「繰り返し構文 For ~Next」、
「繰り返し構文 Do~Loop」程度です。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.2です。
失礼しました。(2)でnの値をB2セルに入れるの忘れてました。
Sub ex02()
Dim n As Long
n = 3
Do Until (((1 + Sqr(5)) / 2) ^ n - ((1 - Sqr(5)) / 2) ^ n) / Sqr(5) > 1000
n = n + 1
Loop
Cells(2, 2).Value = n
Cells(2, 3).Value = (((1 + Sqr(5)) / 2) ^ n - ((1 - Sqr(5)) / 2) ^ n) / Sqr(5)
End Sub
No.2
- 回答日時:
No.1さんのが正解です。
というか題意に沿ったコードです。
以下、反則ワザ(?)の解答例。
Sub ex01()
Cells(2, 3).Value = (((1 + Sqr(5)) / 2) ^ Cells(2, 2).Value - ((1 - Sqr(5)) / 2) ^ Cells(2, 2).Value) / Sqr(5)
End Sub
Sub ex02()
Dim n As Long
n = 3
Do Until (((1 + Sqr(5)) / 2) ^ n - ((1 - Sqr(5)) / 2) ^ n) / Sqr(5) > 1000
n = n + 1
Loop
Cells(2, 3).Value = (((1 + Sqr(5)) / 2) ^ n - ((1 - Sqr(5)) / 2) ^ n) / Sqr(5)
End Sub
参考ページ
http://mathtrain.jp/fibonacci
No.1
- 回答日時:
'標準的な解答
再帰型と非再帰型、両方で作りました。
Sub Question1()
Dim x As Long, y As Long, i As Long
Dim t As Long
Dim n As Long
If Range("B2").Value = "" Then MsgBox "B2に数値がありません。", vbExclamation: Exit Sub
If Not IsNumeric(Range("B2").Value) And 3 < Range("B2").Value Then
MsgBox "3以上の数値を入れてください", vbExclamation
Exit Sub
End If
n = Range("B2").Value
x = 1: y = 1
For i = 3 To n
t = y: y = x + y
x = t
Next i
Range("C2").Value = y
End Sub
Sub Question2()
Dim n As Long
Dim ret As Long
n = 3
Do
n = n + 1
ret = fibo(n)
Loop Until ret > 1000
Range("B2").Value = n
Range("C2").Value = ret
End Sub
Private Function fibo(n As Variant)
If n = 1 Or n = 2 Then
fibo = 1
Else
fibo = fibo(n - 1) + fibo(n - 2)
End If
End Function
'おまけ:(上記のコードとは競合する可能性がありますから、シートは変えてください。)
'シートモジュール(シートタブを右クリックして、コードの表示を所をクリックすると、開いたペインに貼り付けます)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Long, y As Long
Dim i As Long, t As Long
If Target.Address(0, 0) <> "B2" Then Exit Sub 'B2セル以外ダメ
If Target.Count > 1 Then Exit Sub '貼り付けはダメ
If IsNumeric(Target.Value) Then
If Int(Target.Value) <> Target.Value Or Target.Value < 3 Then
MsgBox "3以上の整数を入れてください。", vbExclamation
Exit Sub
End If
Else
MsgBox "3以上の整数の数字を入れてください。", vbExclamation
Exit Sub
End If
'ここから以下が計算
x = 1: y = 1
For i = 3 To Target.Value
t = y: y = x + y
x = t
Next i
Application.EnableEvents = False
Range("C2").Value = y
Application.EnableEvents = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 範囲内で最大値を見つけ、その隣のセルの値を返す 2 2022/03/23 19:34
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
このQ&Aを見た人はこんなQ&Aも見ています
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
検便についてです。 便は取れた...
-
風俗店へ行く前のご飯
-
精子が黄色?
-
これって喉仏ですか? 私は女性...
-
エクセル指定した範囲からラン...
-
甲状腺が腫れているが血液検査...
-
舌の裏の痛みのないプツプツの...
-
中出しをするとお腹が痛い・・・。
-
小数点以下を繰り上げたものを...
-
【Excelで「正弦波」のグラフを...
-
精子に血が・・・
-
エクセルのラベルの値(文字列...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
アクエリアスが苦く感じる
-
値が入っているときだけ計算結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
2つの数値のうち、数値が小さい...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
おすすめ情報