需求:
1.根据一定条件进行筛选,把筛选的结果放到新的工作表中
2.根据筛选条件命名工作表
3.删除空表
4.删除第六列、第七列都是-99的行
第一次用VBA,现查现用,
Sub 宏1()
' 宏1 宏 0 1
Selection.AutoFilter //开启筛选
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=2, Criteria1:="string01" //条件筛选
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=3, Criteria1:="9010" //条件筛选
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=4, Criteria1:="0" //条件筛选
Range("A1:N65536").Select //选中一个区域的单元格
Selection.Copy //复制选中区域
Sheets.Add After:=ActiveSheet //在活动工作表(当前工作表)后面新建一个工作表
ActiveSheet.Paste //新建工作表后,活动工作表就换成了新建的工作表,粘贴复制的单元格区域
Rows("1:1").Select //选中第一行
Application.CutCopyMode = False //把复制剪切模式设为false,
Selection.Delete Shift:=xlUp //删除选中的第一行
' ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=6, Criteria1:="-99"
' ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=7, Criteria1:="-99"
' ActiveSheet.Range("a1:a" & ActiveSheet.UsedRange.Rows.Count).EntireRow.SpecialCells(xlVisible).Delete
//想做个筛选,然后删除筛选的结果,但是筛选条件不一定存在,没成功
Sheets("Sheet1").Select //新建的工作表名称为Sheet1
Sheets("Sheet1").Name = "string01-9010-0" //重命名工作表Sheet1
Sheets("test6g20_gun_status").Select //返回最初的工作表,因为对最初的工作表还有后续操作
ActiveWindow.SmallScroll Down:=-160 //滚动条向上滚动
Selection.AutoFilter
//取消筛选,开启筛选和取消筛选应该是同一条命令,发一次命令开启筛选,再发一次命令取消筛选
newHour = Hour(Now()) //新的小时参数为当前小时
newMinute = Minute(Now()) //新的分钟参数为当前分钟
newSecond = Second(Now()) + 2 //新的秒参数为当前秒加2
waitTime = TimeSerial(newHour, newMinute, newSecond) //等待的时间长度
Application.Wait waitTime //等待waitTime的时间长度,再进行后续操作,复制粘贴操作需要时间
End Sub
---------------------------------------------------------------------------分割线-------------------------------------------------------------------------------
上次数据要的急,用的笨办法,半自动半手工处理的,然后发现错了个参数,改脚本的话费劲,就从头重写了一遍脚本,代码简洁,效率提高,大神别笑
Sub proc()
'长文件名
//定义三个数组
iI = Array("string01", "string02", "string03", "string04", "string05", "string06")
jI = Array("9010", "9011", "9013", "9014", "9015", "9016", "9018", "9019", "9020", "9024", "9025", "9026", "9027", "9028", "9029")
kI = Array("1", "2")
Selection.AutoFilter //开启筛选
For Each i In iI //三重循环嵌套,依次筛选
For Each j In jI
For Each k In kI
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=2, Criteria1:=i //筛选
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=3, Criteria1:=j //筛选
ActiveSheet.Range("$A$1:$N$65536").AutoFilter Field:=4, Criteria1:=k //筛选
Dim str1 As String
Range("A1:N65536").Select //选中一个区域
Selection.Copy //复制选中区域
Sheets.Add After:=ActiveSheet //在当前工作表后面新建一个工作表
ActiveSheet.Paste //在新建的工作表中粘贴
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
waitTime = TimeSerial(newHour, newMinute, newSecond) //等待1s时间
Application.Wait waitTime
Rows("1:1").Select //选中第一行
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp //删除选中的区域
ActiveSheet.Select
str1 = CStr(i) & CStr(j)
ActiveSheet.Name = str1 & CStr(k) //组合三个参数,作为当前工作表的名称
If IsEmpty(ActiveSheet.UsedRange) Then ActiveSheet.Delete //删除空工作表
Sheets("test6g25_gun_status").Select //返回最初的工作表,进行下一次循环
ActiveWindow.SmallScroll Down:=-160
Selection.AutoFilter
Next
Next
Next
End Sub