階乗のマクロを作りたいのですが、全然できません。どこを変えたらいいのか教えて下さい。ちなみに今こうなっています。
------------------------------------------------
Sub exam5()
Dim intA As Integer
Dim intB As Integer
Dim intC As Integer
intA = Application.InputBox("数値を入力してください。")
intB = (intA - 1)
intC = (intA) * (intB)
MsgBox (intC)
End Sub
Function kaijou(intA As Integer, intB As Integer) As Integer
kaijou = intA * intB
End Function
------------------------------------------------
どうかお願いします。
No.6ベストアンサー
- 回答日時:
No.4です。
> kaijou = intn * intn - 1
が惜しいですね。
この↑計算ですと、
「n かける n ひく 1」
括弧を忘れているのだとしても、
「n かける (nひく1)」
になってしまいます。
階乗の定義は、
n!=n×(n-1)!
「n かける (n-1)の階乗」
ですので…
--
もうちょっとヒントを書くと、
5!=5×4!
4!=4×3!
3!=3×2!
2!=2×1!
1!=1×0!
0!=1
と言う風に順番に計算します。
この場合はループの処理は必要なくなります。
--
Function kaijou(n As Integer) As Integer
のつもりで「int」は誤記でした。intnと読み替えて頂いてOKです。
No.5
- 回答日時:
No.2の-boya-です。
学習中ということで、丸々回答ではなくアドバイスを。
アドバイスを「'」の行に追記しましたので参考に。
Sub exam6()
Dim intn As Integer
'intAも定義した方がよいです。
intn = Application.InputBox("数値を入力してください")
intA = kaijou(intn)
MsgBox (intA)
End Sub
Function kaijou(intn As Integer) As Integer
'↑intnが大きくなった場合、返ってくる値がIntegerの範囲(-32,768 ~ 32,767)
'を超えてしまう場合があるので、もう少し大きい方がいいと思います。
If intn <> 0 Then
'↑「intnが0じゃ無かったら」の意味なので、この場合は逆です。
kaijou = 1
Else
kaijou = intn * (intn - 1)
'↑追記したように括弧が必要。
'コレでは1度しか掛け算をしていないので、繰り返す必要があります。
'先ほど書いた「Do ~ Loop」等を使って繰り返し掛け算をします。
'n! = n × (n-1) × ((n-1)-1) × (((n-1)-1)-1) ・・・ ×1
'と言うように、掛け算を1になるまで繰り返される様にします。
End If
End Function
No.4
- 回答日時:
階乗:
5!=5×4×3×2×1=120
ですね。
例題とかだと再起呼び出しが使われますね。
n!=n×(n-1)!
ただし、
0!=1(←って定義だっけ?
Function kaijou(int n As Integer) As Integer
if n<>0 then
kaijou = ~
else
kaijou = ~
endif
End Function
の書き方だとどうなるか、考えてみてください。
この回答への補足
このように考えてやってみたのですがうまくいかないです。どこが悪いんでしょうか?
------------------------------------------------
Sub exam6()
Dim intn As Integer
intn = Application.InputBox("数値を入力してください")
intA = kaijou(intn)
MsgBox (intA)
End Sub
Function kaijou(intn As Integer) As Integer
If n <> 0 Then
kaijou = 1
Else
kaijou = intn * intn - 1
End If
End Function
No.3
- 回答日時:
エクセルでやれることはエクセルでということであれば
階乗はワークシート関数を使えば手っ取り早いんですが。
re=InputBox("数字")
MsgBox (Application.WorksheetFunction.Fact(re))
まぁ2番さんのようにコードで自作する方がアルゴリズムの勉強にはもってこいかと思いますが。
No.2
- 回答日時:
階乗の計算であれば、繰り返す必要がありますね。
例えばこんな感じで、、、
Dim intA As Integer
Dim ans
ans = 1
intA = Application.InputBox("数値を入力してください。")
Do Until intA = 0
ans = ans * intA
intA = intA - 1
Loop
MsgBox ans
あくまで、InputBoxで入力される値が正の整数であると
いう前提で書いてます。それ以外であるかどうかの
チェックなどは省いてます。
あと、階乗計算の結果がIntegerの範囲を超えてしまう
場合があることも考慮した方がいいと思います。
以上、簡単ですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
VBAで関数をつくる
Visual Basic(VBA)
-
VB.NETで階乗を求めるプログラムを作成する
Visual Basic(VBA)
-
0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題
Visual Basic(VBA)
-
-
4
VBAで特定の自然数の和と階乗を作りたいです。 自然数は1〜10までの和、階乗は10の階乗です。
Excel(エクセル)
-
5
for文を使った累乗の計算方法について
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の課題で、1年の秒数を計...
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
Excel VBAにてFFT
-
EXCELなどで「返す」という表現
-
加速度から変位の変換について
-
CとFORTRANの計算速度はどちら...
-
CRC8を教えてください
-
2進数の乗算をc言語で計算した...
-
Java 電卓の連続計算
-
matlab計算での進捗状況を知りたい
-
matlabで計算終了
-
C言語のプログラミングの問題で...
-
等高線を計算したい
-
FORTRANで>>
-
バッチファイルでウインドウを...
-
C# 計算処理中に実行中ウィン...
-
太陽の位置計算のプログラムを...
-
四則演算プログラム(入力式の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報