跳至页脚内容
EXCEL 工具

如何在Excel中进行减法:每种方法详解(2026)

_由Iron Software团队撰写_ 。


现在需要在 Excel 中减去数字吗? 这里是简短的答案:点击您希望结果显示的单元格,输入 =,点击第一个单元格,输入减号(-),点击第二个单元格,按回车。 这就是最常见的情况,两个数字,两个单元格,一个公式。

但是Microsoft Excel 为您提供了远不止这一种方法的灵活性。 无论您是需要一次性减去多个单元格、跨两个列工作、减去日期、减去时间值、处理百分比还是对整个矩阵执行计算,本指南涵盖每种方法。 将这些内容构建到您的 Excel 技能中,您将能够毫不犹豫地应对即使是最复杂的任务。

方法一:简单减法公式(最快)

在 Excel 中简单减法从这里开始,对于大多数日常工作,它永远不需要走得更远。

  1. 点击您希望答案显示的结果单元格(例如,C1)。
  2. 输入等号:=
  3. 点击您启始值的第一个单元格(例如,A1),或直接输入数字。
  4. 输入减号:-
  5. 点击要减去的值所在的单元格(例如,B1),或输入数字。
  6. Enter

在 C1 中以下公式出现:=A1-B1。Excel 会立即显示计算出的差值。

如何在Excel中减法:解释每种方法 (2026):图1 - 一个简单的三列布局,A1单元格为

为何这个方法有效: Excel 将任何以 = 开头的内容视为公式。 减号是减法符号,正是您在日常数学中使用的符号。

专家提示: 您可以通过链接减号在一个公式中减去多个数字。 要从起始值中减去三个值,编写=A1-B1-C1。您可以根据需要串联多余的值,Excel会从左到右执行所有计算。

关于SUBTRACT函数的注意事项: Excel没有内置的SUBTRACT函数。 Excel中所有的减法运算直接在公式中使用减号 (-)。 这令许多新用户感到惊讶,他们期望有类似SUM或AVERAGE的函数,但减号运算符才是Excel中执行减法的正确且唯一方式。 *

方法2:一次性减去整个列(填充柄)

一旦您制作好了一个公式,只需通过使用填充柄,复制到整列只需一秒钟。

  1. 在列的第一个单元格中输入您的减法公式(例如,单元格C1中的=A1-B1)。
  2. 点击C1以选择它。

  3. 将鼠标悬停在单元格右下角的小绿点上,这是填充柄。 光标会变成一个细小的十字。
  4. 点击并向下拖动填充柄以覆盖您想要的所有行。
  5. 松开鼠标,Excel会自动填充每个单元格并调整公式。

如何在Excel中减法:解释每种方法 (2026):图2 - 填充手柄(绿色方块)及每行中可见的调整公式

Excel在填充时会自动更新单元格引用。 C2将包含=A2-B2,C3将包含=A3-B3,以此类推。 这称为相对引用,对于处理数据行和列的任何人来说,这是最省时间的Excel技能之一。

双击快捷方式: 如果您的数据在相邻列中没有空白单元格或间隙,您可以双击填充柄而不是拖动。 Excel会自动向下填充以匹配相邻列的长度,非常适合将公式应用于多个单元格。 *

方法3:使用SUM函数减去多个单元格

要在一个简洁的公式中从一个起始值中减去多个单元格,使用带负值的SUM函数。

方法:在SUM中将您要减去的值作为负数传递。

公式—分别减去多个单元格:

=SUM(A1, -B1, -C1, -D1)
=SUM(A1, -B1, -C1, -D1)
The provided C# code appears to be a fragment or possibly a formula from a spreadsheet application like Excel, rather than actual C# code. If this is intended to be a formula, it doesn't directly translate to VB.NET as it stands. However, if you meant to convert a C# code snippet that uses a similar operation, please provide the complete C# code for accurate conversion.
$vbLabelText   $csharpLabel

公式—从一个单元格减去一个范围(最常见的模式):

=A1-SUM(B1:B5)
=A1-SUM(B1:B5)
=A1-SUM(B1:B5)
$vbLabelText   $csharpLabel

当您在一个单元格中有预算或总额,而多个单元格中分布着支出或扣除时,这种第二种版本特别有用。

如何在Excel中减法:解释每种方法 (2026):图3 - 一个预算跟踪器,A1单元格为

适用场合: 任何时候您需要减去多于两个或三个值时,这种模式比跨多列串联多个减号更清晰,也更容易审计。 这种方法还可以让您在不重写公式的情况下轻松扩展范围。 *

方法4:减去两列(行对行)

减去两列是Excel中最常见的任务之一,例如,减去"成本"列与"收入"列以确定每行的利润。

  1. 在结果单元格(例如,C1)中输入=A1-B1。
  2. Enter
  3. 回到C1,然后使用填充柄向下拖动公式遍历所有行。

Excel会自动减去两列中的每对单元格,A1−B1, A2−B2, A3−B3,以此类推直至表格的底部。

这是处理行和列数据的标准方法,无需更改公式结构就能扩展到任何行数。 *

方法5:使用数组公式减法(一次减去多列)

数组公式可以让您跨整个范围减去多个结果,或将其合并为一个结果,而不需要逐行手动填充。 这是需要同时从多列减去值时使用的方法,或进行矩阵减法时使用的方法。

单一数组公式—求出两列之间差异的总和

要从A列减去B列中的所有值并在一个结果单元格中返回总差异,请使用这个单一数组公式:

=SUM(A1:A10-B1:B10)
=SUM(A1:A10-B1:B10)
The provided code appears to be an Excel formula rather than C# code. If you have C# code that you would like converted to VB.NET, please provide that code for conversion.
$vbLabelText   $csharpLabel

在较旧版本的Excel(Microsoft 365/Excel 2019之前)中,通过按Ctrl+Shift+Enter来确认这是一个数组公式,而不是仅按Enter。 Excel会用大括号显示:{=SUM(A1:A10-B1:B10)}。 在Microsoft 365中,只按Enter就足够了,动态数组会自动处理。

如何在Excel中减法:解释每种方法 (2026):图4 - 在结果单元格中的公式=SUM(A1:A10-B1:B10)

矩阵减法公式—从另一个矩阵中减去一个矩阵

如果您有两个相等大小的数据块,需要从一个矩阵中减去另一个矩阵,Excel可以同时处理所有行和列。

示例: A1:C3(第一个矩阵)和E1:G3(第二个矩阵)中的值。 要在I1:K3中显示矩阵减法结果:

  1. 选择输出范围I1:K3(与您的数据块大小相同)。

  2. 输入以下公式:

    =A1:C3-E1:G3
    =A1:C3-E1:G3
    The provided C# code appears to be a fragment of a formula or expression rather than valid C# code. It seems to resemble a spreadsheet formula rather than a programming construct. If you intended to provide a different piece of C# code, please clarify or provide the correct code for conversion.
    $vbLabelText   $csharpLabel
  3. 在Excel 365中,按Enter,结果会自动溢出到所有输出单元格。
  4. 在较旧的Excel中,按Ctrl+Shift+Enter确认选择范围的数组公式。

数组公式同时在范围内的每对对应单元格上进行操作。 这比为每个单元格编写单个公式效率显著提高,尤其是在需要从一个矩阵中减去另一个矩阵或批量从多列减去值时。 *

方法6:特殊粘贴—从多个单元格中减去相同数字

这种方法很少使用,但极为实用。 它允许您从一个整片单元格范围就地减去相同的数字,覆盖原始值而不用向您的数据中添加任何公式列。

示例使用案例: 您需要将50个价格每个减去$10,并且您想要将价格直接更新在原始单元格中。

步骤:

  1. 在任意空单元格中输入您要减去的数字(例如,10)。
  2. 右键单击该单元格并选择复制(或按Ctrl+C)。

  3. 选择您要减去的单元格范围(例如,A1:A50)。
  4. 右键点击所选范围并选择特殊粘贴(或按Ctrl+Alt+V)。

  5. 在特殊粘贴对话框中,在"粘贴"下选择,在"运算"下选择减去

  6. 单击确定

Excel会从每个选定单元格中减去复制的数字,并直接就地覆盖原始值。

重要: 此方法会永久更改单元格值。 如果您可能需要撤销,请首先保留原始数据的备份,或者如果改变了主意立即使用Ctrl+Z。 *

方法7:右键上下文菜单(特殊粘贴快捷方式)

需要特别指出的是,特殊粘贴在Microsoft Excel中始终仅需右键单击,大多数用户没有意识到右键菜单可以在不需导航任何功能区菜单的情况下直接访问此功能。

复制您的值后:

  • 右键点击目标范围→ 特殊粘贴 → 设置运算为减去确定

这个工作流程根本不需要键盘快捷键,使其在您更喜欢点和点击导航而非键盘命令时,是最可访问的方法。 *

方法8:减去日期以找出差异

Excel内部将日期存储为序列号,这意味着您可以像减去任何其他数字一样减去日期,以确定它们之间的差异。

减去两个日期以获得它们之间的天数:

=B1-A1
=B1-A1
$vbLabelText   $csharpLabel

其中A1是开始日期,B1是结束日期。 答案是分隔它们的天数。

如果结果显示为日期,校正单元格格式: 在输入公式后,结果单元格可能会显示为"1/14/1900"而非数字。 这是因为Excel自动将日期单元格格式应用于结果。 要修正它:

  1. 右键单击结果单元格→ 格式化单元格
  2. 数量下,选择数字常规

  3. 点击 确定

单元格现在将显示这两个日期之间正确的整数差异。 *

方法9:减去时间值(并正确显示小时数)

减去时间值的操作与减去日期值相同,输入一个简单的减法公式,Excel会处理数学运算。 关键是应用合适的单元格格式,以便结果正确显示小时数。

基本时间减法:

=B1-A1
=B1-A1
$vbLabelText   $csharpLabel

其中A1是开始时间,B1是结束时间。

正确显示24小时以下的持续时间: 右键点击结果单元格→ 格式化单元格→ 自定义→ 输入h:mm→ 确定。

正确显示超过24小时的持续时间: 使用[h]:mm作为自定义格式。 方括号表示Excel不会在24小时进行回滚,因此30小时的持续时间显示为30:00而非6:00。

跨午夜减去时间值: 如果一个班次在晚上11:00开始并在早上6:00结束,简单的=B1-A1产生负数结果。 通过如下方式修正:

=MOD(B1-A1, 1)
=MOD(B1-A1, 1)
`=MOD(B1-A1, 1)`
$vbLabelText   $csharpLabel

MOD函数在午夜后环绕计算,并始终返回正的经过时间。 *

方法10:使用绝对单元格引用减法(锁定一个单元格)

有时您想从整个列的值中减去相同的固定单元格,例如,从数据集中每行的税率或区域基本成本中减去同一个参考单元格。

如果您使用标准公式如=A1-B1,并用填充柄向下拖动它,Excel会更新两个单元格引用:B1变为B2, B3,以此类推。 当B1包含所有行的固定值时,这不是您想要的。

解决方法: 添加美元符号以锁定引用。 这被称为绝对引用

=A1-$B$1
=A1-$B$1
The provided code appears to be an Excel formula rather than C# code. If you have C# code that needs conversion to VB.NET, please provide it, and I'll be happy to assist!
$vbLabelText   $csharpLabel

现在当您拖动公式时,A1更新为A2, A3等,但$B$1在每一行都锁定在B1。 从列A的其他单元格中减去始终使用B1中的相同数字。

切换引用类型的键盘快捷键: 单击公式中的任意单元格引用并按F4。 Excel循环遍历所有四种选项:相对 (A1) → 绝对 ($A$1) → 行锁定 (A$1) → 列锁定 ($A1)。 重复按F4直到您达到所需的版本。 *

方法11:减去百分比

在Excel中减去百分比需要了解Excel如何内部存储它们。 Excel将所有百分比值存储为小数,因此20%存储为0.2,而不是20。 如果您没有意识到这一点,在计算单元格中会产生意外的结果。

从另一个单元格中减去百分比:

=A1-B1
=A1-B1
$vbLabelText   $csharpLabel

如果A1包含500,B1含20%(存储为0.2),此公式给出499.8,它减去了0.2而不是20。这几乎肯定不是预期的结果。

减去原始值的百分比(最常见的现实用途):

=A1-(A1*B1)
=A1-(A1*B1)
$vbLabelText   $csharpLabel

或等效地:

=A1*(1-B1)
=A1*(1-B1)
=A1 * (1 - B1)
$vbLabelText   $csharpLabel

如果A1是500和B1是20%,这可以正确计算500−100=400。

减去一个硬编码的百分比:

=A1-(A1*20%)
=A1-(A1*20%)
=A1 - (A1 * 0.2)
$vbLabelText   $csharpLabel

这无需单独的百分比单元,并完全一样地工作。 *

方法12:自动减法的VBA宏

如果发现自己每周重复进行相同的减法操作,在Excel数据上,一些简单的VBA宏可以自动化整个过程并按需运行它。

注意: 记录一个基本宏不需要编程经验。 Microsoft Excel中的内置宏记录器捕获您的每一个操作,并立即重播。

记录减法宏:

  1. 转到视图记录宏

  2. 给它起一个名字(例如,SubtractCosts)并分配一个可选的快捷键。
  3. 点击确定,开始记录。
  4. 正常执行您的减法步骤(输入您的公式,拖动填充柄,按回车等)。
  5. 转到视图停止记录

任何时候可以通过视图 → 宏 → 查看宏 → 运行,或使用您分配的快捷键运行。

对于想要直接编写VBA的用户,以下是一个简单的示例,它遍历行,从A列减去B列,并将每个结果写入C列:

Sub SubtractColumns()
    Dim i As Integer
    For i = 1 To 10
        Cells(i, 3).Value = Cells(i, 1).Value - Cells(i, 2).Value
    Next i
End Sub
Sub SubtractColumns()
    Dim i As Integer
    For i = 1 To 10
        Cells(i, 3).Value = Cells(i, 1).Value - Cells(i, 2).Value
    Next i
End Sub
Sub SubtractColumns()
    Dim i As Integer
    For i = 1 To 10
        Cells(i, 3).Value = Cells(i, 1).Value - Cells(i, 2).Value
    Next i
End Sub
$vbLabelText   $csharpLabel

Alt+F11打开VBA编辑器,将这段代码粘贴到您的工作簿下面的模块中,并使用F5运行。 *

常见问题及故障排除

即使是简单的减法公式,在现实数据中也可能出现错误行为。 以下是最常见的问题及其解决方法。


Problem: The result shows #VALUE!

原因: 您正在减去的一个或多个单元格包含文本字符串而不是数字。 这经常发生在从其他系统导入数据时,值看起来像数字但Excel将其存储为文本,因此无法对其进行计算。

解决方法: 选择问题单元格,查找左上角的小绿三角,点击警告图标,选择转换为数字。 或者,在您的公式中强制转换:=VALUE(A1)-VALUE(B1)。 *

问题:结果单元格显示为日期而非数字

原因: Excel自动将日期单元格格式应用于结果(常见于减去日期值或单元格格式在之前设为日期的情况下)。

解决方法: 右击结果单元格→ 格式化单元格数字常规数字确定 *

问题:公式以文本字符串显示(可以看到公式文本而不是答案)

原因: 在您输入公式之前,单元格已经被格式化为文本,所以Excel将其存储为文字字符串而不是进行评估。

解决方法: 选择单元格,转到主页数字下拉菜单→ 将单元格格式从"文本"更改为"常规"。然后按F2编辑并按Enter重新评估。 Excel现在会显示计算结果。 *

问题:正值预期情况下出现负数

原因: 减法顺序颠倒了。 =B1-A1相对于=A1-B1会给出相反的符号。这是快速设置公式时最常见的错误之一。

解决方法: 在您的公式中交换单元格引用。 如果您总是想要一个正值,不论哪个值更大,将公式包装在ABS()中:=ABS(A1-B1)。 *

问题:填充柄复制值而不是调整单元格引用

原因: 您可能在意图使用相对引用的地方使用了绝对引用($A$1),或者公式输入前源单元格被格式化为文本。

解决方法: 点击公式中的引用,光标放在引用内,然后反复按下F4,直到去掉美元符号。 然后再次拖动填充柄。 *

问题:范围中的空单元格导致错误或作零

原因: 当公式引用数据中的空单元格时,SUM将其视为零(通常没问题),但像=A1-B1中B1为空的直接公式会返回A1中的值未变,这在上下文中可能看起来不对。

解决方法: 使用IFERROR优雅地处理空单元格:

=IFERROR(A1-B1, 0)
=IFERROR(A1-B1, 0)
The provided code snippet appears to be an Excel formula rather than C# code. If you have a C# code snippet that you would like to convert to VB.NET, please provide it, and I'll be happy to assist you with the conversion.
$vbLabelText   $csharpLabel

或者使用IF在减去前先进行明确检查:

=IF(B1="", A1, A1-B1)
```* * *

### Problem: Subtracting percentages gives unexpected results

**Cause:** Excel stores percentages as decimals. Subtracting A1 - 20% subtracts 0.2 from A1's value, not 20.

**Fix:** Use=A1*(1-B1)to subtract a percentage of the original value. Use =A1-20 to subtract the literal number 20 regardless of how values are formatted in other cells.* * *

## Edge Cases the Other Articles Miss

**Subtracting across worksheets:** You can subtract values from different sheets in one formula. The syntax is =Sheet1!A1-Sheet2!A1. While building your formula, simply click the cell on the other sheet and Excel writes the full reference automatically.

**Subtracting with IFERROR for bulletproof formulas:** Whenever there is any chance a cell might be empty or return an error, wrap your formula to prevent the error from propagating to other cells that depend on this result:

```cs
=IFERROR(A1-B1, 0)
=IF(B1="", A1, A1-B1)
```* * *

### Problem: Subtracting percentages gives unexpected results

**Cause:** Excel stores percentages as decimals. Subtracting A1 - 20% subtracts 0.2 from A1's value, not 20.

**Fix:** Use=A1*(1-B1)to subtract a percentage of the original value. Use =A1-20 to subtract the literal number 20 regardless of how values are formatted in other cells.* * *

## Edge Cases the Other Articles Miss

**Subtracting across worksheets:** You can subtract values from different sheets in one formula. The syntax is =Sheet1!A1-Sheet2!A1. While building your formula, simply click the cell on the other sheet and Excel writes the full reference automatically.

**Subtracting with IFERROR for bulletproof formulas:** Whenever there is any chance a cell might be empty or return an error, wrap your formula to prevent the error from propagating to other cells that depend on this result:

```cs
=IFERROR(A1-B1, 0)
The provided text appears to be a mix of Excel formulas and explanations rather than C# code. However, I can convert the logic of the Excel formulas into VB.NET code if that is what you need. Here's how you might represent the logic of these Excel formulas in VB.NET:

net

This VB.NET code assumes `A1` and `B1` are variables that hold the values you would typically have in Excel cells. The code demonstrates how to handle conditional logic and error handling similar to Excel's `IF` and `IFERROR` functions.
$vbLabelText   $csharpLabel

跨午夜减去时间值: 对于跨越午夜的班次跟踪(晚上11:00开始,早上6:00结束),使用=MOD(B1-A1, 1)始终返回正的经过时间。

从过滤数据中减去(仅可见行): 标准减法公式在计算结果中包含隐藏行。 要仅处理过滤后的可见单元格,先用SUBTOTAL聚合可见数据,或者在执行计算前将过滤后的范围复制到新位置。

批量减去多列而不使用数组公式: 而不是编写=A1-B1-C1-D1-E1-F1,使用=A1-SUM(B1:F1)。 这更易于扩展,易于阅读,且在添加或删除列时不易出错。 *

