メインコンテンツへスキップ
見出し画像

【QuickTips 14】Googleスプレッドシートで分数を扱う方法(Excelの場合も)

    シンプルでちょっと便利な Quick Tips。マガジンにまとめていきます。

    約6000文字と長めのTipsに・・・。



    1.Excelの分数表示をGoogleスプレッドシートでもやりたい

    ExcelやGoogleスプレッドシートでは「分数表示が出来ない」 と思ってませんか?

    Excelは分数表示が簡単になったんで「出来ない」と思ってる人は減りましたが、Googleスプレッドシートでは Excelと同じ方法が使えない為、いまだに「分数表示が出来ない」と勘違いしている人も多い印象。

    Googleスプレッドシートでも分数表示は可能です!

    まずは Excelの分数表示を理解した上で、Googleスプレッドシートの分数表示について学んでいきましょう。


    1-1. Excelでは分数表示が簡単に出来る。でも・・・

    画像
    画像はExcel2019のもの

    Excelには 表示形式に「分数」が存在ます。

    だから、中身は 1÷3 で 0.33333… のものを 1/3 と表示させることが出来ます。

    さらにExcelの場合は 「0 」(ゼロとスペース)を入力してから / 区切りで分数を入力することで、分数表示に切り替えるテクニックもあります。

    画像

    👆こちらでは表示形式が「標準」の時、直接 1/3 と入力した A1セルでは 日付と見なされてしまい 1月3日(中身は 2026/1/3)となってしまいますが、

    0 1/3 と入力した A2セルでは 分数 1/3(中身は 0.33333…)として表示されているのが分かりますね。

    この2つのテクニックは便利なんですが、初心者殺しな仕様でもあって、

    画像

    これらの方法で分数表示に設定したセルは

    • 分母が1桁の分数にしか対応できない

    • 仮分数ではなく帯分数になる

    仕様となります。

    仮分数とか帯分数って言葉を忘れちゃってる人は 👇


    たとえば =4/3 を入力すると 1 1/3(1と3分の1)という表示になりますし

    画像


    =13/251 のような分母が2桁以上の分数は、 0と表示されてしまいます。

    画像


    また、=8/2 のように 割り切れる分数(式)を入れた場合は

    画像

    このように結果の4の後ろの本来分数が表示される箇所に謎の空白が出来てしまい、右寄せになりません。

    仕組みを理解せず分数表示テクニックを使ってしまうと、これらのケースに対応できなくなります。(AIに聞けば教えてくれるとは思いますが)



    1-2. Excelで本気で分数表示を使うなら ユーザー定義

    これらは セルの表示形式で「ユーザー定義」が使えれば解決できます。

    画像

    この表示形式の中にも「分数」はあって、ある程度制御は出来るんですが、

    画像

    分数は ユーザー定義で # を使って自分で記述した方がよいです!

    たとえば帯分数で 分母が3桁まで増える可能性があるなら

    # #/### とします。

    画像

    これで割り切れた(整数)の時に 余計な後ろの空白が出来なくなりますし、3桁分母にも対応できます。

    ※分母側の#の数は 分母の数値の桁数に応じて変える必要アリ。ある程度多めでOK

    用意されている「分数」の表示形式で分母3桁表示を選択すると

    画像

    実は中身は ?を使った # ???/??? という表示形式になっている為

    画像
    画像

    このように 分母が一桁だったり、分子が一桁になる帯分数だったり、整数だったりすると、?の分だけ空白が空いてしまいます。

    これは #と? の仕様の違いによるものです。

    画像


    同じく 仮分数として表示させたい場合は、ユーザー定義から #/### のように頭の 「# 」(#とスペース)を外して分数表示を設定します。

    画像

    ただし仮分数表示にすると、割り切れる場合の整数の表示が出来なくなります。

    画像

    0/4 は 0ではなく 0/1 と表示
    24/4
    は 6 ではなく 6/1 と表示

    と割り切れた場合に分母に必ず1が残ります。

    これを回避する為には 条件付き書式で割り切れない時だけで 表示形式を 仮分数表示にするといった工夫が必要です。(ここでは説明は割愛)

    基本的な分数表示の設定は、無料のWeb版Excelでも利用可能。

    画像

    ただし無料Web版Excelでは、ユーザー定義を新たに作成することが出来ない為、分数表示は用意されているものから選ぶしかありません。

    これが Excelの場合の分数表示です。



    1-3. Googleスプレッドシートには「分数」という表示形式がない

    画像

    Excelでは簡単に出来た分数表示ですが、Googleスプレッドシートには「分数」という表示形式の選択肢がありません。

    さらに Excelの時に出来た 0 1/3(0とスペースを入れてから分数入力)とするテクニックも

    画像

    Googleスプレッドシートでは使えず、0 1/3 と入力したままの単なる文字列として扱われます。

    これらのExcelで簡単に出来た分数表示テクが通用しない為、「Googleスプレッドシートは 分数表示が出来なくてクソだな」と思ってしまう人が多いんじゃないでしょうか?

    しかしExcelの分数表示の説明で触れた 表示形式の ユーザー定義(# #/### や #/###)まで理解していれば、これをGoogleスプレッドシートに応用することができます!



    2. Googleスプレッドシートで分数表示する方法

    Googleスプレッドシートでは、以下の2つを満たすことで 分数表示が可能となります。

    1. セルの表示形式 カスタム数値形式で # #/### を設定

    2. 頭に = を付けて数式とする



    2-1. カスタム数値形式で 分数表示を設定する

    画像

    Googleスプレッドシートでは セルの表示形式で カスタム数値形式を利用して、分数表示を設定します。

    まず分数で表示させたいセルを選択した上で、

    画像

    表示形式 > 数字 > カスタム数値形式

    と進み


    🎯帯分数( 1 1/3 と表示させたい)の場合

    画像
    ※分母の #の数は 扱う分数により増やす必要あり

    # #/###

    ※分母3桁まで対応

    🎯仮分数( 4/3 と表示させたい)の場合

    画像
    ※分母の #の数は 扱う分数により増やす必要あり

    #/###

    ※分母3桁まで対応

    と入力して「適用」とします。

    たまに ?/??? と?を使った記述や ###/### のように分子側も #を複数記述する方法を紹介しているサイトがありますが、間違いではないものの ? を使うと無駄なスペースが入ってしまいますし、 分子側の #は1つで問題ありません。



    2-2.頭に = を付けて数式とする 

    画像

    ただし カスタム数値形式を使って分数表示を設定しても、Googleスプレッドシートでは セルに直接分数を入力することが出来ません。

    1/3 と入力すると 日付と見なされ 中身は 2026/1/3となってしまいますし、 13/25 と 日付と見なせない分数を入力した場合は 文字列として扱われてしまいます。

    Googleスプレッドシートでの分数表示は 先頭に =を付けて 数式として扱う必要があります。

    つまり

    画像

    3分の1 と分数表示させたい場合は、

    セルをカスタム数値形式で分数用の表示に設定した上で、
    =1/3 と入力する

    ってことです。

    Excelと勝手が違うので戸惑うかもしれませんが、Googleスプレッドシートでの分数表示が理解できましたね!



    3. Googleスプレッドシートの分数の挙動

    Googleスプレッドシートで分数表示させた数値の挙動も理解しておきましょう。

    基本的にはExcelの場合も同様です。



    3-1.自動で約分される

    画像

    分数表示は 自動で約分されます。

    =2/4 とした場合は 1/2
    =6/8 とした場合は 3/4

    と表示されます。

    基本的にはこの自動約分を止める方法は無いんですが、これを突破する裏技を最後に紹介します。



    3-2. 分数同士の足し算や引き算は通分して計算される

    画像

    分数同士の足し算、引き算は自動で通分して計算してくれます。

    12+ 13= 56\bf\frac{1}{2} + \frac{1}{3} = \frac{5}{6}

    👆 これが Googleスプレッドシート上で実現出来るってことです。

    画像

    2桁分数くらいなら問題なく計算できます。

    画像

    分数同士の引き算で結果がマイナスになる場合も大丈夫ですね。



    3-3. 分母の桁数が増えると約分や通分した分数が正しく表示されない

    画像

    自動で約分や計算のおいて通分してくれると書きましたが、分母の桁数が増えてくると 正しく約分や通分がされず、誤った分数表記になります。

    この点には注意です。

    例えば 👆の例だと 17/123456 と分母が6桁の時点では 問題なく分数表示されていますが、

    17/1234567 が 1/72622 
    2/1234567 が 1/617283 
    5/1234567 が 1/246913 

    と分母が7桁になると 誤った分数表示になっています。

    ただ、分子が1の場合には 1/1234567 と正しく表示されるので、約分をしようとした結果が不正確になっているようです。

    これは表計算の宿命と言える 浮動小数点演算の影響でしょう。

    若干ですが、Excelの方が対応できる分母桁数が大きいようです。

    画像

    👆Excelだと分母7桁は正しく分数表示出てきていますが、分母8桁とした下のセルでは 誤った約分がされています。

    分母の桁数が大きい分数は扱わない方がよいと考えましょう。



    3-4. 仮分数では分母 1 が残ってしまう

    画像

    カスタム数値形式を仮分数 #/### とした場合、計算結果が割り切れた場合でも整数にはならず 分母の1が残ります。

    これはExcelと一緒ですね。

    画像

    仮分数表示とした場合は、自動で整数表示にはなりません。

    が、これも裏技で突破できます。

    これを最後に紹介しましょう。



    4.Googleスプレッドシートの分数表示の「出来ない」をQUERY関数で突破する

    ここまでの 1~3は 他のサイトやAIでも知ることができる情報ですが、ここからが mirのnoteだからこそ知りえるネタ(QuickTips)です!


    実は分数表示における

    1. 約分せずに分数表示させる(かつ数値とする)

    2. 仮分数で分母が1となった時は自動で整数表示にする

    この2つの出来ないことが QUERY関数で突破できます。

    使用するのは Excel、Googleスプレッドシートにおいて、唯一無二と言える数式で表示形式を制御できる QUERY関数の format句です。



    4-1. 計算結果を約分せずに分数表示させる方法

    画像

    A1セルの数値をB1セルの数値で割った結果を C1に

    分数として表示させたい
    でも約分はして欲しくない
    かつ数値として扱いたい

    こんな時は QUERY関数で

    =QUERY(A1/B1,"format Col1 '#/"&B1&"'")

    このような式を組むことで実現できます。
    ※C1セルの表示形式は「自動」としておく


    まず前提として、通常の数式や表示形式を使った 約分しない分数表示には

    1. 数式で文字列にする

    2. 分母の数値を表示形式で固定する

    この2つの方法があります。

    ただし1の方法は、見た目が分数になっているだけの ただの文字列なので、

    画像

    数値として計算に使うことができません。

    画像


    2の方法は数値として扱えるのですが、カスタム数値形式で分母を固定しているので、

    画像

    分母となるセルの数値が変わってしまうと、正しい分数表示になりません。


    画像

    👆 割る数を 500としても、表示形式で分母が550に固定されている為、15/500 とはならず、分子は 分母の500を550に揃えた(1.1倍した) 15×1.1= 16.5 の四捨五入 した整数表示 17 となってしまうのがわかりますね。

    表示形式のカスタム数式は、セル参照を使うことが出来ません。

    しかしQUERY関数の format句なら、表示形式にセル参照を利用することが可能です。

    画像

    "format Col1 '#/"&B1&"'"

    とB1セルを クエリ文に組み込むことで、分母部分の表示形式を可変としています。

    これによって

    画像

    B1セルの分母を500とした場合でも、自動で 15/500 と約分しない分数表示を正しく連動させることが出来るわけです。

    もちろん、C1セルの計算結果は数値になっているので

    画像

    計算に利用したり、表示形式を変えて約分したり、パーセント表示にすることが可能です。

    これを応用すると

    画像

    =BYROW(A2:B6,LAMBDA(r,QUERY(INDEX(r,,1)/INDEX(r,,2),
    "format Col1 '#/"&IF(E1,"###",INDEX(r,,2))&"'")))

    約分スイッチ機能みたいなものを作成できます。小学校の分数クイズなんかに使えそうですね。



    4-2. 計算結果を仮分数表示にしつつ、約分して分母が1になった時は整数表示に切り替える

    画像

    Excelだと条件付き書式で表示形式を切り替えるケースと書きましたが、Googleスプレッドシートは条件付き書式では表示形式の切り替えができない為、こちらもQUERY関数のformat句で対応します。

    =LET(x,A2+B2,QUERY(x,"format Col1 "&IF(MOD(x,1),"'#/###'","'0'")))

    約分して整数になる(分母が1になる)ケースは、つまりは 1で割り切れるってことなので、IFの条件に MOD(x,1) を使って

    0の時(整数の時)・・・FALSE
    と
    それ以外の時(小数の時つまり分数表示させる時)・・・TRUE

    で分岐させます。

    TRUEの時は '#/###' FALSE時の時は  '0' と表示形式を指定すればOK。

    ※ダブルクォートで括った中でさらにシングルクォートで括っています

    1つの式でまとめたい場合はMAP関数を使うと良いでしょう。

    =LET(x,ARRAYFORMULA(A2:A5+B2:B5),MAP(x,LAMBDA(v,QUERY(v,"format Col1 "&IF(MOD(v,1),"'#/###'","'0'")))))

    ARRAYFORMULAを使わずにBYROWで式を作ってもOK
    画像

    4-1のケースもそうですが、QUERY関数のformat句は列単位で固定です。ARRAYFORMULAとQUERY関数を組み合わせても希望の動作にはなりません。

    セルの内容に応じて表示形式を分岐させる為には、セル単位でQUERY関数を実行する MAPやBYROWを使った式とする必要があります。



    4-3. 応用!プルダウンで小数、仮分数(約分あり・なし)、帯分数を切り替え

    上記の式を応用すれば、プルダウンで 表示形式を自由自在に切り替えることも可能です。

    画像
    =BYROW(A2:B6,LAMBDA(r,
      LET(x,INDEX(r,,1)/INDEX(r,,2),
        QUERY(x,IF(E1="",,
          "format Col1 '"&
          SWITCH(E1,
          "小数(第2位)","0.00",
          "分数(約分なし)","#/"&INDEX(r,,2),
          "分数(約分あり)",IF(MOD(x,1),"#/###","0"),
          "帯分数","# #/###")&"'")
        )
      )
    ))


    Googleスプレッドシートでの分数表示、分数の計算はこれでバッチリですね!



    今回のQucik Tipsの関連 note

    今回の関連noteです。

    裏技で利用したQUERY関数の超応用例は長編マガジンにまとめています。

    一つの式で処理する場合のMAP関数やBYROW関数はLAMBDAヘルパー関数と呼ばれるもので、ARRAYFORMULAではスピらない式をスピらせることが出来ます。


     
     
     

    mir

     
     
    元Excel職人・VBA使いから、Googleスプレッドシート職人・GAS使いにジョブチェンジ。謎解き感覚で お題(課題)を解決していくような記事を書こうかなと。その他、AIやらGeminiやらGoogleWorkspaceネタ全般

    あなたへのおすすめ