跳至主要内容

Kutools for Office — 一套工具,五种功能。事半功倍。

如何在Excel中创建动态的前10名或前N名列表?

Author: Xiaoyang Last Modified: 2025-08-22

在许多项目和业务流程中,通常需要根据个人、组织、产品或其他实体的表现或数值对其进行排名。"前10名列表"用于突出显示表现最高的条目,例如按成绩排名的优秀学生、销售业绩最好的员工或收入最高的部门。例如,您可能有一张学生成绩表,想要动态提取出前10名得分者进行奖励、分析或监控教育成果,如下方截图所示。在Excel中创建一个动态的前10名或前N名列表,可以让数据变化时自动更新结果,从而节省时间并减少手动排名带来的错误。本指南介绍了几种实用解决方案——包括公式、数据透视表和VBA宏——帮助您高效地构建动态的前10名或前N名列表,以满足各种数据分析需求。


在Excel中创建动态的前10名列表

在Excel 2019及更早版本中,创建动态的前10名(或前N名)列表涉及组合公式,同时提取最高值及其关联的名称或ID。此解决方案被广泛使用,并适用于希望列表能随着数据变化而自动更新的情况。以下操作概述了如何使用经典Excel公式来实现这一功能。这些公式提供了灵活性,并且不需要特殊的Excel插件,但与一些现代动态数组函数相比,设置过程稍微复杂一些。

使用公式创建动态的前10名列表

1. 首先,您需要从您的值范围中提取前10个值。在空白单元格(例如G2)中输入以下公式。输入公式后,向下拖动填充柄以生成动态的前10个值列表。见截图:

=LARGE($B$2:$B$20,ROWS(B$2:B2))
注意:这里,B2:B20是分数或值的范围,B2是该列中的第一个单元格。请根据您的数据大小和位置调整这些单元格引用。

apply a formula to extract the top10 values

2. 接下来,要显示与这些最高值相关联的名称(或ID),在F2单元格中输入以下公式。这是一个数组公式,因此在输入后,请按 Ctrl + Shift + Enter 确认。此公式会找到与您刚刚提取的最高值相对应的名称:

=INDEX($A$2:$A$20,SMALL(IF($B$2:$B$20=G2,ROW($B$2:$B$20)-ROW($B$1)),COUNTIF($G$2:G2,G2)))
参数说明:
- A2:A20 是要提取名称的范围;
- B2:B20 是分数或值的范围;
- G2 是从上述公式中得到的最高值;
- B1 是值列表的标题,用于在行计算中进行偏移。
此公式将最高值与其名称动态链接起来。如果您的值范围包含重复项,COUNTIF确保每个匹配的名称仅出现一次,并附有其对应的分数。

use a formula to get relative item

3. 提取第一个结果后,选择F2单元格中的公式,向下拖动填充柄以将公式复制到所需的行数。这将扩展您的结果,动态显示所有顶级条目的名称,与那些分数相匹配。见截图:

drag and fill the formula to other cells

a screenshot of kutools for excel ai

使用 Kutools AI 解锁 Excel 魔法

  • 智能执行:执行单元格操作、分析数据和创建图表——所有这些都由简单命令驱动。
  • 自定义公式:生成量身定制的公式,优化您的工作流程。
  • VBA 编码:轻松编写和实现 VBA 代码。
  • 公式解释:轻松理解复杂公式。
  • 文本翻译:打破电子表格中的语言障碍。
通过人工智能驱动的工具增强您的 Excel 能力。立即下载,体验前所未有的高效!

使用带条件的公式创建动态的前10名列表

在某些分析任务中,您可能需要一个只显示符合特定条件条目的前10名列表——例如,将顶级结果限制为特定组、团队或类别。例如,您可能想从包含多个班级成绩的总数据表中识别出"1班"的前10名成绩。以下是针对此场景使用公式的步骤:

create a dynamic top10 list with criteria

1. 从数据集中提取符合指定条件(例如,"1班")的前10个值。在目标单元格(例如J2)中输入以下公式:

