![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
階乗については、
Function Fact(n) as long
Fact = 1
for i = 1 to n
Fact = Fact * i
next i
End Function
で最低限のものは実現できます。 最低限という意味は、エラーが起きたときの対応ができていないということです。
例えば、負の数を引き渡したときは、1が返されます。
また、171以上の数を引き渡すと、オーバーフローしますし、
longの定義上正確に計算できるのは、17までだと思います。
組み合わせについても、
Function Combi(n,r) as long
Combi = Fact(n)/(Fact(r)*Fact(n-r))
End Function
で最低限のものは作れますが、やはりFactの制限に引っかかります。
factというファンクションを使わなければ、
ループを使い
n(n-1)(n-2)(n-3)・・・(n-r+1)/r!
を計算することによって、多少は上限が増えますが、どの時点で正確でなくなるのか、どの時点でオーバーフローするのかなどを検証しておく必要はあります。
それよりも完成度の高いものを目指す場合は、数自体の構造体を自分で作り、それらを演算させるプログラムを組まなくてはいけません。演算する速度は遅くなりますが、VBAで作れないわけではありません。
何にしても、計算の上限値はどこかに設定しておかなくてはいけませんし、上限を越した際のエラー処理の方法を考えておく必要があります。
No.2
- 回答日時:
順列。
組み合わせともに公式に、階乗が現れてきます。階乗は
Sub test01()
n = 1
For i = 1 To 17
n = n * i
Cells(i, "A") = n
Next i
End Sub
のようにすれば計算されますが、エクセルの画面のセルに表示は上記ぐらいが限度です。
ですから用途については、非常に限られています。エクセルは不向きでしょう。
これ以上を考えるなら、数学的アルゴリズムの考察が難しく、この質問振りからでは、そちらの知識のほうが追いつかないのでは。
ーー
質問が漠然としすぎ。
多桁、近似の計算のアルゴリズムなどに習熟しているか
まず後者の習得でしょう。
私は知らないが、理系の研究などでは、既成の専門ソフトを使うのでは。
素人が安易に作ると危ない。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?5a7ff87)
No.1
- 回答日時:
まず大事なのは、階乗・順列・組合せの計算を具体的に記述することです。
それが出来れば、後はその考え方をコードにするだけです。
例:(あくまでも一例)
Public Sub kaijo()
Dim i As Integer
Dim j As Long
j = 1
For i = Cells(1, 1).Value To 1 Step -1
j = j * i
Next i
Cells(1, 2).Value = j
End Sub
これで、A1に入っている数字の階乗の計算結果をB1に表示できます。
見本にもなっていませんが、こういう感じで作っていけばいいかと…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) エクセルVBA VLOOKUPを使ってのカウント作業 2 2023/02/19 09:03
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- C言語・C++・C# c言語 1 2022/11/09 13:05
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
階乗のマクロ
Visual Basic(VBA)
-
0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題
Visual Basic(VBA)
-
VB.NETで階乗を求めるプログラムを作成する
Visual Basic(VBA)
-
-
4
VBAで特定の自然数の和と階乗を作りたいです。 自然数は1〜10までの和、階乗は10の階乗です。
Excel(エクセル)
-
5
VBAの天才来てください
C言語・C++・C#
-
6
for文を使った累乗の計算方法について
Java
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
VBAで関数をつくる
-
0xf0=256?
-
matlab計算での進捗状況を知りたい
-
Perlで時間の計算
-
PHPで四則演算以外の微分、積分...
-
傾いた四角形内の範囲の条件式
-
文章中の数値を自動で足すサー...
-
変化させるセルが変化しない
-
C# 計算処理中に実行中ウィン...
-
MATLABの利点と欠点
-
バッチファイルでウインドウを...
-
ExcelのVBAで複素数は扱えない...
-
VBでReplace
-
VBAでの勤務時間計算
-
Perlでのルートの計算
-
VBAプログラミングです 現在、...
-
骨折リスク評価のFRAXについて...
-
スレッド処理からダイアログを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
mod でうまく
-
めちゃきれい
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
60進数の四則計算
-
プログラムの質問
-
VBでReplace
-
数値計算の高速化 (cos, sin, exp)
-
C言語についてです。 再帰を使...
-
Javaを使った行列計算
-
C言語のプログラミングの問題で...
-
エクセルで特定のセルのみを任...
-
matlab計算での進捗状況を知りたい
-
CとFORTRANの計算速度はどちら...
-
matlabで計算終了
おすすめ情報