【QuickTips 14】Googleスプレッドシートで分数を扱う方法(Excelの場合も)
シンプルでちょっと便利な Quick Tips。マガジンにまとめていきます。
約6000文字と長めのTipsに・・・。
1.Excelの分数表示をGoogleスプレッドシートでもやりたい
ExcelやGoogleスプレッドシートでは「分数表示が出来ない」 と思ってませんか?
Excelは分数表示が簡単になったんで「出来ない」と思ってる人は減りましたが、Googleスプレッドシートでは Excelと同じ方法が使えない為、いまだに「分数表示が出来ない」と勘違いしている人も多い印象。
Googleスプレッドシートでも分数表示は可能です!
まずは Excelの分数表示を理解した上で、Googleスプレッドシートの分数表示について学んでいきましょう。
1-1. Excelでは分数表示が簡単に出来る。でも・・・

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つを満たすことで 分数表示が可能となります。
セルの表示形式 カスタム数値形式で # #/### を設定
頭に = を付けて数式とする
2-1. カスタム数値形式で 分数表示を設定する

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

表示形式 > 数字 > カスタム数値形式
と進み
🎯帯分数( 1 1/3 と表示させたい)の場合

# #/###
🎯仮分数( 4/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. 分数同士の足し算や引き算は通分して計算される

分数同士の足し算、引き算は自動で通分して計算してくれます。
$$
\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つの出来ないことが QUERY関数で突破できます。
使用するのは Excel、Googleスプレッドシートにおいて、唯一無二と言える数式で表示形式を制御できる QUERY関数の format句です。
4-1. 計算結果を約分せずに分数表示させる方法

A1セルの数値をB1セルの数値で割った結果を C1に
分数として表示させたい
でも約分はして欲しくない
かつ数値として扱いたい
こんな時は QUERY関数で
=QUERY(A1/B1,"format Col1 '#/"&B1&"'")
このような式を組むことで実現できます。
※C1セルの表示形式は「自動」としておく
まず前提として、通常の数式や表示形式を使った 約分しない分数表示には
数式で文字列にする
分母の数値を表示形式で固定する
この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'")))))

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ではスピらない式をスピらせることが出来ます。
いいなと思ったら応援しよう!
チップ大歓迎です。やる気がアップしますw