=LARGE(IF($B$2:$B$25=$F$2,$C$2:$C$25),ROW(I2)-ROW(I$1))

2. 输入公式后,按 Ctrl + Shift + Enter 确认为数组公式,然后向下拖动填充柄填充其他单元格。该公式将返回与所选条件匹配的前10个最高值(例如,"1班"的所有分数)。

apply a formula to extract the top10 values based on criteria

3. 要列出这些符合条件的最高值对应的名字,请将下面的公式复制并粘贴到I2单元格中,并按 Ctrl + Shift + Enter 作为数组公式确认。然后根据需要向下填充以生成完整的名字列表。

=INDEX($A$2:$A$25,SMALL(IF(($C$2:$C$25=J2)*($B$2:$B$25=$F$2),ROW($C$2:$C$25)-ROW($C$1)),COUNTIF(J2:$J$2,J2)))

use a formula to create a dynamic top10 list in Office365

确保根据实际数据设置调整公式中的范围。请注意,对大范围的数据使用数组公式可能会降低性能。如果前10名中出现重复值,公式将适当处理重复分数,并在成绩相等的情况下给出多个学生名字。


在Office 365中创建动态的前10名列表

虽然早期版本的Excel需要结合几个函数和数组公式,但Office 365(和Excel 2021)引入了动态数组函数,如INDEX、SORT、SEQUENCE和FILTER,这些函数大大简化了工作流程。这些函数使构建动态前10名列表更容易,减少了错误,并特别适合于经常增长或变化的表格。如果您在数据不断更新的环境中操作,这些函数可以简化您的分析并加快业务决策速度。

使用公式创建动态的前10名列表

要在Office 365中提取并显示动态的前10名列表,在所需输出单元格中输入以下公式。您只需根据需要调整范围和数字,公式会在数据变化时自动显示最新的前10个结果。

=INDEX(SORT(A2:B20,2,-1),SEQUENCE(10),{1,2})

只需按下Enter键。完整的前10名列表立即出现,并保持动态,因此添加的数据或修改的分数会立即反映在排名中。

use a formula to create a dynamic top10 list in Office365

提示:

SORT函数:

=SORT(array, [sort_index], [sort_order], [by_col])

  • array:要排序的范围。
  • [sort_index]:要排序的列号。对于典型的等级表,这通常是第二列。
  • [sort_order]:使用1表示升序,-1表示降序。要获取最高分,使用-1。
  • [by_col]:是否按列(TRUE)或按行(FALSE或省略)排序。

例如:SORT(A2:B20,2,-1)按第二列降序排列A2:B20。


SEQUENCE函数:

=SEQUENCE(rows, [columns], [start], [step])

  • rows:要返回的行数,例如,前10名列表为10。
  • [columns]:(可选)要返回的列数。
  • [start]:(可选)起始值。
  • [step]:(可选)增值。

SEQUENCE(10)生成数字1至10,让INDEX选取前10个排序结果。

结合起来,=INDEX(SORT(A2:B20,2,-1),SEQUENCE(10),{1,2})为您提供了一个动态的两列前10名列表。


使用带条件的公式创建动态的前10名列表

如果您需要提取特定组(例如,"1班")的前10名,这些高级Office 365函数可以在创建前N名列表时仅包括符合条件的那些行。将以下公式放置在您期望的位置,并根据需要调整范围和条件单元格:

=INDEX(SORT(FILTER(A2:C25,B2:B25=F2),3,-1),SEQUENCE(10),{1,3})

输入公式后,只需按下Enter键。根据指定条件过滤并排名的前10名列表立即显示出来,每次您修改数据或条件时都会更新。

another formula to create a dynamic top10 list with criteria in office365

提示:

FILTER函数:

=FILTER(array, include, [if_empty])

  • array:要过滤的单元格范围。
  • include:包含条件(例如,等于给定班级)。
  • [if_empty]:(可选)如果没有任何结果符合条件时显示的内容。

=FILTER(A2:C25,B2:B25=F2)仅返回B列中与F2单元格值匹配的那些行。


使用数据透视表创建动态的前10名列表

