VBA 二重階乗を計算するユーザー定義関数

 二重階乗を計算するファンクションマクロ (DFCT) を作っておきました。
 エクセル関数にも FACTDOUBLE という関数が用意されていますが、DFCT は不正な数値は全てエラーとして処理します。
 

二重階乗の定義

 二重階乗は

   0!! = (-1)!! = 1
   2m!! = 2m (2m - 1)・・・ 4・2
   (2m + 1)!! = (2m + 1)(2m - 1) ・・・ 3・1

によって定義される演算です。
 

二重階乗を計算するマクロ

 基本的な構造は別記事にある階乗計算マクロ (FCT) と同じですが、n の偶奇によって場合分けしなくてはならず、かなり複雑なマクロになっていました。コードを書いた本人ですら時間が経つと意味を忘れてしまいそうなので、メモしておくことにします。

 Function DFCT(n As Variant) As Variant

 Dim f As Long, k As Long

 ' n = 0 あるいは n = -1 のときは二重階乗は 1 です
 If n = 0 Or n = -1 Then
 DFCT = 1

 ' n が正整数であることを確認します
 ElseIf n = Int(n) And n > 0 Then

 ' n が偶数のとき
  If n Mod 2 = 0 Then
   f = 1

   For k = 2 To n Step 2
    f = f * k
   Next k

   DFCT = f

 ' n が奇数のとき
  Else
   f = 1
   For k = 1 To n Step 2
    f = f * k
   Next k

   DFCT = f
  End If '偶奇による条件分枝はここで終わり

 Else

  DFCT = CVErr(xlErrNum)

 End If

 End Function

 ワークシート上でセルに

=dfct(7)

と入力すると 7 の二重階乗 105 が返るはずです。

条件が入れ子のなっています

 Ifによる条件分枝が入れ子になっているので少し読みにくいかもしれません。
 Select Case を使ったほうがよかったかな。「もっと良い書き方があるよ!」というご意見があれば、ぜひコメントよろしくです。

 ≫ 数学マクロコレクションのトップページへ

スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください