如何遍历Excel列的行进行分组,在指定列写入连续组号(处理10万行预排序数据)
Hey Jack, 针对你这个给已排序B列分组、生成连续组号的需求,我给你准备了两种高效的解决方案,完全适配10万行的大数据量:
方法一:Excel公式法(无需编程,上手快)
因为你的B列已经按A-Z预排序了,咱们可以用简单的条件判断公式来实现:
- 假设你的表头在第1行,数据从第2行开始,先在
C2单元格手动输入1(第一个分组的起始号) - 在
C3单元格输入公式:
=IF(B3=B2,C2,MAX($C$2:C2)+1)
- 选中
C3单元格,双击单元格右下角的填充柄(或者直接下拉到最后一行),Excel会自动给所有行分配对应的组号
公式逻辑说明:
- 如果当前行的B列内容和上一行完全一致,就继承上一行的组号
- 如果内容不一样,就取当前行以上所有C列的最大值加1,生成新的组号
这个方法操作简单,10万行的话Excel处理起来也完全没问题,不需要额外编程。
方法二:VBA子程序(大数据量更高效)
如果你的数据量特别大(比如10万行),直接用VBA批量写入值会比公式计算更快,避免公式链带来的性能开销。具体步骤如下:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 将下面的代码粘贴到模块窗口中:
Sub AssignGroupNumbers() Dim ws As Worksheet Dim lastRow As Long Dim currentGroup As Integer Dim i As Long ' 这里替换成你的工作表名称,比如"数据Sheet" Set ws = ThisWorkbook.Worksheets("Sheet1") ' 获取B列最后一行的行号 lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' 初始化第一个组号 currentGroup = 1 ws.Cells(2, "C").Value = currentGroup ' 数据从第2行开始,对应C2 ' 遍历所有行分配组号 For i = 3 To lastRow ' 对比当前行和上一行的B列内容 If ws.Cells(i, "B").Value <> ws.Cells(i - 1, "B").Value Then currentGroup = currentGroup + 1 End If ' 写入组号到C列 ws.Cells(i, "C").Value = currentGroup Next i MsgBox "组号分配完成!" End Sub
- 修改代码中的工作表名称(把
"Sheet1"改成你实际的表名),然后按下F5运行宏,等待弹窗提示完成即可
VBA优势:
直接在内存中处理逻辑后写入单元格,没有公式的计算依赖,处理10万行数据基本几秒就能完成,效率比公式法高很多。
重要提醒:
因为你已经提前把B列按A-Z排序了,所以这两种方法都能保证同一个文本对应的组号完全连续且唯一,不会出现混乱的情况。如果后续B列排序有变动,记得重新运行公式或VBA哦!
内容的提问来源于stack exchange,提问作者Jack Clair




