スプレッドシートで最大公約数を出す|GCD関数と比率の約分式

スポンサーリンク

「1920:1080って、結局何対何なんだろう?」

スプレッドシートで画面サイズや在庫数を扱っていると、比率をシンプルな形に直したい場面がありますよね。手計算で共通の約数を探すのは手間がかかり、数値が変わるたびにやり直しです。

そこで使うのがGCD関数。最大公約数を返す関数なので、割り算と組み合わせれば比率の約分が1つの式で済みます。

この記事では、まずコピペで使える約分式を紹介します。続いて、負数・小数・文字列を入れたときの挙動もスプレッドシートでの結果つきで解説。複数行へ一括で適用するときの落とし穴も取り上げます。

結論:スプレッドシートのGCD関数で比率を約分するコピペ式

完成式と結果(1920:1080 → 16:9)

先に答えから。A列に横、B列に縦の数値が入っているなら、C2に次の式を入れます。

=A2/GCD(A2,B2)&":"&B2/GCD(A2,B2)

GCD(A2,B2)で最大公約数を出し、横と縦をそれぞれ割ってから「:」でつなぐ仕組みです。2行目に入れて下へコピーすれば、各行の比率が並びます。

A(横)B(縦)GCD(A,B)C(約分後の比率)
1920108012016:9
12807208016:9
8006002004:3

1920と1080の最大公約数は120。それぞれを120で割ると16と9になり、「16:9」と表示されるわけです。

GCD関数の構文と引数

GCD関数(読み方: ジーシーディー)は、指定した数値の最大公約数を返す関数です。名前は英語の「Greatest Common Divisor(最大公約数)」の頭文字から来ています。

=GCD(値1, [値2, ...])
引数必須/省略可内容
値1必須数値・セル参照・セル範囲
値2, …省略可追加の数値・セル参照・セル範囲

戻り値は、すべての値を割り切れる最大の整数。数値とセル参照、範囲は =GCD(24,96,A4) のように混ぜて指定できます。

GCD関数の基本(引数・範囲指定・LCMとの違い)

2つ以上の数値・セル範囲の指定

まずは数値を直接入れる基本形です。

=GCD(12,18)
=GCD(12,18,24)
=GCD(7,13)

上から順に6、6、1が返ります。7と13のように共通の約数が1しかない組み合わせ(互いに素)だと、結果は1になります。

数値がセルに並んでいるなら、範囲でまとめて渡せます。たとえばA2:A6が次の状態だとしましょう。

セル値
A224
A336
A4abc(文字列)
A5(空白)
A660
=GCD(A2:A6)

結果は12。範囲内の文字列「abc」と空白セルは無視され、24・36・60の最大公約数が返りました。

もう1つ大事なのが、範囲の値は全部まとめて1つの最大公約数になる点です。この性質は、あとで紹介する一括適用の落とし穴に関係してきます。

GCDとLCMの違い(1表で比較)

GCDと対になるのが、最小公倍数を返すLCM関数です。12と18で比べると違いがはっきりします。

項目GCD関数LCM関数
返す値最大公約数最小公倍数
12と18の結果636
考え方すべてを割り切れる最大の数すべてで割り切れる最小の数
主な用途比率の約分・ロット・分割数通分・周期の合流点

GCDは「縮める」計算、LCMは「そろえる」計算と覚えると迷いません。正の整数aとbには、次の関係も成り立ちます。

GCD(a,b) × LCM(a,b) = a × b

12と18なら、6×36も12×18も216です。LCMを使わずに =A2*B2/GCD(A2,B2) と書いても、最小公倍数を求められます。

実務で使う比率の約分3パターン

アスペクト比(画面比率)

結論で紹介した式が、そのまま使えます。画像やモニターの解像度リストを整理するなら、横と縦を2列に並べて約分式を入れるだけ。

1280×720も16:9、800×600は4:3だとすぐ分かります。バナーの入稿サイズを確認するときや、同じ比率の素材をまとめたいときに便利ですよ。

ロット・共通単位

商品A・B・Cの在庫が120個・180個・240個あるとします。どの商品も余りなく分けられるロット単位は、次の式で出せます。

=GCD(120,180,240)

結果は60。60個単位なら、3商品とも割り切れます。

3つの値の比率(A:B:C)を出したいときは、範囲のGCDで各値を割ってつなぎましょう。A2:C2に120・180・240が入っている場合の式です。

=TEXTJOIN(":",TRUE,A2/GCD(A2:C2),B2/GCD(A2:C2),C2/GCD(A2:C2))

結果は「2:3:4」。範囲を1つにまとめるGCDの性質が、ここではそのまま役立っています。区切り文字でつなぐ関数についてはTEXTJOIN関数の使い方で詳しく解説しています。

分割数・分数の約分

縦90cm・横150cmの板を、余りが出ないよう同じ大きさの正方形に切り分けたいとします。正方形の一辺の最大値は、GCD(90,150)で30cmです。

枚数は縦が90÷30で3、横が150÷30で5。A2に90、B2に150を入れて次の式を使えば、合計の15枚を一度に出せます。

=(A2/GCD(A2,B2))*(B2/GCD(A2,B2))

分数も考え方は同じ。分子が36、分母が48なら、最大公約数の12で割って3/4になります。

=A2/GCD(A2,B2)&"/"&B2/GCD(A2,B2)

A2/GCD(A2,B2)は必ず割り切れるので、小数は出ません。商の整数部分を返すQUOTIENT関数で =QUOTIENT(A2,GCD(A2,B2)) と書いても同じ結果です。

