VBA代码记录1

需求:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章