Excel 本身并不是一个“多线程”应用程序,这意味着它无法将一个复杂的计算任务(比如一个庞大的公式)拆分成两半,然后让两个 CPU 核心同时计算。

excel 正在计算 2个处理器
(图片来源网络,侵删)

这并不意味着 Excel 无法利用多个处理器,我们可以从两个方面来理解“Excel 正在计算 2个处理器”:


最常见的原因 - Excel 界面响应与后台计算分离

这是您最可能遇到的情况,您看到任务管理器里 Excel 占用了 50% 的 CPU(在 4 核 CPU 上),或者两个核心的占用率都很高。

发生了什么?

Excel 的计算过程可以分为两个主要部分,它们可以同时在不同的处理器核心上运行:

excel 正在计算 2个处理器
(图片来源网络,侵删)
  1. 后台计算引擎

    • 这是 Excel 的“大脑”,负责执行所有公式的计算、刷新数据透视表、运行 VBA 宏等。
    • 当您的文件很大、公式复杂时,这个计算引擎会非常繁忙,它会占用一个 CPU 核心来全力工作。
  2. 用户界面 线程

    • 这是 Excel 的“手和脚”,负责处理您的所有操作,
      • 移动鼠标、点击单元格、滚动屏幕。
      • 绘制和刷新窗口、图表。
      • 显示状态栏信息(如“就绪”、“计算中”)。
    • 为了保证您在等待计算完成时,Excel 界面不会卡死(变成“白屏”或“无响应”),UI 线程会独立运行。

为什么是两个核心都在工作?

  • 核心 1 (0-25% 使用率): 正在被 Excel 的后台计算引擎占用,它正在拼命地重新计算您的公式。
  • 核心 2 (0-25% 使用率): 正在被 Excel 的用户界面线程占用,它正在等待计算结果,同时保持界面的响应性,比如在状态栏显示“计算中...”,并让您可以移动鼠标。

简单比喻: 想象一个餐厅,只有一个厨师(后台计算引擎)在满头大汗地做菜(计算),但同时还需要一个服务员(用户界面)在旁边随时准备为您倒水、介绍菜单(保持界面响应),厨师和服务员可以同时在不同区域忙碌,所以看起来餐厅里有两件事在同时发生。

excel 正在计算 2个处理器
(图片来源网络,侵删)

特定功能可以利用多核

虽然主计算引擎是单线程的,但 Excel 中的一些特定功能是经过优化,可以充分利用多个 CPU 核心的。

  1. 数据刷新 (特别是 Power Query)

    当您刷新从外部数据源(如数据库、网页)导入的数据时,Excel 会使用多个核心来并行处理数据转换、加载等任务,这是多核利用最明显的场景之一。

  2. 某些 VBA 宏

    • 如果您的 VBA 代码中明确使用了多线程技术(例如通过 CallByName 调用 .NET 程序集中的多线程功能),或者宏本身触发了可以多线程执行的操作(如刷新数据透视表),那么您也可能看到多个核心被占用。
  3. 条件格式 和数据验证

    在极少数情况下,当工作表中有大量的条件格式规则或数据验证时,Excel 在应用这些规则时也可能进行一定的并行处理,但这通常不是主要的性能瓶颈。


如何判断和优化?

您可以通过以下步骤来确认和解决性能问题:

打开 Windows 任务管理器

  • Ctrl + Shift + Esc 打开任务管理器。

  • 切换到“性能”选项卡,然后点击左侧的“CPU”。

  • 运行您的 Excel 文件,观察右侧的“使用历史记录”图表。

  • 如果看到两个核心稳定占用: 这很可能是情况一,即后台计算和UI响应在同时进行,这是正常现象,说明 Excel 正在努力工作并保持响应。

  • 如果看到所有核心都被占用: 这很可能是情况二,您可能在刷新数据或运行一个优化的宏。

  • 如果只有一个核心被占用到 100%: 这就是典型的单线程瓶颈,您的计算任务非常繁重。

优化 Excel 性能(针对单线程瓶颈)

如果您的 Excel 文件运行缓慢,核心问题通常是单线程计算太慢,您可以尝试以下方法:

  • 禁用自动计算:

    • 转到 公式 选项卡 -> 计算选项 -> 选择 手动
    • 这样,Excel 不会在您每次修改单元格时都重新计算,您可以在完成所有修改后,按 F9 键进行手动计算,或者按 Shift + F9 只计算当前工作表。
  • 减少和优化公式:

    • 尽量使用 Excel 的内置函数(如 SUMIFS, INDEX/MATCH),它们通常比复杂的数组公式或自定义 VBA 函数更快。
    • 避免在整个列上使用公式(如 A:A),尽量限定范围(如 A1:A10000)。
    • 将复杂的公式拆分成多个步骤,存储在中间列中。
  • 使用“计算列”替代辅助列:

    对于 Power Pivot(数据模型)中的计算列,Excel 会在后台使用多个核心进行计算,这通常比在普通工作表中创建辅助列要快得多,尤其是在处理大量数据时。

  • 简化 VBA 代码:

    检查您的宏,确保它们是高效的,避免在循环中频繁读写工作表,最好将数据读入数组,在内存中处理完毕后再一次性写回工作表。

  • 升级硬件:

    • 由于 Excel 计算主要依赖单核性能,提升 CPU 的主频(即单个核心的速度)比增加核心数量对提升 Excel 计算速度更有效,增加内存和升级到更快的 SSD 也会有帮助。
  • Excel 主计算是单线程的,但它将后台计算UI响应分配到不同的线程,因此您经常能看到两个核心在工作。
  • 这是一种正常的设计,目的是防止界面卡死。
  • Excel 运行缓慢,问题根源通常是单线程计算能力不足
  • 优化的重点在于减少计算量(禁用自动计算、简化公式)和提升单核 CPU 性能,而不是仅仅看核心数量。