数据透视表:自动交互式显示前N个结果

另一种构建动态前N名列表的方法是使用Excel的数据透视表功能。这种方法特别适合于大型数据集、交互式分析(如快速更改前几名的数量或应用过滤器),或者当您想避免复杂公式时。数据透视表用户友好,并在数据变化时自动更新,使其非常适合与他人共享的仪表板或报告。

使用数据透视表创建动态前N名列表:

  1. 点击数据表内的任意位置,然后转到插入 > 数据透视表
  2. 在数据透视表对话框中,选择数据透视表放置的位置,然后单击确定
  3. 将您的"名称"(或类似标识符)字段拖到区域。
  4. 将您的"分数"(或值列)拖到区域。它通常默认为"求和"或"计数"——对于前10名列表,您通常需要"求和"或"最大值"。如有必要,通过右键单击并选择汇总依据来更改值字段的计算方式。
  5. 通过右键单击一个值并选择排序 > 降序排序来对"分数"列进行降序排序。
  6. 要限制为前N个结果,请单击行标签上的下拉箭头,选择值筛选器 > 前10...,设置数量(例如,前10)和筛选依据的字段,然后单击确定

现在,您的数据透视表显示了动态的前10名(或您指定的任何N)。要更改前N个结果,只需重新访问筛选设置即可。如果您的数据发生变化,刷新数据透视表以立即更新排名。

这种方法的好处包括快速设置、轻松排序和交互式调整。然而,除非包含在行或值区域中,否则数据透视表不能自动添加其他列的相应行。高级用户可以通过分组、创建切片器或将前N个筛选器合并到仪表板中进一步自定义报告。


使用VBA创建动态的前10名列表

VBA宏:自动生成并刷新前N名列表

使用VBA宏非常适用于处理大量或频繁更新数据的用户,其中自动化提取和刷新动态前N名列表是必需的。宏是减少重复性任务和确保一致性的理想工具。您可以创建一个例程,每次运行时对数据进行排序并将前N行复制到特定位置。

要使用VBA宏创建动态前N名列表,请按照以下步骤操作:

  1. 单击开发工具 > Visual Basic 打开VBA编辑器。(如果您看不到开发工具选项卡,请转到文件 > 选项 > 自定义功能区并启用"开发工具"。)
  2. 在VBA窗口中,单击插入 > 模块以添加新模块。
  3. 将以下VBA代码粘贴到模块中:
Sub ExtractTopNList()
'Updated by Extendoffice 2025/7/24
    Dim DataRange As Range
    Dim OutputRange As Range
    Dim N As Integer
    Dim ws As Worksheet, tempWS As Worksheet
    Dim xTitleId As String
    Dim LastCol As Long
    
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    
    Set ws = ActiveSheet
    Set DataRange = Application.InputBox("Select the full data range to analyze (including headers)", xTitleId, ws.UsedRange.Address, Type:=8)
    Set OutputRange = Application.InputBox("Select the top-left cell of the output area", xTitleId, "", Type:=8)
    N = Application.InputBox("How many top items to extract? (Enter a positive integer)", xTitleId, 10, Type:=1)
    
    If DataRange Is Nothing Or OutputRange Is Nothing Or N < 1 Then Exit Sub
    
    ' Create a temporary worksheet to avoid sorting original data
    Set tempWS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    DataRange.Copy tempWS.Range("A1")
    
    ' Determine last column for sorting key
    LastCol = DataRange.Columns.Count
    
    ' Sort in temporary sheet
    tempWS.UsedRange.Sort Key1:=tempWS.Cells(1, LastCol), Order1:=xlDescending, Header:=xlYes
    
    ' Copy headers and top N rows to output
    tempWS.Rows(1).Copy Destination:=OutputRange
    tempWS.Range("A2").Resize(N, LastCol).Copy Destination:=OutputRange.Offset(1, 0)
    
    ' Optional: Delete temporary sheet
    Application.DisplayAlerts = False
    tempWS.Delete
    Application.DisplayAlerts = True
    
    Application.CutCopyMode = False
End Sub

