さて、今回は、最大公約数を求める関数をExcelVBAでプログラミングしてみましょう。
2つの整数の最大公約数とは、両方の数をあまりなく割り切れる数のうち一番大きいもののことです。
12と18は両方とも2で割れます。3でも割れます。6でも割れます。
一番大きいものは6なので最大公約数は6となります。
最大公約数を求める方法として有名なものは、「ユークリッドの互除法」です。
フリー百科事典『ウィキペディア(Wikipedia)』には、「明示的に記述された最古のアルゴリズムとしても知られ、
紀元前300年頃に記されたユークリッドの『原論』第 7 巻、命題 1 から 3 がそれである。」とあります。
頭のいい人は、はるか昔からいたんですよね。ほんとうにすごい。
さて、どんな方法なのかですが、「2 つの自然数(または整式) a, b (a ≧ b) について、a の b による剰余を r とすると、
a と b との最大公約数は b と r との最大公約数に等しいという性質が成り立つ。この性質を利用して、 b を r で割った剰余 除数 r を
その剰余で割った剰余、と剰余を求める計算を逐次繰り返すと、剰余が 0 になった時の除数が a と b との最大公約数となる。」とのことです。
詳しくは、『ウィキペディア(Wikipedia)』をご覧ください。
さっそく、コードを書いてみましょう。
エクセルを起動して、Alt + F11 で、Visual Basic Editorを起動します。
挿入メニューの「標準モジュール」をクリックすると、コードを入力することができます。
以下のようにコードを記述してください。
画像も載せておきます。

Functionで始まるプロシージャは、ユーザー定義関数となります。
関数名は、Kouyakusu です。冴えない名前ですみません。
コードのポイントは、ユークリッドの互除法を再帰呼び出しで実現しているところです。
もちろん、繰り返し処理でも実現できますが、このほうが、シンプルです。
また、ユークリッドの互除法では、大きい数を小さい数で割るところから始まりますが、別に逆でもかまいません。
1回繰り返し処理が増えるだけのことです。
それでは、早速実行してみましょう。
エクセルに切り替えてください。
以下のような設定を前提として進めます。
つまり、B2とB3に、任意の自然数を入力します。数の大小は気にしなくて結構です。
D2に、先ほど作ったユーザー定義関数を入力してください。引数は、B2とB3になります。

すると、即座に答えが表示されます。これが関数のすごいところですね。
B2、B3の数字を変更した途端、D2に、自動的に最大公約数が表示されますよ。

ユークリッド万歳!!
だい
2つの整数の最大公約数とは、両方の数をあまりなく割り切れる数のうち一番大きいもののことです。
12と18は両方とも2で割れます。3でも割れます。6でも割れます。
一番大きいものは6なので最大公約数は6となります。
最大公約数を求める方法として有名なものは、「ユークリッドの互除法」です。
フリー百科事典『ウィキペディア(Wikipedia)』には、「明示的に記述された最古のアルゴリズムとしても知られ、
紀元前300年頃に記されたユークリッドの『原論』第 7 巻、命題 1 から 3 がそれである。」とあります。
頭のいい人は、はるか昔からいたんですよね。ほんとうにすごい。
さて、どんな方法なのかですが、「2 つの自然数(または整式) a, b (a ≧ b) について、a の b による剰余を r とすると、
a と b との最大公約数は b と r との最大公約数に等しいという性質が成り立つ。この性質を利用して、 b を r で割った剰余 除数 r を
その剰余で割った剰余、と剰余を求める計算を逐次繰り返すと、剰余が 0 になった時の除数が a と b との最大公約数となる。」とのことです。
詳しくは、『ウィキペディア(Wikipedia)』をご覧ください。
さっそく、コードを書いてみましょう。
エクセルを起動して、Alt + F11 で、Visual Basic Editorを起動します。
挿入メニューの「標準モジュール」をクリックすると、コードを入力することができます。
以下のようにコードを記述してください。
Function Kouyakusu(x As Integer, y As Integer) As Integer If x Mod y = 0 Then Kouyakusu = y Exit Function End If Kouyakusu = Kouyakusu(y, x Mod y) End Function
画像も載せておきます。

Functionで始まるプロシージャは、ユーザー定義関数となります。
関数名は、Kouyakusu です。冴えない名前ですみません。
コードのポイントは、ユークリッドの互除法を再帰呼び出しで実現しているところです。
もちろん、繰り返し処理でも実現できますが、このほうが、シンプルです。
また、ユークリッドの互除法では、大きい数を小さい数で割るところから始まりますが、別に逆でもかまいません。
1回繰り返し処理が増えるだけのことです。
それでは、早速実行してみましょう。
エクセルに切り替えてください。
以下のような設定を前提として進めます。
つまり、B2とB3に、任意の自然数を入力します。数の大小は気にしなくて結構です。
D2に、先ほど作ったユーザー定義関数を入力してください。引数は、B2とB3になります。

すると、即座に答えが表示されます。これが関数のすごいところですね。
B2、B3の数字を変更した途端、D2に、自動的に最大公約数が表示されますよ。

ユークリッド万歳!!
だい

※コメント投稿者のブログIDはブログ作成者のみに通知されます