18日目 分数の足し算【30日間1日1本マクロ生活】

30日間1日1本マクロ生活、18日目です。

マクロを書く準備は、0日目に記事を書きました。

分数の足し算

昨日に続いて分数です。

分数の足し算って、小学生にはハードルが高いと思うんです。マジで。

分母を揃える、いわゆる「通分」をして、分子を足し算して、最後に約分。

そりゃ、小学生では理解できない子もいますよ。だって、高度だもん。

通分

で、通分ですが、おそらく小学校では

小学校の先生
分母を揃えるときは、「最小公倍数」で揃えるんですよ~。

って習ったんじゃないかと思うんです。

でもね。分数の定義、ルールの中には「最小公倍数で通分しなければならない」とは一言も書かれてないんですよ。

分母が揃いさえすれば、どんなに大きな数で通分しても全く問題ないんです。

分数の和の定義は
\dfrac{a}b + \dfrac{c}d = \dfrac{ad+bc}{bd}
となっています。通分する分母は、分母同士の積です。

今日はこれでコードを書きます。

さっそくコードを

まずは昨日のgcd関数を。


Function gcd(m, n)
    If m >= n Then
        a = m
        b = n
    Else
        a = n
        b = m
    End If
    
    Do Until b < 1
        r = a Mod b
        a = b
        b = r
        
    Loop
    gcd = a
End Function

そして、分数の足し算をするマクロです。


Sub bunwa()
    shia = Cells(1, 1)
    boa = Cells(2, 1)
    shib = Cells(1, 3)
    bob = Cells(2, 3)
    
    shi = shia * bob + shib * boa
    bo = boa * bob
    
    yaku = gcd(shi, bo)
    
    Cells(4, 1) = shi / yaku
    Cells(5, 1) = bo / yaku
End Sub

解説します。

これも、やっていることは単純です。

変数shiaには、セルA1に入っている数を格納します。

変数boaには、セルA2に入っている数を格納します。

変数shibには、セルC1に入っている数を格納します。

変数bobには、セルC2に入っている数を格納します。

それぞれ、分子、分母という設定です。

上の約束通り、分度同士の積を変数boに、分母と分子のたすき掛けの和を変数shiに代入します。

あとは、昨日の約分のマクロと同じ仕組みで約分します。

実行結果

マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押して実行します。

はい、確かに足し算がなされました。

分数の足し算は、小学生には複雑な計算です。

でも、機械に教えればできるんです。人間様ができないはずがない。

機械的な操作で分数の足し算はできるんです。

Excelは便利

悔しいですが、Excelは便利です。

Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。

マクロを書くようになると、Excelからは離れられないですね。

30日間、頑張ります。