Sub chaifen () Dim sht As Worksheet Dim k, i, j AsInteger Dim irow AsInteger'这个说的是一共多少行 Dim l Dim str AsString'用于提取当前工作表的名字 str = ActiveSheet.Name '取得当前要处理的表的名字 l = InputBox("请输入你要按哪列分") '删除无意义的表 Application.DisplayAlerts = False'此语句作用是将警告框关闭(删除动作会弹出警告框) If Sheets.Count > 1Then ForEach sht1 In Sheets If sht1.Name <> str Then'这里是第3处修改,不再用“数据”这个固定的名字了,而是用之前取到的名字 sht1.Delete EndIf Next EndIf Application.DisplayAlerts = True'此语句是将之前关闭的警告框重新设置为正常弹出 '获取待处理表格str的总行数 irow = Sheets(str).Range("a" & Rows.Count).End(xlUp).Row '拆分表'判断当前已有的表的名字是否和指定单元格名字一致,如果一致,则不重复创建同名表格(用K变量的值变化表示是否存在同名表) For i = 2To irow k = 0 ForEach sht In Sheets If sht.Name = Sheets(str).Cells(i, l) Then k = 1 EndIf Next '如果不一致,即K=0,那么在现有表格的后面添加新表,同时将新表的名字修改为指定单元格的值 If k = 0Then Sheets.Add after:=Sheets(Sheets.Count) '新添加的表格都在原有表的后面 Sheets(Sheets.Count).Name = Sheets(str).Cells(i, l) EndIf Next '根据输入的需要筛选的列进行数据筛选,并将筛选得到的数据拷贝至对应表名的表中 For j = 2To Sheets.Count'在源数据表中以指定j表名筛选第l列 Sheets(str).Range("a1:z" & irow).AutoFilter Field:=l, Criteria1:=Sheets(j).Name '将上面筛选的结果拷贝到指定j表的a1单元格中 Sheets(str).Range("a1:z" & irow).Copy Sheets(j).Range("a1") Next '此语句用于去掉单元格的筛选 Sheets(str).Range("a1:z" & irow).AutoFilter
Sub chaifenupdate () Dim sht As Worksheet Dim k, i, j AsInteger Dim irow AsInteger'这个说的是一共多少行 Dim l AsInteger Dim sht0 As WorksheetSet sht0 = ActiveSheet '将对象赋值到变量,需要用 set l = InputBox("请输入你要按哪列分") '1、删除无意义的表 Application.DisplayAlerts = False If Sheets.Count > 1Then ForEach sht1 In Sheets If sht1.Name <> sht0.Name Then sht1.Delete EndIf Next EndIf Application.DisplayAlerts = True irow = sht0.Range("a65536").End(xlUp).Row '2、拆分表 For i = 2To irow k = 0 ForEach sht In Sheets If sht.Name = sht0.Cells(i, l) Then k = 1 EndIf Next If k = 0Then Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = sht0.Cells(i, l) EndIf Next '3、按照指定列进行筛选,并将筛选结果复制到对应表中 For j = 2To Sheets.Count sht0.Range("a1:z" & irow).AutoFilter Field:=l, Criteria1:=Sheets(j).Name sht0.Range("a1:z" & irow).Copy Sheets(j).Range("a1") Next sht0.Range("a1:z" & irow).AutoFilter sht0.Select MsgBox "已处理完毕" EndSub