見出し画像

【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÷30.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/40ではなく 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. 分数同士の足し算や引き算は通分して計算される

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

$$
\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関数を実行する MAPBYROWを使った式とする必要があります。



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 チップ大歓迎です。やる気がアップしますw