4. 要执行宏,请确保您的数据已正确布局在带有标题的表格中。按 F5 或单击 Run button VBA编辑器中的按钮。系统将提示您:

  1. 选择您的数据范围(包括标题以便正确排序)。
  2. 选择输出单元格以粘贴结果。
  3. 输入数字N(例如,10代表前10名)。

宏将复制前N个条目(包括标题)到您指定的位置。

建议在首次测试时使用备份或副本工作簿。如果发生错误(例如选择了不正确的范围),请重新运行并确保您的范围和数据布局正确。

此解决方案非常适合自动化重复报告任务、创建仪表板或快速更新前N名报告而无需手动公式或排序。您可以进一步定制VBA脚本以实现更复杂的排名逻辑,例如按特定列排序或将结果导出到另一个工作簿。

故障排除:如果宏未能按预期工作,请检查数据表是否包含适当的标题,纠正数据类型以避免排序问题,并确保在每个提示中准确选择了单元格引用。在运行宏之前始终保存您的工作,以防止意外数据更改。


总之,Excel支持各种方法来生成和维护动态前N名列表——从传统公式到强大的Office 365函数、用于交互式分析的数据透视表以及用于高级自动化的VBA宏。选择最适合您的工作流程和数据规模的方法。使用公式对大多数手动分析有效,Office 365函数提供最大的简便性和强大功能,数据透视表非常适合快速灵活的摘要,而VBA在自动化大型重复排名任务方面特别有用。始终验证公式或代码的完整性,并根据项目进展调整单元格引用以匹配数据结构的任何变化。


最佳Office办公效率工具

🤖 Kutools AI 助手:以智能执行为基础,彻底革新数据分析 |代码生成 |自定义公式创建|数据分析与图表生成 |调用Kutools函数……
热门功能:查找、选中项的背景色或标记重复项 | 删除空行 | 合并列或单元格且不丢失数据 | 四舍五入……
高级LOOKUP多条件VLookup|多值VLookup|多表查找|模糊查找……
高级下拉列表快速创建下拉列表 |依赖下拉列表 | 多选下拉列表……
列管理器添加指定数量的列 | 移动列 | 切换隐藏列的可见状态 | 比较区域与列……
特色功能网格聚焦 |设计视图 | 增强编辑栏 | 工作簿及工作表管理器 | 资源库(自动文本) | 日期提取 | 合并数据 | 加密/解密单元格 | 按名单发送电子邮件 | 超级筛选 | 特殊筛选(筛选粗体/倾斜/删除线等)……
15大工具集12项 文本工具添加文本删除特定字符等)|50+种 图表 类型甘特图等)|40+实用 公式基于生日计算年龄等)|19项 插入工具插入二维码从路径插入图片等)|12项 转换工具小写金额转大写汇率转换等)|7项 合并与分割工具高级合并行分割单元格等)| ……
Kutools支持多种语言——可选择英语、西班牙语、德语、法语、中文等40多种语言!

通过Kutools for Excel提升您的Excel技能,体验前所未有的高效办公。 Kutools for Excel提供300多项高级功能,助您提升效率并节省时间。 点击此处获取您最需要的功能……


Office Tab为Office带来多标签界面,让您的工作更加轻松

  • 支持在Word、Excel、PowerPoint中进行多标签编辑与阅读
  • 在同一个窗口的新标签页中打开和创建多个文档,而不是分多个窗口。
  • 可提升50%的工作效率,每天为您减少数百次鼠标点击!

所有Kutools加载项,一键安装

Kutools for Office套件包含Excel、Word、Outlook和PowerPoint的插件,以及Office Tab Pro,非常适合跨Office应用团队使用。

Excel Word Outlook Tabs PowerPoint
  • 全能套装——Excel、Word、Outlook和PowerPoint插件+Office Tab Pro
  • 单一安装包、单一授权——数分钟即可完成设置(支持MSI)
  • 协同更高效——提升Office应用间的整体工作效率
  • 30天全功能试用——无需注册,无需信用卡
  • 超高性价比——比单独购买更实惠