「Aさんの出勤は6日おき、配送は8日おき。次に両方が重なるのはいつ?」
スプレッドシートでシフトや点検の予定を管理していると、こんな疑問が出てきますよね。カレンダーを1日ずつ数えるのは手間がかかります。周期が3つ、4つと増えるほど、数え間違いも起きやすくなるはず。
そこで使えるのが、スプレッドシートのLCM関数です。周期の数字を渡すだけで、何日おきに重なるかを最小公倍数で返してくれます。
この記事では、LCM関数の書き方と3つの実務での使い方を紹介します。周期の重なる日・分数の通分・まとめ買いの箱数を、コピーして試せるサンプル表つきで解説。範囲指定のコツや、小数・負の数を渡すときの注意点もまとめました。
スプレッドシートのLCM関数とは?書き方と最短の使い方
LCM関数(読み方: エルシーエム関数)は、指定した整数の最小公倍数を返す関数です。名前は「Least Common Multiple(最小公倍数)」の頭文字から来ています。
最小公倍数とは、どの数でも割り切れる数のうち一番小さいもの。たとえば4と6なら、両方で割り切れる最小の数は12になります。
構文と引数(2個・3個・セル参照)
=LCM(値1, [値2, ...])
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | 最小公倍数を求める最初の値、またはセル範囲 |
| 値2, … | 任意 | 追加の値、またはセル範囲 |
Googleの公式ヘルプでは、LCM関数は「1以上の整数の最小公倍数を返す」と説明されています。値は数字を直接書いても、セルを指定してもかまいません。
まずは数字を直接入れて、結果を確かめてみましょう。
=LCM(4, 6)
| 数式 | 結果 | 考え方 |
|---|---|---|
| =LCM(4, 6) | 12 | 4の倍数と6の倍数で最初に一致する数 |
| =LCM(3, 5) | 15 | 共通の約数がない(互いに素)ので積がそのまま答え |
| =LCM(8, 12) | 24 | 8, 16, 24 と 12, 24 を比べて最初に一致する数 |
| =LCM(4, 6, 10) | 60 | 3つの数すべてで割り切れる最小の数 |
値は3つ以上並べてもOK。実務では、セルに入れた数字を参照する書き方のほうが使いやすいでしょう。
=LCM(A1, B1)
A1に「4」、B1に「6」が入っていれば、結果は「12」です。周期や入り数を書き換えると結果も自動で変わるので、表で管理するときに便利ですよ。
NOTE
Excel版との違い: 構文はほぼ同じで、Excelでは
=LCM(数値1, [数値2], ...)と書きます。Excelの公式ヘルプには「引数は255個まで」「負の数は #NUM!」「結果が2^53以上で #NUM!」と明記されています。一方、スプレッドシートの公式ヘルプにはこれらの記載がありません。Excelでの使い方はExcelのLCM関数の使い方を参考にしてみてください。
GCD関数との違い(約分ならGCD)
LCM関数と対になるのが、最大公約数を返すGCD関数です。名前が似ているので、違いを表で押さえておきましょう。
| 項目 | LCM関数 | GCD関数 |
|---|---|---|
| 求めるもの | 最小公倍数 | 最大公約数 |
| 12と18の結果 | 36 | 6 |
| 向いている場面 | 周期をそろえる・通分・数量をそろえる | 約分・比率を簡単にする・共通の単位を探す |
ざっくり言えば、LCMは「そろえる」ための計算、GCDは「小さくまとめる」ための計算。約分や共通の約数を求めたいなら、GCD関数の出番です。
2つの関数には「GCD × LCM = 2つの数の積」という関係があります。12と18なら、6 × 36 = 216 で、12 × 18 = 216 と一致。この関係を使うと、LCMの結果をGCDで検算できます。
=A1*B1/GCD(A1, B1)
A1に「12」、B1に「18」なら結果は36。=LCM(A1, B1) と同じ値です。使い分けの詳しい解説は、スプレッドシートのGCD関数の使い方にまとめています。
周期の重なる日を出す(シフト・配送・点検)
LCM関数がいちばん活躍するのが、周期の違う予定が重なる日の計算です。シフト・定期配送・設備点検など、「◯日おき」で回る業務ならそのまま使えます。
何日おきに重なるか(6日・8日 → 24日)
次のような表を用意します。A列に業務名、B列に周期(日数)を入れておきましょう。
| A | B | |
|---|---|---|
| 1 | 業務 | 周期(日) |
| 2 | Aさんの出勤 | 6 |
| 3 | 定期配送 | 8 |
| 4 | 設備点検 | 10 |
出勤と配送が重なる間隔は、2つの周期の最小公倍数です。
=LCM(B2, B3)
結果は「24」。6日おきと8日おきの予定は、24日ごとに重なります。
3つの業務すべてが重なる間隔なら、範囲でまとめて指定できます。=LCM(B2:B4) の結果は「120」なので、3つそろうのは120日に1回です。周期を1つ足すだけで間隔がぐんと伸びるのも、最小公倍数ならではの特徴ですね。
=基準日+LCM(…) で具体的な日付まで出す
「24日ごと」とわかっても、実際のカレンダーの日付がほしいですよね。そんなときは、予定が重なった日(基準日)にLCMの結果を足します。
E1に基準日「2026/11/02」を入れておき、次の数式を書きます。
=E1+LCM(B2, B3)
| 数式 | 意味 | 結果 |
|---|---|---|
| =E1+LCM(B2, B3) | 出勤と配送が次に重なる日 | 2026/11/26 |
| =E1+LCM(B2, B3)*2 | その次に重なる日 | 2026/12/20 |
| =E1+LCM(B2:B4) | 3つの業務が次にそろう日 | 2027/03/02 |
基準日には、すべての予定が同じ日に実施された日を選ぶのがポイント。重なっていない日を基準にすると、出てくる日付もずれてしまいます。
基準日のセルが日付形式なら、足し算の結果も日付として表示されます。もし「46352」のような5桁の数字で表示されたら、セルの表示形式が日付になっていません。メニューの[表示形式]→[数字]→[日付]を選ぶと、日付で表示されます。
その日が重なる日かを判定する(MOD関数)
日付の一覧を作っていて、「この日は重なる日?」を判定したい場面もあります。基準日からの経過日数が最小公倍数で割り切れるかを、MOD関数で調べましょう。
=MOD(A2-$E$1, LCM(6, 8))=0
A2の日付から基準日を引くと、経過日数が出ます。その日数を24で割った余りが0ならTRUE、0でなければFALSEという仕組みです。
| 日付(A列) | 基準日からの日数 | 判定 |
|---|---|---|
| 2026/11/14 | 12 | FALSE |
| 2026/11/26 | 24 | TRUE |
| 2026/12/08 | 36 | FALSE |
| 2026/12/20 | 48 | TRUE |
TRUEの行に条件付き書式で色をつければ、重なる日がひと目でわかる予定表になります。
LCM関数で分数の通分とまとめ買い数量を出す
LCM関数は日付以外にも、「数をそろえる」場面で役立ちます。ここでは、分数の通分と、入り数の違う品のまとめ買いを見ていきましょう。
通分の分母をそろえる(1/4 と 1/6)
1/4 と 1/6 を足すには、分母をそろえる(通分する)必要があります。そろえる分母は、4と6の最小公倍数です。
| A | B | C | |
|---|---|---|---|
| 1 | 分子 | 分母 | 通分後の分子 |
| 2 | 1 | 4 | 3 |
| 3 | 1 | 6 | 2 |
E1に =LCM(B2:B3) と入れると、共通の分母「12」が出ます。C2には次の数式を入れて、C3までコピーしてください。
=A2*$E$1/B2
1/4 は 3/12、1/6 は 2/12 になります。分子を足すと3 + 2 = 5なので、答えは 5/12 です。
入り数の違う品を同数にそろえる(LCM÷入り数で箱数)
「ボルトは12本入り、ナットは8本入り。同じ数だけ、余らせずに買いたい」という場面を考えてみます。そろえる本数は、入り数の最小公倍数です。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 品名 | 入り数 | 必要箱数 | 合計本数 |
| 2 | ボルト | 12 | 2 | 24 |
| 3 | ナット | 8 | 3 | 24 |
F1に =LCM(B2:B3) と入れると「24」。C2には、LCMの結果を入り数で割る数式を入れます。
=QUOTIENT($F$1, B2)
QUOTIENT関数は、割り算の整数部分だけを返す関数です。LCMは入り数で必ず割り切れるので、=$F$1/B2 でも同じ結果になります。D2の合計本数は =B2*C2 で求めましょう。
ボルト2箱とナット3箱で、どちらも24本ずつそろいます。
ただし、品目を増やすと数量が一気に膨らむので注意してください。10枚入りのワッシャーを足すと、=LCM(12, 8, 10) は120です。ボルト10箱・ナット15箱・ワッシャー12箱と、箱数も大きく増えます。購入前に、LCMの結果が現実的な量かを確かめておくと安心ですね。
LCM関数の範囲指定・複数組をまとめて計算する
LCM関数の引数には、セル範囲も指定できます。ただし範囲を渡すと、結果は「行ごと」ではなく「範囲全体で1つ」になります。
LCM(A2:A5) は範囲全体で1つの値を返す
A2〜A5に「4」「6」「8」「12」が入っているとします。
=LCM(A2:A5)
4つの数すべてで割り切れる最小の数は24なので、結果は「24」の1つです(4行分が行ごとに返ることはありません)。
公式ヘルプの使用例には LCM(2, 3, A4) のように、数字とセルを混ぜた書き方も載っています。同じ考え方なら、範囲と数字を組み合わせた =LCM(A2:A5, 5) は120になります。
範囲に空白セルや文字、TRUE/FALSEが混ざったときの扱いは、公式ヘルプに記載がありません。実機で試したところ、4・空白・6 や 4・"abc"・6 の範囲はエラーにならず、空白や文字のセルは無視されて結果は12でした。ただし、数式に直接 "abc" と書くと #VALUE! になります。見落としを防ぐため、数値だけが入った範囲を指定するのが確実です。
行ごとに最小公倍数を出したいとき
「1行に2つの数があり、行ごとに最小公倍数を出したい」というケースもありますよね。確実なのは、1行目に数式を書いて下の行へコピーする方法です。
| A | B | C | |
|---|---|---|---|
| 1 | 値1 | 値2 | 最小公倍数 |
| 2 | 12 | 8 | 24 |
| 3 | 6 | 9 | 18 |
| 4 | 10 | 15 | 30 |
| 5 | 7 | 5 | 35 |
C2に次の数式を入れ、C5までフィルハンドルでコピーします。
=LCM(A2, B2)
1つの数式で全行の結果を返したい場合は、MAP関数とLAMBDA関数を組み合わせる方法が候補です。LCMは範囲を渡すと1つの値にまとめるため、=ARRAYFORMULA(LCM(A2:A5, B2:B5)) のように包んでも行ごとにはならず、8つの数すべての最小公倍数(この表では2520)が1つ返るだけです。
=MAP(A2:A5, B2:B5, LAMBDA(a, b, LCM(a, b)))
C2に入れると、C2:C5に24・18・30・35が並びます。
小数・負の数・0 を渡すときの注意とエラーの対処
LCM関数は「1以上の整数」を前提にした関数です。小数や負の数が入りうる表では、渡す前に値を整えておくと失敗を防げます。
公式ヘルプで確認できる挙動・できない挙動
スプレッドシートの公式ヘルプに書かれている内容と、書かれていない内容を分けて整理しました。
| ケース | 公式ヘルプの記載 | 実務での対処 |
|---|---|---|
| 小数(4.9 など) | 小数部はすべて自動的に切り捨て | 四捨五入したいならROUNDで丸めてから渡す |
| 負の数 | 記載なし(実機では #NUM!) | ABSで正の値にそろえてから渡す |
| 0 | 記載なし(実機では結果が0) | 0や空欄の行はIFで計算から外す |
| 範囲内の空白・文字 | 記載なし(実機では無視される) | 数値だけの範囲を指定する |
公式の説明どおり切り捨てられ、=LCM(4.9, 6.3) は =LCM(4, 6) と同じ扱いで、結果は12になります。4.9を5として扱いたいなら、ROUND関数で丸めてから渡しましょう。
=LCM(ROUND(A2), ROUND(B2))
A2が4.9、B2が6.3なら、5と6の最小公倍数で30になります。
1未満の小数は切り捨てで0になるため、=LCM(0.5, 2) の結果は0です。エラーにならず0が返るので、見落とさないようにしましょう。
負の数や0を渡したときの結果は、スプレッドシートの公式ヘルプに記載がありません。実機で試すと、=LCM(-4, 6) は #NUM! になり、=LCM(5, 0) は0を返しました。負の数が混ざりうる列は、ABS関数で絶対値にしてから渡すのが無難です。
=IF(OR(A2=0, B2=0), "", LCM(ABS(A2), ABS(B2)))
この数式なら、0や空欄の行は空白のまま、それ以外は正の値で最小公倍数を計算します。周期や入り数に0は本来入らないので、空白で返して入力漏れに気づけるようにしておくと安心です。
つまずきやすい症状と対処
LCM関数を使っていてよくある症状を、原因と対処の組み合わせでまとめます。
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 日付のはずが5桁の数字で出る | 結果のセルが日付の表示形式になっていない | [表示形式]→[数字]→[日付]を選ぶ |
| #NUM! や #VALUE! のエラーになる | 負の数が入っている(#NUM!)、数式に直接書いた文字が数値でない(#VALUE!) | ABSで正の値にする・数値に直す |
| 結果が0になる | 1未満の小数(0.5など)や0を渡している | ROUNDやIFで値を整える |
| 結果が大きすぎて使えない | 共通の約数がない数を多く重ねた | 組み合わせを見直す・品目を分けて計算する |
結果が大きくなりすぎたときのエラーについて、Excelの公式ヘルプには「2^53以上で #NUM!」とあります。スプレッドシートでは、実機で =LCM(999999937, 999999929) を試してもエラーにならず、約1京の値が返りました。ただし2^53(約9.0×10^15)を超える値は正確に表せないため、末尾の桁がずれた近似値になります(この例の正しい値は999999866000004473)。極端に大きな数を扱うときは、結果を検算しておきましょう。
まとめ:スプレッドシートのLCM関数は「そろえる」計算に使う
スプレッドシートのLCM関数は、複数の数の最小公倍数を返す関数です。この記事のポイントを振り返ります。
- 構文は
=LCM(値1, [値2, ...])。数字・セル・範囲を指定できる - 周期の重なる間隔は
=LCM(6, 8)で24日。=基準日+LCM(...)で日付まで出せる - 重なる日の判定は
=MOD(日付-基準日, LCM(...))=0で行える - 通分の分母や、まとめ買いの数量(LCM÷入り数で箱数)にも使える
- 範囲を渡すと結果は1つにまとまる(ARRAYFORMULAでも同じ)。行ごとに出すなら数式を下へコピーするか、MAPとLAMBDAを使う
- 小数は切り捨て(0.5は0)。負の数は #NUM!、0を含むと0になるので、ABSやIFで整えてから渡す
約分や共通の約数を求めたいときは、GCD関数のほうが向いています。まずは手元の表で =LCM(6, 8) を入れ、「24」が返るのを確かめてみてください。
