赞
踩
在处理财务数据时,可能需要根据某一行中的数据对整个工作表进行分类创建各自的工作表
待处理的表格
1、对整个excel进行分析,判断是否存在一些无意义的工作表
(这里只是为了让最终生成的工作表只有我们需要的),若有,则删除
If Sheets.Count > 1 Then Excel.Application.DisplayAlerts = False 'For g = 2 To Sheets.Count 'Sheets(g).Delete 'Next For Each sht In Sheets If sht.Name <> "数据" Then sht.Delete End If Next Excel.Application.DisplayAlerts = True End If
2、根据我们选中的列去创建所有类别的工作表,此步需要遍历每一行的数据。
For i = 2 To row_number k = False For j = 1 To Sheets.Count If Sheet1.Cells(i, l).Value = Sheets(j).Name Then k = True Exit For End If Next If k = False Then '创建表格 Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Sheet1.Cells(i, l).Value '复制第一行数据 'Sheet1.Range("a1").EntireRow.Copy Sheets(Sheets.Count).Range("a1") End If 'Sheet1.Range("a" & i).EntireRow.Copy Sheets(Sheet1.Range("d" & i).Value).Range("a" & Sheets(Sheet1.Range("d" & i).Value).Range("a65535").End(xlUp).Row + 1) Next
3、采用筛选功能,将某一类别的数据筛选出来并复制到其所对应的工作表内。
For j = 2 To Sheets.Count
Sheet1.Range("a1:f" & row_number).AutoFilter Field:=l, Criteria1:=Sheets(j).Name
Sheet1.Range("a1:f" & row_number).Copy Sheets(j).Range("a1")
Next
Sheet1.Range("a1:f" & row_number).AutoFilter
1、先选择列数
2、运行结果
1、对于输入弹框只需要一下代码,注意其输入值可以赋值给变量,并且inputbox后需要添加括号
l = InputBox("请输入你要按哪列分")
2、在删除无意义的工作表时,不能采用for循环而是用For each,
采用for循环时,会出现越界的问题,
这是因为当时你删除其中一个表格后,其后边表格数会减少即sheet2变成sheet1,最终删不干净。
3、删除工作表一定must要写:Excel.Application.DisplayAlerts = False
4、由于该项目中列数也变成的变量,
故在选择表格时,不能再使用Range,而是cells,原因如下:
选择工作表中表格的方法:
方法 | 解释 |
---|---|
Range(“a1”).select | 这里的行可以采用变量的形式,而列是采用字母表示不能采用变量 |
Cells(2,1).select | 这里选中的是第一行第二列,行号和列号均可以采用变量表示 |
5、下面展示 弹框代码
。
MsgBox "处理完毕"
Sub shi() Dim i, j, row_number, g As Integer Dim k As Boolean Dim l As Integer Dim sht As Worksheet l = InputBox("请输入你要按哪列分") row_number = Sheet1.Range("a65535").End(xlUp).Row '删除无意义的表 If Sheets.Count > 1 Then Excel.Application.DisplayAlerts = False 'For g = 2 To Sheets.Count 'Sheets(g).Delete 'Next For Each sht In Sheets If sht.Name <> "数据" Then sht.Delete End If Next Excel.Application.DisplayAlerts = True End If For i = 2 To row_number k = False For j = 1 To Sheets.Count If Sheet1.Cells(i, l).Value = Sheets(j).Name Then k = True Exit For End If Next If k = False Then '创建表格 Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Sheet1.Cells(i, l).Value '复制第一行数据 'Sheet1.Range("a1").EntireRow.Copy Sheets(Sheets.Count).Range("a1") End If 'Sheet1.Range("a" & i).EntireRow.Copy Sheets(Sheet1.Range("d" & i).Value).Range("a" & Sheets(Sheet1.Range("d" & i).Value).Range("a65535").End(xlUp).Row + 1) Next For j = 2 To Sheets.Count Sheet1.Range("a1:f" & row_number).AutoFilter Field:=l, Criteria1:=Sheets(j).Name Sheet1.Range("a1:f" & row_number).Copy Sheets(j).Range("a1") Next Sheet1.Range("a1:f" & row_number).AutoFilter MsgBox "处理完毕" Sheet1.Select End Sub
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。