zoukankan      html  css  js  c++  java
  • 操作单元格对象2——Excel之VBA(6)

    知识回顾:

    cells(n,m) 行n,列m选择单元格

    当前面分表用循环来做,工作量大,需要逐条扫描,可用筛选快速高效

    一、AutoFilter 筛选语句

    AutoFilter 

    参数:

    •Field:=4
    •Criteria1:="一车间"

    示例:Range("$A$1:$F$100").AutoFilter 

    牛刀小试:数据按分列方式拆分多表

    要点:
      新建表时回避重名错误
      使用筛选来拆分工作表
      多表合并

     

    代码过程:

    '条件:表已经做好,筛选数据即可
    
    Sub chaifen()
    
    Dim i As Integer
    
    For i = 2 To Sheets.Count
    
      Sheets(1).Range("a1:f1048").AutoFilter Field:=4, Criteria1:=Sheets(i).Name
      Sheets(1).Range("a1:f1048").Copy Sheets(i).Range("a1")
    
    Next
    Sheets(1).Range("a1:f1048").AutoFilter
    
    End Sub
    '添加新表代码
    
    Sub newSheet()
    
    '第一种方式
    
    Sheets.Add after:=Sheets(Sheets.Count)
    
    Sheets(Sheets.Count).Name = "345"
    
    '两种方式,第二种为简写
    
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "678"
    
    End Sub
    'msgbox消息盒子弹窗
    
    'inputbox自定义输入盒子弹窗
    
    Sub test()
    
    ' MsgBox "Hello World"
    ' InputBox "你几岁了"
    
    Dim i As Integer
    
    i = InputBox("请输入你的年龄")
    MsgBox "原来你今年" & i & "岁了"
    
    End Sub
    '条件:制表次数已确定
    
    '新建表时回避重名错误
    
    Sub newSheet()
    
    Dim sht As Worksheet
    Dim k As Integer
    
    '按某项制表,制表次数
    
    For i = 1 To 18
    
      '设置重名标识k
    
      k = 0
    
      '遍历表名,查找重名
      For Each sht In Sheets
        If sht.Name = Sheet1.Range("a" & i) Then
          k = 1
        End If
      Next
      '无重名表,执行下一步
      If k = 0 Then
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Sheet1.Range("a" & i)
      End If
    
    Next
    
    End Sub
    '制表次数不确定
    
    Sub newsheet()
    
    Dim sht As Worksheet
    Dim k, i, j As Integer
    
    Dim irow As Integer '这个说的是一共多少行
    
    '自查找制表行数
    
    irow = Sheet1.Range("a65535").End(xlUp).Row
    
    
    '拆分表,制表
    For i = 2 To irow
      k = 0
    
      '遍历表名,查找重名
      For Each sht In Sheets
        If sht.Name = Sheet1.Range("d" & i) Then
        k = 1
        End If
      Next
      '无重名表,制表
      If k = 0 Then
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Sheet1.Range("d" & i)
      End If
    
    Next
    
    '进入筛选,拷贝数据
    For j = 2 To Sheets.Count
    
    
      Sheets(1).Range("a1:f" & irow).AutoFilter Field:=4, Criteria1:=Sheets(j).Name
      Sheets(1).Range("a1:f" & irow).Copy Sheets(j).Range("a1")
    
     
    
    Next
    '关闭筛选
    Sheets(1).Range("a1:f" & irow).AutoFilter
    
     
    
    End Sub
    Sub newsheet()
    
    
    Dim sht As Worksheet
    Dim k, i, j As Integer
    Dim irow As Integer '这个说的是一共多少行
    Dim n As Integer '按第n列来分
    
    
    n = InputBox("请输入您要分类的列号")
    
    '删除先前分列数据
    Application.DisplayAlerts = False
    
    If Sheets.Count > 1 Then
    '    For Each sht In Sheets
    '        If sht.Name <> "数据" Then
    ''            sht.Delete
    '        End If
    '    Next
        For m = Sheets.Count To 2 Step -1
        '这里注意:如果正序删除,会发生越界,因为,后面的表往前走了,表号有变
             Sheets(m).Delete
        Next
    End If
    
    Application.DisplayAlerts = True
    
    '取数据总行号
    irow = Sheet1.Range("a65535").End(xlUp).Row
    
    '拆分表
    For i = 2 To irow
        k = 0
        For Each sht In Sheets
            'If sht.Name = Sheet1.Range("d" & i) Then
            If sht.Name = Sheet1.Cells(i, n) Then
                k = 1
            End If
        Next
            
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            'Sheets(Sheets.Count).Name = Sheet1.Range("d" & i)
            Sheets(Sheets.Count).Name = Sheet1.Cells(i, n)
        End If
        
    Next
    
    '进入筛选,拷贝数据
    For j = 2 To Sheets.Count
    
        'Sheets(1).Range("a1:f" & irow).AutoFilter Field:=4, Criteria1:=Sheets(j).Name
        Sheets(1).Range("a1:f" & irow).AutoFilter Field:=n, Criteria1:=Sheets(j).Name
        Sheets(1).Range("a1:f" & irow).Copy Sheets(j).Range("a1")
    
            
    
    Next
    '关闭筛选
    Sheets(1).Range("a1:f" & irow).AutoFilter
    
    Sheets(1).Select
    MsgBox "分列已处理完成,牛逼不"
    
    
    End Sub

    续:

  • 相关阅读:
    用Python计算最长公共子序列和最长公共子串
    两个有序数列,求中间值 Median of Two Sorted Arrays
    python判断平衡二叉树
    经验之谈:如何为你的机器学习问题选择合适的算法?
    跑道没了,它们还在跑:澳门赛狗业的遗孤
    钉钉:工作的归工作,生活的…也归工作?
    假·照骗,真·社交焦虑
    苹果市值破万亿,iPhone 会涨价吗?
    写日志(log)
    多维数组排序
  • 原文地址:https://www.cnblogs.com/zeon/p/13997911.html
Copyright © 2011-2022 走看看