用VBA可以实现,为了方便请先把大表按“学校名称”“班级”排下序。(不排序的话,每分一个表就要查找十万行,会加大工作量,这里默认排好序)问题中所贴图没单元格的行和列的坐标,现假设如下:大表第一行为标题行,第2行开始为表格数据。A列为"序号",B列为"学校名称",C列为"班级",D列为"姓名",E列为"身份证号"准备工作完成,把下面VBA程序复制过去,当前工作表为大表中的数表据时,执行即可。'-----------------------------分隔线----------------------------Sub 按学校班级分类()Dim 原表 As Worksheet, 新建表 As WorksheetDim 学校 As String, 班级 As StringDim A As Long, B As LongSet 原表 = ActiveSheetOn Error Resume NextA = 1: B = 1Do DoEvents A = A + 1 If Len(原表.Range("B" & A)) = 0 Then MsgBox "分类完成!", vbInformation Exit Do End If If B = 1 Then1: 学校 = 原表.Range("B" & A) 班级 = 原表.Range("C" & A) Set 新建表 = Sheets(学校 & 班级) If Err.Number <> 0 Then Err.Clear Set 新建表 = Sheets.Add(, Worksheets(Worksheets.Count)) 新建表.Name = 学校 & 班级 新建表.Range("A1") = "序号" 新建表.Range("B1") = "学校名称" 新建表.Range("C1") = "班级" 新建表.Range("D1") = "姓名" 新建表.Range("E1") = "身份证号" B = 1: GoTo 2 Else MsgBox "工作表“" & 学校 & "”“" & 班级 & "”已存在,退出运行。", vbCritical Exit Sub End If Else If Not (原表.Range("B" & A) = 学校 And 原表.Range("C" & A) = 班级) Then GoTo 12: B = B + 1 新建表.Range("A" & B) = 原表.Range("A" & A) 新建表.Range("B" & B) = 原表.Range("B" & A) 新建表.Range("C" & B) = 原表.Range("C" & A) 新建表.Range("D" & B) = 原表.Range("D" & A) 新建表.Range("E" & B) = 原表.Range("E" & A) End IfLoopEnd Sub