検算したいなら、MOD関数で =MOD(A2,GCD(A2,B2)) を入れてみてください。0が返れば、きちんと割り切れています。

複数行へ一括適用(ARRAYFORMULAの落とし穴とMAP版)

1行ずつコピーするのが面倒で、ARRAYFORMULAでまとめたくなりますよね。ところが、次の式は正しく動きません。

=ARRAYFORMULA(A2:A4/GCD(A2:A4,B2:B4)&":"&B2:B4/GCD(A2:A4,B2:B4))
行横縦ARRAYFORMULA版の結果正しい比率
21920108048:2716:9
3128072032:1816:9
480060020:154:3

原因はGCDの「範囲をまとめる」性質です。ARRAYFORMULAの中でも行ごとには分かれません。横3つと縦3つ、計6つの値全体の最大公約数である40を1つだけ出してしまいます。

実際、=ARRAYFORMULA(GCD(A2:A4,B2:B4)) と入れても、返るのは40が1つだけ。各行をこの40で割るので、約分しきれていない比率が並ぶわけです。エラーが出ないぶん、気づきにくいのが厄介なところ。

行ごとに約分するなら、MAPとLAMBDAを組み合わせます。

=MAP(A2:A4,B2:B4,LAMBDA(a,b,a/GCD(a,b)&":"&b/GCD(a,b)))

MAPは2つの範囲から値を1組ずつ取り出し、LAMBDAの式に渡す関数です。結果は上から16:9、16:9、4:3と、行ごとに正しく約分されます。MAPが難しく感じたら、2行目の約分式を下にコピーする方法でも問題ありません。

GCD関数のエラーと注意点(小数・負数・0・文字列)

小数は切り捨て

小数を渡すと、小数点以下を切り捨てた整数で計算されます。Googleの公式ヘルプにも、小数部分は切り捨てられると書かれています。

=GCD(12.9,18)

結果は6。12.9は四捨五入の13ではなく、12として扱われました。13なら18との最大公約数は1なので、結果がまったく変わります。

割り算の結果など、小数が混ざりやすい値を渡すときは要注意。ROUNDなどで意図どおりの整数にしてから渡すと安心です。

負数・0・文字列の挙動

迷いやすいケースを表にまとめました。

式結果ポイント
=GCD(-12,18)#NUM!負数が1つでもあるとエラー
=GCD(1,-0.5)#NUM!負の小数もエラー
=GCD(ABS(-12),ABS(18))6ABSで絶対値にすれば回避できる
=GCD(5,0)50以外の値がそのまま返る
=GCD(0,0)0エラーにはならない
=GCD(“abc”,12)#VALUE!直接入れた文字列はエラー
=GCD(“12”,18)6数字の文字列は数値として扱われる

負数は、1つでも混ざると#NUM!になります。増減や差額のように負数が出るデータなら、=GCD(ABS(A2),ABS(B2)) と絶対値に直してから渡しましょう。

もう1つの落とし穴が0です。文字列だけ、または空白だけの範囲を渡すと、GCDは0を返します。約分式でこの0を使うと0で割ることになり、#DIV/0!エラーが出てしまいます。

空欄の行があり得るなら、次のようにIFで逃がしておくと表が崩れません。

=IF(GCD(A2,B2)=0,"",A2/GCD(A2,B2)&":"&B2/GCD(A2,B2))

文字列の扱いは、渡し方で変わります。引数に直接書いた「abc」は#VALUE!ですが、範囲の中の文字列は無視されてエラーになりません。一部の値が計算から抜けても気づきにくいので、範囲を渡すときは中身が数値か確認しておきましょう。

Excel版との違い(短い補足)

次の4点は、Excel公式の説明と同じ結果でした。

  • 負数を含むと#NUM!
  • 小数は切り捨て
  • GCD(5,0)は5
  • 引数に直接入れた文字列は#VALUE!

一方で、Excel公式は引数を255個までとしています。スプレッドシートでは256個並べてもエラーにならなかったので、この上限は当てはまらないようです。Excelでの使い方はExcelのGCD関数の記事をどうぞ。

よくある質問(FAQ)とまとめ

Q. 比率を「16:9」の文字ではなく、2つのセルに数値で出したいときは?

横は =A2/GCD(A2,B2)、縦は =B2/GCD(A2,B2) と分けて入れます。結果が数値のままなので、後の計算にもそのまま使えますよ。

Q. 結果が1になりました。式が間違っていますか?

いいえ、2つの数が互いに素で、これ以上約分できないという意味です。たとえばGCD(7,13)は1になります。

Q. 1366×768のモニターが16:9になりません。なぜですか?

1366と768の最大公約数は2なので、約分式の結果は「683:384」になります。一般に16:9と呼ばれるサイズでも、正確な比率とは限りません。約分式は数値どおりの比率を返すと覚えておきましょう。

まとめ

  • 構文は =GCD(値1, [値2, ...])。数値・セル参照・範囲を混ぜて指定できる
  • 比率の約分は =A2/GCD(A2,B2)&":"&B2/GCD(A2,B2) をコピペして下へコピー
  • 3つ以上の比率は、範囲のGCDで各値を割って TEXTJOIN でつなぐ
  • ARRAYFORMULAでは範囲全体が1つにまとまり、誤った比率になる。行ごとならMAP+LAMBDA
  • 小数は切り捨て、負数は#NUM!(ABSで回避)、全部0や空白なら0が返る
  • 対になるLCM関数とあわせて使えば、検算もしやすい

まずは手元の表で、=GCD(1920,1080) が120になるところから試してみてください。

タイトルとURLをコピーしました