-
按你文字表达的意思:
使用筛选--复制--黏贴是最简单的方法
如果要使用函数,那么需要你提供更加多地信息
最好是截图表达
-
教你个笨办法,不算快速,但很有效。
1、将“大表”移动到最后
2、选择“大表”,复制,放在最后面
再见着选择“大表”及其后面的所有表,如上操作,进行复制,
如此反复,直到复制数量等于所有班级的个数为止。
3、重命名复制的表为:××学校××班
4、在“××学校××班”的表中,建立自动筛选,在A列筛选“××学校”,在B列筛选“××班”。
(完毕)
-
用VBA可以实现,为了方便请先把大表按“学校名称”“班级”排下序。
(不排序的话,每分一个表就要查找十万行,会加大工作量,这里默认排好序)
问题中所贴图没单元格的行和列的坐标,现假设如下:
大表第一行为标题行,第2行开始为表格数据。
A列为"序号",B列为"学校名称",C列为"班级",D列为"姓名",E列为"身份证号"
准备工作完成,把下面VBA程序复制过去,当前工作表为大表中的数表据时,执行即可。
'-----------------------------分隔线----------------------------
Sub 按学校班级分类()
Dim 原表 As Worksheet, 新建表 As Worksheet
Dim 学校 As String, 班级 As String
Dim A As Long, B As Long
Set 原表 = ActiveSheet
On Error Resume Next
A = 1: B = 1
Do
DoEvents
A = A + 1
If Len(原表.Range("B" & A)) = 0 Then
MsgBox "分类完成!", vbInformation
Exit Do
End If
If B = 1 Then
1:
学校 = 原表.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 1
2:
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 If
Loop
End Sub
如本站内容“对您有用”,欢迎随意打赏,让我们持续更新!
打赏