首页 > 其他分享 >EXCEL 宏 收集

EXCEL 宏 收集

时间:2023-02-18 08:11:05浏览次数:38  
标签:End 收集 EXCEL rng last row col first

Sub CheckTableCells()
Application.DisplayAlerts = False
Dim sht As Worksheet
   Dim i, j As Integer

For i = 1 To 284

If (Range("e" & i).Value = "") Then
  If (Range("a" & (i + 1)).Value = "") Then
  If (Range("b" & (i + 1)).Value <> "") Then
  If (Range("c" & (i + 1)).Value = "") Then
   Range("e" & i).Value = Range("b" & (i + 1)).Value
   Rows(i + 1).Delete
   End If
   End If
   End If
   End If
Next
End Sub
Sub CheckTableCells1()
Application.DisplayAlerts = False
Dim sht As Worksheet
   Dim i, j As Integer

For i = 1 To 539

If (Range("e" & i).Value = "") Then
  If (Range("d" & (i)).Value <> "") Then
   Range("e" & i).Value = Range("d" & (i)).Value
   Range("d" & i).Value = ""
   End If
   End If
Next
End Sub
Sub 删除工作表所有空列()
    Dim first_col, last_col, i
    first_col = ActiveSheet.UsedRange.Column
    last_col = first_col + ActiveSheet.UsedRange.Columns.Count - 1
    For i = last_col To first_col Step -1   '倒序循环
        If WorksheetFunction.CountA(Columns(i)) = 0 Then
            Columns(i).Delete  '删除列
        End If
    Next
End Sub

Sub 删除工作表所有空行()
    Dim first_row, last_row, i
    first_row = ActiveSheet.UsedRange.Row
    last_row = first_row + ActiveSheet.UsedRange.Rows.Count - 1
    For i = last_row To first_row Step -1   '倒序循环
        If WorksheetFunction.CountA(Rows(i)) = 0 Then
            Rows(i).Delete  '删除行
        End If
    Next
End Sub
Sub 删除选中单列包含指定字符的行()
    '选中单列整列、单列部分都支持
    Dim rng As Range, arr, first_row, last_row, first_col, i, j
'--------------------参数填写:arr,指定条件字符串数组;title_row,表头行数
    '要删除的字符串数组,空值为删除空单元格,可使用模式匹配
    'arr = Array("*一", "*三", "*五")
    arr = Array("*样本", "*三", "*五")
    title_row = 1        '表头行数,不执行删除
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算
    If rng.Columns.Count > 1 Then Debug.Print "仅支持单列": Exit Sub  '仅支持单列,多列则退出
    first_row = WorksheetFunction.Max(title_row, rng.Row)  '表头行与选中区域开始行号的大值
    last_row = rng.Row + rng.Rows.Count - 1  '选中区域结束行号
    first_col = rng.Column  '选中区域开始列号
    
    If rng.Row = 1 Then  '选中单列整列
        For i = last_row To title_row + 1 Step -1  '倒序循环
            For Each j In arr
                '只要有一个符合,就删除
                If Cells(i, first_col) Like j Then Rows(i).Delete
            Next
        Next
    ElseIf rng.Row > 1 Then  '选中单列部分
        For i = last_row To first_row Step -1  '倒序循环
            For Each j In arr
                If Cells(i, first_col) Like j Then Rows(i).Delete
            Next
        Next
    End If
End Sub
Sub 删除选中单列包含指定字符的行()
    '选中单列整列、单列部分都支持
    Dim rng As Range, del_rng As Range, arr, first_row&, last_row&, first_col&, i&, j
'--------------------参数填写:arr,指定条件字符串数组;title_row,表头行数
    '要删除的字符串数组,空值为删除空单元格,可使用模式匹配
    arr = Array("1")
    title_row = 1        '表头行数,不执行删除
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算
    If rng.Columns.Count > 1 Then Debug.Print "仅支持单列": Exit Sub  '仅支持单列,多列则退出
    first_row = WorksheetFunction.Max(title_row, rng.Row)  '表头行与选中区域开始行号的大值
    last_row = rng.Row + rng.Rows.Count - 1  '选中区域结束行号
    first_col = rng.Column: tm = Timer    '选中区域开始列号
    
    If rng.Row = 1 Then  '选中单列整列
        For i = title_row + 1 To last_row
            For Each j In arr
                '只要有一个符合,就删除
                If CStr(Cells(i, first_col).Value) Like j Then
                    If del_rng Is Nothing Then
                        Set del_rng = Rows(i)
                    Else
                        Set del_rng = Union(del_rng, Rows(i))
                    End If
                End If
            Next
        Next
    ElseIf rng.Row > 1 Then  '选中单列部分
        For i = first_row To last_row
            For Each j In arr
                If CStr(Cells(i, first_col).Value) Like j Then
                    If del_rng Is Nothing Then
                        Set del_rng = Rows(i)
                    Else
                        Set del_rng = Union(del_rng, Rows(i))
                    End If
                End If
            Next
        Next
    End If
    If Not del_rng Is Nothing Then del_rng.Delete
    Debug.Print "删除完成用时:" & Format(Timer - tm, "0.00")  '耗时
End Sub
Sub 删除选中单列不含指定字符的行()
    '选中单列整列、单列部分都支持
    Dim rng As Range, arr, first_row, last_row, first_col, i, j, del_if As Boolean
'--------------------参数填写:arr,指定条件字符串数组;title_row,表头行数
    '要保留的字符串数组,空值为保留空单元格,可使用模式匹配
    arr = Array("*一", "*三", "*五")
    title_row = 1        '表头行数,不执行删除
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算
    If rng.Columns.Count > 1 Then Debug.Print "仅支持单列": Exit Sub  '仅支持单列,多列则退出
    first_row = WorksheetFunction.Max(title_row, rng.Row)  '表头行与选中区域开始行号的大值
    last_row = rng.Row + rng.Rows.Count - 1  '选中区域结束行号
    first_col = rng.Column  '选中区域开始列号
    
    If rng.Row = 1 Then   '选中单列整列
        For i = last_row To title_row + 1 Step -1  '倒序循环
            del_if = True   '初始为删除
            For Each j In arr
                '只要有一个符合,就不删除
                If Cells(i, first_col) Like j Then del_if = False: Exit For
            Next
            '都不符合,删除
            If del_if Then Rows(i).Delete
        Next
    ElseIf rng.Row > 1 Then  '选中单列部分
        For i = last_row To first_row Step -1  '倒序循环
            del_if = True    '初始为删除
            For Each j In arr
                If Cells(i, first_col) Like j Then del_if = False: Exit For
            Next
            If del_if Then Rows(i).Delete
        Next
    End If
End Sub
Sub 选中列去重()
    '适用单/多列选中、单/多列部分选中,去重删除整行
    Dim rng As Range, dict As Object, first_row, last_row, first_col, last_col, i, j, res
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算
    first_row = rng.Row     '选中区域开始行号
    last_row = first_row + rng.Rows.Count - 1  '选中区域结束行号
    first_col = rng.Column  '选中区域开始列号
    last_col = first_col + rng.Columns.Count - 1  '选中区域结束列号
    Set dict = CreateObject("scripting.dictionary")
    
    For i = last_row To first_row Step -1   '倒序循环,避免遗漏
        res = ""
        For j = first_col To last_col
            res = res & CStr(Cells(i, j).Value)
        Next
        If Not dict.Exists(res) Then  '字典键不存在,新增
            dict(res) = ""
        Else
            Rows(i).Delete  '删除行
        End If
    Next
    
End Sub

 

标签:End,收集,EXCEL,rng,last,row,col,first
From: https://www.cnblogs.com/xkdn/p/17131927.html

相关文章

  • STATA CFPS变量列表导出到EXCEL整理
    SubCheckTableCells()Application.DisplayAlerts=FalseDimshtAsWorksheetDimi,jAsIntegerFori=1To284If(Range("e"&i).Value="")ThenI......
  • 算法刷题-Excel表列序号、单词拆分 II、排序链表
    Excel表列序号(数学、字符串)给你一个字符串columnTitle,表示Excel表格中的列名称。返回该列名称对应的列序号。例如,A->1B->2C->3...Z->26AA->27AB->......
  • java在线读取Excel内容
    本示例采用Springboot的Thymeleaf做前台展示,核心还是java代码,想了解Thymeleaf的可以点击​​《SpringBoot入门十六,添加Thymeleaf模板支持》​​进行入门学习,这里就只做关于......
  • k8s日志收集方案
    节点系统日志            节点应用日志        节点Pod日志      通过边车容器机制共享Pod卷采集主容器的日志 ......
  • 2023前端开发最新面试题收集-Javascript篇
    前台、中台、后台-前台:面向用户、客户可以感知的,如商城-中台:可以看着对前台的补充,公共服务功能,如支付系统、搜索系统、客服-后台:面向运营、比如商品管理、物流管理1......
  • 2023前端开发最新面试题收集-Vue2/3篇
    Vue整理1、谈谈MVVM的理解MVC(react):数据流是单向的,View和Model之间通过controller连接通信,用户操作会请求服务器,路由拦截分发请求,调用对应的控制器controller,控制器会......
  • 2023前端开发最新面试题收集-Webpack篇
    webpack整理谈谈webpack的理解webpack是一个静态模块打包器。当webpack处理应用程序时,会递归构建一个依赖关系图,其中包括应用程序所需的所有模块,最后将这些模块打包成一......
  • 一款OutLook信息收集工具
    0x01前言这是一款burp插件,用于Outlook用户信息收集,在已登录Outlook账号后,可以使用该插件自动爬取所有联系人的信息0x02安装在burp扩展面板加载jar即可0x03 功能介绍1.A......
  • 使用Python读取Excel中的数据并进行相关性分析
    在进行数据相关分析的时候,往往面对的是复杂所庞大的数据集,这个时候,Python所完成的脚本能够帮助你方便且快捷地整理很多数据!1.你所需要的第三方库在本次实验中,你所需要的......
  • excel vba宏 函数应用
          =IF(ISNUMBER(FIND("经济学",M1)),1,0)判断单元格m1中是否包含“经济学”,如果包含值为1,不包含值为0=IF(ISNUMBER(FIND("党员",N1)),1,0)判断单元格n1......