パーセント変化の数式:負の数・ゼロ・空白

50 の損失から 25 の利益になると、通常の (C2-B2)/B2 は -150% を表示します。2026 年 11 月 14 日の Google Sheets では、標準の数式は標本に対して 25%、-25%、-150%、-60%、#DIV/0!、#DIV/0!、-100%、-10100%、0% でした。分母に ABS を使うと West は 150%、Southwest は 60%、Mountain はなお 10100% でした。

目次

要点

50 の損失から 25 の利益になると、通常の (C2-B2)/B2 は -150% を表示します。2026 年 11 月 14 日の Google Sheets では、標準の数式は標本に対して 25%、-25%、-150%、-60%、#DIV/0!、#DIV/0!、-100%、-10100%、0% でした。分母に ABS を使うと West は 150%、Southwest は 60%、Mountain はなお 10100% でした。

=IF(OR(B2="",C2=""),"n/m",IF(B2=0,"new",IF(B2*C2<0,"n/m",(C2-B2)/ABS(B2))))

確認のポイント

開始値が 0 だと #DIV/0! になります。IF(B6=0,"new",...) は new を返します。IFERROR で 0 に置き換えると 0% と表示され、変化なしに見えます。空白の開始値も #DIV/0!、空白の終了値は 0 と扱われて -100% になります。ガード付きの数式は 25%、-25%、n/m、60%、new、n/m、n/m、n/m、0% を返し、パーセント表示にしても new と n/m は文字列のままです。

注意点と互換性

数式に 100 を掛けてからパーセント表示をすると、0.25 が 25 になり、25% ではなく 2500% と出ます。4% から 6% は 2 パーセントポイントで、相対変化は 50% です。新しい値と変化率から元の値を戻す C2/(1+D2) は 1200 を返しますが、変化がちょうど -100% だと分母が 0 になり #DIV/0! です。0 から 0、0 から損失も、このガードでは new になります。今回 Excel では再確認していません。

英語の詳細例・数式・著者メモ

A region goes from a $50 loss to a $25 profit, and (C2-B2)/B2 shows -150%. Other rows come back #DIV/0!, or -100% just because the later figure is still blank.

The ordinary formula is fine for two positive numbers. It needs a different denominator, or a label instead of a percent, once the starting value is negative, zero, or missing.

Enter this in A1:C10. Leave B7 and C8 genuinely empty.

RegionOctober profit ($)November profit ($)
Northeast12001500
Midwest800600
West-5025
Southwest-300-120
Central0400
Southeast250
Pacific250
Mountain-1100
Atlantic450450

In D1 type Change. In D2 enter =(C2-B2)/B2 and fill down to D10. After Percent format, Northeast is 25%. For West, the more useful calculation is =(C4-B4)/ABS(B4), which returns 150% instead of -150%.

Why a loss turning into a profit shows -150%

Filled down and formatted as Percent, the standard formula returns:

RegionStandard result
Northeast25%
Midwest-25%
West-150%
Southwest-60%
Central#DIV/0!
Southeast#DIV/0!
Pacific-100%
Mountain-10,100%
Atlantic0%

West improved by 75, from -50 to 25. Dividing 75 by -50 gives -1.5, which displays as -150%. Southwest’s loss narrowed from -300 to -120, an improvement of 180, but 180 / -300 is -60%. Both results look like a decline because the old value is negative.

Use ABS in the denominator, and when I still wouldn’t report a percent

ABS takes the size of the starting value and leaves the sign of the change alone. =(C4-B4)/ABS(B4) returns 150% for West. The same formula on Southwest returns 60%.

That answers a slightly different question: how large was the move relative to the size of the starting figure? I prefer it when I’m comparing changes that stay on the same side of zero, as Southwest does, and the report says so.

It does not fix every row. On Mountain, -1 to 100, ABS returns 10,100%. The arithmetic is right and still a bad way to describe the result. For a loss that becomes a profit, or a profit that becomes a loss, I’d write n/m (not meaningful) and show the dollar change beside it.

Zero as the starting value returns #DIV/0!

Central starts at 0 and ends at 400, so =(C6-B6)/B6 returns #DIV/0!. There isn’t a finite percentage increase from zero. A label is more honest than an invented rate.

