「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(約分後の比率) |
|---|---|---|---|
| 1920 | 1080 | 120 | 16:9 |
| 1280 | 720 | 80 | 16:9 |
| 800 | 600 | 200 | 4: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が次の状態だとしましょう。
| セル | 値 |
|---|---|
| A2 | 24 |
| A3 | 36 |
| A4 | abc(文字列) |
| A5 | (空白) |
| A6 | 60 |
=GCD(A2:A6)
結果は12。範囲内の文字列「abc」と空白セルは無視され、24・36・60の最大公約数が返りました。
もう1つ大事なのが、範囲の値は全部まとめて1つの最大公約数になる点です。この性質は、あとで紹介する一括適用の落とし穴に関係してきます。
GCDとLCMの違い(1表で比較)
GCDと対になるのが、最小公倍数を返すLCM関数です。12と18で比べると違いがはっきりします。
| 項目 | GCD関数 | LCM関数 |
|---|---|---|
| 返す値 | 最大公約数 | 最小公倍数 |
| 12と18の結果 | 6 | 36 |
| 考え方 | すべてを割り切れる最大の数 | すべてで割り切れる最小の数 |
| 主な用途 | 比率の約分・ロット・分割数 | 通分・周期の合流点 |
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版の結果 | 正しい比率 |
|---|---|---|---|---|
| 2 | 1920 | 1080 | 48:27 | 16:9 |
| 3 | 1280 | 720 | 32:18 | 16:9 |
| 4 | 800 | 600 | 20:15 | 4: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)) | 6 | ABSで絶対値にすれば回避できる |
| =GCD(5,0) | 5 | 0以外の値がそのまま返る |
| =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になるところから試してみてください。