For Developers: Subtract in Excel with IronXL (C#)

如果您正在构建一个读取、修改或生成Excel文件的.NET应用程序,报告管道、金融工具、文档自动化系统,直接在C#中进行计算比依赖用户打开Microsoft Excel并手动运行公式提供了更大的控制。

IronXL是一个.NET库,可以让您读取和写入Excel文件,而不需要在服务器上安装Excel。 以下示例从两列中减去值并将结果写入第三列,程序等同于上面描述的两列减法方法:

using IronXL;
// Load an existing workbook (or create one fresh with WorkBook.Create())
WorkBook workbook = WorkBook.Load("financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Loop through rows: subtract Column B from Column A, write each result to Column C
for (int row = 1; row <= 10; row++)
{
    double valueA = sheet[$"A{row}"].DoubleValue;
    double valueB = sheet[$"B{row}"].DoubleValue;
    sheet[$"C{row}"].Value = valueA - valueB;
}
workbook.SaveAs("financials_updated.xlsx");
using IronXL;
// Load an existing workbook (or create one fresh with WorkBook.Create())
WorkBook workbook = WorkBook.Load("financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Loop through rows: subtract Column B from Column A, write each result to Column C
for (int row = 1; row <= 10; row++)
{
    double valueA = sheet[$"A{row}"].DoubleValue;
    double valueB = sheet[$"B{row}"].DoubleValue;
    sheet[$"C{row}"].Value = valueA - valueB;
}
workbook.SaveAs("financials_updated.xlsx");
Imports IronXL

' Load an existing workbook (or create one fresh with WorkBook.Create())
Dim workbook As WorkBook = WorkBook.Load("financials.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet

' Loop through rows: subtract Column B from Column A, write each result to Column C
For row As Integer = 1 To 10
    Dim valueA As Double = sheet($"A{row}").DoubleValue
    Dim valueB As Double = sheet($"B{row}").DoubleValue
    sheet($"C{row}").Value = valueA - valueB
Next

workbook.SaveAs("financials_updated.xlsx")
$vbLabelText   $csharpLabel

无需Excel安装,无COM互操作问题,并且它可以在Windows、Linux和macOS上运行。 IronXL支持完整的公式评估、单元格格式、范围操作和任何大小行列的数据读取,是自动化批量工作流程的自然契合点,其中手动打开电子表格并不实用。 *

快速参考:使用哪个方法

|状态|最佳方法| |---|---| | 仅一次减去两个数字或两个单元格 | 简单公式:=A1-B1 | | 整列减去 | 公式+填充柄拖动 | | 从一个总数中减去多个单元格 |=A1-SUM(B1:B5)| | 将多个列减到一个结果中 |=A1-SUM(B1:F1)| | 从多个单元格中减去相同的数字 | 特殊粘贴→ 减去 | | 从所有行减去一个固定参考单元格 | 绝对引用:=A1-$B$1 | | 从另一个矩阵中减去一个矩阵 | 数组公式:=A1:C3-E1:G3 | | 减去日期— 计算天数差异 | =B1-A1 + 常规单元格格式 | | 减去时间值,正确显示小时数 | =B1-A1 + [h]:mm单元格格式 |

| 减去值的百分比 |=A1*(1-B1)| | 优雅地处理空单元格或错误 |=IFERROR(A1-B1, 0)| | 每周重复相同的减法操作 | 记录一个VBA宏 | | 自动或服务器端的Excel减法 |IronXL (.NET)|


最后的想法

Excel减法是那些一开始看似微不足道但在基本情况下确实如此的技能之一。 但处理现实的数据显示经常会遇到日期、时间值、百分比、空单元格、文本字符串、过滤行和多列或矩阵范围。 知道每种情况需要使用哪个工具,这就是将能够在Excel中执行基本计算的人与能够自信处理复杂任务的人区分开来的因素。

对于大多数工作,=A1-B1和填充柄将带您走得很远。 基于SUM的方法可以干净地处理多个单元格。 绝对引用锁定固定值。 数组公式和矩阵减法公式处理需要一次性跨整个范围减去的场景。 故障排除部分覆盖了最有可能让您在处理导入的数据或不一致的数据时措手不及的情况。

这些是核心Excel技能,现在您可以在一个地方掌握所有这些技能。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我