=IF(B6=0,"new",(C6-B6)/ABS(B6)) returns new. Check for zero before you divide. Don’t wrap the formula in IFERROR and replace the error with 0%: =IFERROR((C6-B6)/B6,0) returned 0 here, which would display as 0% and look like nothing changed. IFERROR also hides typo and reference errors. When to catch an error, and when not to, is in IFERROR vs IFNA. The mechanics of #DIV/0! are in how to fix #DIV/0!.

The same B6=0 branch also catches 0 to 0 and 0 to a loss, so new is a reporting choice, not a complete policy for every zero baseline.

Blank ending values show -100%

A blank is treated as zero in this arithmetic. Southeast has a blank October figure, so the standard formula returns #DIV/0!, the same as Central. Pacific has 250 in October and a blank November, so the formula returns -100%. That one is easy to miss in a report: missing data looks like the region lost everything.

For a column that includes all of these cases, I’d use one guarded formula in D2 and fill it to D10:

=IF(OR(B2="",C2=""),"n/m",IF(B2=0,"new",IF(B2*C2<0,"n/m",(C2-B2)/ABS(B2))))

It returns 25%, -25%, n/m, 60%, new, n/m, n/m, n/m, and 0%. B2*C2<0 marks a sign change across zero, which is why West and Mountain become n/m while Southwest, still a loss on both sides, stays 60%. If your policy is to show a percentage for those crossings, drop that test and keep the ABS calculation.

The blank check also catches a formula that returns "". In this test, an old value produced by ="" still caused #DIV/0! in the standard formula, B2="" caught it, and ISBLANK of that cell was FALSE. The difference is in ISBLANK vs empty cells.

Format as Percent; don’t also multiply by 100

Select D2:D10 and apply Percent format. Northeast’s 0.25 then displays as 25%, and later formulas can still use the 0.25. I prefer that to multiplying the formula by 100.

If you multiply by 100 and also apply Percent format, the cell is 25 formatted as a percentage, which displays as 2,500%. The text labels new and n/m stay text in the same column after Percent format is applied.

Percentage points are not the same as percentage change

If a margin goes from 4% to 6%, that is 2 percentage points. The percentage change is (0.06-0.04)/0.04, which is 50%. Both are right; they answer different questions. For margins, rates, or conversion figures, say “percentage points” for the simple difference.

Finding the original value from the percentage

If you have the new value and the percentage change, the original is new / (1 + percentage change). With 1500 in C2 and 25% in D2, =C2/(1+D2) returns 1200.

That only works when D2 is the ordinary numeric percentage, not an n/m or new label. It also returns #DIV/0! when the change is exactly -100%, because the denominator is zero. I got that result on the Pacific row, where the standard formula is -100%.

Oscar

表計算の数式とトラブル解決を紹介。検証環境と未確認事項は各記事を参照。

Google Sheets, 14 November 2026, tab percentage-change. Standard =(C-B)/B filled D2:D10, then formatted as 0%: 25%, -25%, -150%, -60%, #DIV/0!, #DIV/0!, -100%, -10100%, 0%. ABS in the denominator: 25%, -25%, 150%, 60%, #DIV/0!, #DIV/0!, -100%, 10100%, 0%. Guarded formula: 25%, -25%, n/m, 60%, new, n/m, n/m, n/m, 0%; those text labels stayed visible after Percent format. IF(B6=0,"new",...) returned new. C2/(1+D2) returned 1200; the same reverse formula on the -100% Pacific row returned #DIV/0!. 4% to 6% is 0.02 (2 percentage points) and (0.06-0.04)/0.04 = 0.5. (C2-B2)/B2*100 is 25, and Percent format then displayed 2500%. B7 and C8 were truly blank (ISBLANK TRUE). A formula-produced "" in the old value also gave #DIV/0!, the OR(B="",C="") guard returned n/m, and ISBLANK of that cell was FALSE. IFERROR on the zero start returned 0. A 50-to--25 crossing is -150% with or without ABS. Zero-to-zero and zero-to-loss both returned new with this guard. Excel was not re-run.

次の記事:シートのエラーと動的配列 合計が1セント合わない:行を丸めてから合計する