精华内容
下载资源
问答
  • Excel的多行或者多列删除

    系统:Windows 7
    软件:Excel 2010

    • 这个系列集锦了一些常用功能
    • 今天说说对多行多列的删除操作
    • 重点强调如何表示多行或者多列

    数据源形式
    这里写图片描述

    Part 1:多行删除

    1. 通过RowsRange两种方法都可以
    2. 多行使用行号数字来表示,注意需将行号放入双引号中""
    Sub 多行删除()
        Set te = ThisWorkbook.Worksheets("示例")
        'te.Rows("3:5").Delete Shift:=xlUp
        te.Range("3:5").Delete Shift:=xlUp
    End Sub

    执行效果
    这里写图片描述

    Part 2:多列删除

    1. 通过ColumnsRange两种方法都可以
    2. 列号使用字母表示,注意需将行号放入双引号中""
    3. 当使用数字表示列号时,报错
    Sub 多列删除()
        Set te = ThisWorkbook.Worksheets("示例")
        te.Columns("B:D").Delete Shift:=xlToLeft
    '    te.Range("B:D").Delete Shift:=xlToLeft
    End Sub

    执行效果
    这里写图片描述

    列号采用数字报错信息
    这里写图片描述

    Part 3:列号的字母表示

    1. 在某些情况下我们只有列号的数字表示怎么办(例如Match函数结果)​?
    2. 使用Address结合Split函数即可解决该问题
    3. 示例中28列对应的列号为AB
    Sub 列号获取()
        Set te = ThisWorkbook.Worksheets("示例")
        cell_addr = te.Cells(1, 28).Address
        col_name = Split(cell_addr, "$")(1)
        Debug.Print (cell_addr)
        Debug.Print (col_name)
    End Sub

    执行效果
    这里写图片描述

    以上为本次的学习内容,下回见

    如发现有错误,欢迎留言指出。文章定位:“字典查询类”


    更多原创请关注微信公众号

    扫描二维码,关注公众号
    让重复工作一键化,让时间更有意义
    这里写图片描述

    展开全文
  • word、wps中使用vba删除所有表格指定列 处理word表格搞得人头大,找时间百度一波写了个函数处理标记删除的问题,根据这一套逻辑还可以实现很功能,供各位参考。 要点: 双循环遍历所有表表头 InStr函数匹配具体...

    word、wps中使用vba删除所有表格指定列


    处理word表格搞得人头大,找时间百度一波写了个函数处理标记删除的问题,根据这一套逻辑还可以实现很多功能,供各位参考。

    要点:
    双循环遍历所有表表头
    InStr函数匹配具体内容(word表格多半有特殊字符,相等匹配较难保证)
    在内循环结束后进行删除,否则将出错

    用法:
    1、定义条件,如 InStr(value1, “学号”),多条件拼接(如 InStr(value1, “学号”)>0 or InStr(value1, “姓名”) >0)
    2、新建宏名range,粘贴内容到vba编辑器
    3、执行

    效果:
    在这里插入图片描述

    代码:

    
    
    'ver 2.0
    
    Sub range()
    '遍历文档所有表格,删除表头第一行含有特定字符串的列
    Dim value1 As String
    Dim target() As Integer
    For i = 1 To ActiveDocument.Tables.Count
      Dim targetLen As Integer
      targetLen = 0
      For j = 1 To ActiveDocument.Tables(i).Columns.Count
         value1 = ActiveDocument.Tables(i).Columns(j).Cells(1).range.Text
         '这里定义条件,可以定义多个条件
         If InStr(value1, "测试") > 0 or InStr(value1, "学号") > 0 Then
         targetLen = targetLen + 1
         ReDim Preserve target(targetLen)
         target(targetLen - 1) = j
         Else
         End If
      Next j
      If targetLen <> 0 Then
      ' MsgBox targetLen
        ' 修正删除操作带来的列号偏移
       Dim shift As Integer
       shift = 0
       For k = 0 To (targetLen - 1)
         ' MsgBox target(k)
           ActiveDocument.Tables(i).Columns(target(k) - shift).Delete
           shift = shift + 1
        Next k
      End If
    Next i
        MsgBox ("执行完毕。")
    End Sub
    

    使用过程中遇到复合表格遍历报错问题,修改加入错误处理跳过
    (注意,因需求变动这里已经改成了匹配第一列,如仍需匹配第一行,请按上一段代码循环条件设置)

    'ver 3.0
    Dim value1 As String
    Dim target() As Integer
    For i = 1 To ActiveDocument.Tables.Count
      'MsgBox ("遍历表 " & i & "。")
      Dim targetLen As Integer
      targetLen = 0
      For j = 1 To ActiveDocument.Tables(i).Rows.Count
         On Error GoTo flag
         value1 = ActiveDocument.Tables(i).Rows(j).Cells(1).range.Text
         '这里定义条件
         If InStr(value1, "test1") > 0 Or InStr(value1, "test2") > 0  Then
         targetLen = targetLen + 1
         ReDim Preserve target(targetLen)
         target(targetLen - 1) = j
         Else
         End If
      Next j
      If targetLen <> 0 Then
      ' MsgBox targetLen
        ' 修正删除操作带来的列号偏移
       Dim shift As Integer
       shift = 0
       For k = 0 To (targetLen - 1)
         ' MsgBox target(k)
           ActiveDocument.Tables(i).Rows(target(k) - shift).Delete
           shift = shift + 1
        Next k
      End If
    flag:
        Resume continue
    continue:
    Next i
        MsgBox ("执行完毕。")
    End Sub
    

    如需删除而非跳过复合行,则删除代码需换成下列实现形式

     With ActiveDocument
            .Tables(1).Cell(2, 2).Delete ShiftCells:=wdDeleteCellsEntireRow
        End With
    
    展开全文
  • VBA 按照某一进行筛选拆分数据,拆分成个表或个Sheet,按某检查重复生成新的Sheet,删除除本表外的所有表
  • 本工具可以一次性删除同一文件夹下(与本程序所在同一文件夹)所有同一格式的CSV文件指定列,效率还可以。是一个不错的CSV格式文件整理工具。
  • 假如某一包含多种重复单元,但是重复的单元对应的其它却不相同,需求便是指定某一,寻找其中相同的元素,对两行元素进行合并。如下图所示的源数据, 可以看到,该Excel表格的A有很重复项,对他们进行合并...

    合并需求

    假如某一列包含多种重复单元,但是重复的单元对应的其它列却不相同,需求便是指定某一列,寻找其中相同的元素,对两行元素进行合并。如下图所示的源数据,
    在这里插入图片描述
    可以看到,该Excel表格的A列有很多重复项,对他们进行合并,其它列直接连接起来,效果如下图所示。

    在这里插入图片描述

    解决方案

    在这里提供一个可设定的解决方案,也是一个SUB子程序。源代码如下。

    Sub mergeCategoryValues()
        Dim lngRow As Long
    
        With ActiveSheet
            Dim columnToMatch As Integer: columnToMatch = 1       'Indicates the column to Match
            Dim columnToConcatenateDown As Integer: columnToConcatenateDown = 2   'Indicates the up column to Concatenate
            Dim columnToConcatenateUp As Integer: columnToConcatenateUp = 6         'Indicates the down column to Concatenate
            lngRow = .Cells(Rows.Count, columnToMatch).End(xlUp).Row      'Calculate the Rownum of last line
            .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes     'Sort the column to match in order to make the same value appear at the same time
    
            Do
                If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then           'If this line equals to next line of this line
                    For i = columnToConcatenateDown To columnToConcatenateUp                        'Concatenate column by column
                        .Cells(lngRow - 1, i) = .Cells(lngRow - 1, i) & Chr(10) & .Cells(lngRow, i)
                    Next i
                    .Rows(lngRow).Delete                                        'Delete the Row which has been copied
                End If
                lngRow = lngRow - 1                                         'From last to first
            Loop Until lngRow = 1                                           'Until to first
        End With
    End Sub
    

    mergeCategoryValues主要就是满足了上述的多行合并需求。因为我在网络上所搜索到的程序大都有很多问题,而这个例程没有BUG,而且会有很详细的代码注释,可以帮助你们进行二次开发。中文代码注释如下:

    Sub mergeCategoryValues()
        Dim lngRow As Long
        With ActiveSheet
            Dim columnToMatch As Integer: columnToMatch = 1       'Indicates the column to Match 选择匹配列
            Dim columnToConcatenateDown As Integer: columnToConcatenateDown = 2   'Indicates the up column to Concatenate 选择想要连接的左列 
            Dim columnToConcatenateUp As Integer: columnToConcatenateUp = 6         'Indicates the down column to Concatenate 选择想要连接的右列,例如我要匹配第一列,对应相同元素的第二列到第五列进行连接 那么 columnToConcatenateDown = 2, columnToConcatenateUp = 5
            lngRow = .Cells(Rows.Count, columnToMatch).End(xlUp).Row      'Calculate the Rownum of last line 计算指定匹配列的最后一行的行数
            .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes     'Sort the column to match in order to make the same value appear at the same time 对匹配列进行排序,使得相同的元素得以同时出现
    
            Do
                If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then           'If this line equals to next line of this line 如果匹配列两个相邻元素相等,那么触发合并程序
                    For i = columnToConcatenateDown To columnToConcatenateUp                        'Concatenate column by column 对连接列进行遍历
                        .Cells(lngRow - 1, i) = .Cells(lngRow - 1, i) & Chr(10) & .Cells(lngRow, i)   '进行连接,并使用Chr(10)作为分隔符
                    Next i
                    .Rows(lngRow).Delete                                        'Delete the Row which has been copied 删除已经被合并的列
                End If
                lngRow = lngRow - 1                                         'From last to first
            Loop Until lngRow = 1                                           'Until to first
        End With
    End Sub
    
    

    希望该方法可以帮到你,有问题评论区见,我很快会回复。

    展开全文
  • 要使用VBA,首先打开你的Excel电子表格,然后将Microsoft Visual Basic窗口打开,这样才能使用VBA代码!  方法是:在Excel中直接按下组合键Alt F11即可打开VB窗口,倘若VB默认没有打开代码窗口,请执行操作:...

    要使用VBA,首先打开你的Excel电子表格,然后将Microsoft Visual Basic窗口打开,这样才能使用VBA代码!

      方法是:在Excel中直接按下组合键Alt F11即可打开VB窗口,倘若VB默认没有打开代码窗口,请执行操作:“视图”→“代码窗口”即可!

      好了,环境都设置好了,下面来学习如题所示的操作吧!

      代码1#8212;删除第8个单元格为空的行,范围从1行到88行:
    ----------------------------------------------------------
     Sub DeleteEmptyRow '删除指定的单元格为空的行
      Dim i As Integer
      For i = 88 To 1 Step -1
       If Cells(i, 8) = "" Then
        Sheets("sheet1").Rows(i).Delete
       End If
      Next i
     End Sub
    ----------------------------------------------------------
      代码解释:

      For i = 88 To 1 Step -1 '循环语句,从第88行一直检查到第1行
      If Cells(i, 8) = "" Then '如果当前行的第8列的值为空值,那么就删除该行!i是变量,随着循环而变,其值从88逐渐减小到1

      代码2#8212;删除第6个单元格为空的列,范围从1列到66列:
    ----------------------------------------------------------
     Sub DeleteEmptyColmn() '删除指定的单元格为空的列
      Dim i As Integer
      For i = 66 To 1 Step -1
       If Cells(i, 6) = "" Then
        Sheets("sheet1").Columns(i).Delete
       End If
      Next i
     End Sub
    ----------------------------------------------------------
      代码解释:与上面的代码类似,不再解释!

      知识扩展:

      以上两种代码仅删除sheet1工作表满足条件的空行空列,如果要一次性删除多个工作表的满足条件的空行和空列呢?

      同样道理,只要再代码外面再使用一个循环即可!

    ----------------------------------------------------------

     Sub DeleteEmptyRowAndColmn() '删除指定的单元格为空的行
      Dim i As Integer
      For j = 1 To 3
       For i = 88 To 1 Step -1
        If Cells(i, 6) = "" Then
         Sheets(j).Columns(i).Delete
        End If
       Next i
      Next j
     End Sub

    相关参考

    VBA语言基础

    各种Excel VBA的命令

    VB6 中将数据导出到 Excel 提速之法

    VBA语法200

    各种Excel VBA的命令

    Execl编程详解

      VB

     VB软件操作EXCELVB全面控制Excel

    展开全文
  • listbox 如何指定多列内容 ? 没有columnSource 属性 只有columncount属性 可以在rowsource指定一个区域 设置列宽度,sheListBox1.ColumnWidths = "50;100;50" '实测用两种分隔都可以 "50,100,50" Private ...
  • 函数作用:返回指定列数的标.......................42 '13.函数作用:用指定字符替换某字符.....................43 '14.函数作用:从右边开始查找指定字符在字符串中的位置...43 '15.函数作用:从右边开始查找指定...
  • Sub test() Dim begin As Integer Dim endValue As Integer Dim jg As Integer begin = 3 '开始行 ... jg = 1 '间隔 '千万不要以为是2,因为当第3行被删除后,第5行已经变成了第4行 Dim i As Int
  • Sub getWidth() Dim cellwidth As Long '获取F列宽 cellwidth = Range("F:F").ColumnWidth... '把原来的F列宽加到E,也就是设置E列宽为E和F的列宽之和 Range("E:E").ColumnWidth = Range("E:E").Col...
  • "*.xls") '依次找寻指定路径中的*.xls文件 Do While myFile <> "" '当指定路径中有文件时进行循环 If myFile <> ThisWorkbook.Name Then Set AK = Workbooks.Open(myPath & myFile) '打开符合要求的文件 Range("a...
  • 工作中经常遇到对word的批量操作,如果重复的操作达到上百甚至更后,也是不小的工作量,在此可以使用word的宏来自动执行重复的操作,提高办公效率,特写文档举说明具体使用
  • 首先,将需要拆分的sheet命名为“明细”,接下来运行此代码,按提示操作即可。 在这里插入代码片 Sub chaifen() '定义变量类型 Dim sht, sh1, sh2 As Worksheet ...'程序开始是要求输入按哪一拆分数...
  • 有同学问:能不能使用union函数将符合条件的单元格所在行全部选中,然后删除. 如下图:删除黄色底纹的标题行 为此,给出代码如下: Sub test() Dim arr, myrow As String Dim cc As Variant, ran As Range r = Sheet...
  • copy不指定位置默认新建一个工作簿Activeworkbook.SaveAs filename:=”d\data\”& sht.name & ”.xlsx” //文件路径Activeworkbook.close//关闭Nextend sub 结果如下图: 对数据分析或者vba有兴趣的朋友可以...
  • VBA删除空行和空

    千次阅读 2009-04-10 09:02:00
    在Excel中删除空行和空的方法有很,下面的方法是用VBA代码来删除工作表指定区域中的空行和空:Option Explicit Sub Delete_Empty_Rows() Dim rnArea As Range Dim lnLastRow As Long, i As Long, j As Long...
  • 今天要说的这段代码呢,同样是因为同事妹子有需求而...那么如果有很多列并且每一列都要这样做,是不是瞬间觉得不会再爱了→。→ 为了生动形象,我特意做了个表格。就像下图这样,类似红框里这种情况都要去合并单元格。
  • 在exce中删除空行和空的方法有很,相对而言删除空行较为简单,只需进行筛选,将空白行筛选出来,删除即可,但要删除比较困难。因为你不能按进行筛选删除。Excel中没有这个功能。当然你可以用另外一种方法...
  • 当工作表中的数比较,而且数、的位置经常变动时,如果在VBA代码中使用的静态指定的列名,将不得不经常改动VBA代码,非常不方便。 解决方法: 使用自定义号、列名查找函数。 代码如下: 1. 号查找...
  • VBA遍历指定文件夹的所有文件(包括子目录)

    万次阅读 多人点赞 2018-12-29 13:53:14
    VBA遍历指定文件夹的所有文件(包括子目录) 1.添加引用:Microsoft Scripting Runtime
  • 原表格用于公司员工的工资表格,工资项目合并在一起并删除一些指定不要的项目,通过vba的宏运行快速表格数据重新关联筛选、计算、合并
  • ​EXCEL是由很的对象组成,每个对象都有他的属性和方法,所谓的对象可以理解为所有存在的东西,在同一个程序里的对象之间是存在关系的,比如说上下级关系或同级关系,上下级关系之间用英文句点“.”连接。...
  • VBA 是一种很久远的编程语言,但并不过时。在满足以下两个条件时,借助 VBA 可以极大的提升生产率,降低出错率:你的电脑上不允许自主安装软件; 你需要执行的工作中大部分的步骤都是固定且重复的。项目背景近期接到...
  • '每个表格只能有一个红色的行,有个只处理第一个 Dim tb As Table, cl As Cell For Each tb In ActiveDocument.Tables For Each cl In tb.Range.Cells If cl.Range.Font.Color = 255 Then cl.Row.Delete ...
  • 实例需求:数据保存在A中,需要在其中提取组数据分别写入B:E中。如果A数据以反斜杠结尾,例如A4单元格100g787×1092-白牛皮沙龙纹A/,提取物料名称时需要去除末尾的反斜杠;对于非反斜杠结尾的数据,年提取...
  • 学习资源:《Excel VBA从入门到进阶》第59集 by兰色幻想 本节学习Listview控件,它可以用多种视图方式显示项目的控件。由于其外形美观而且非常实用,所以使用频率很高。 Listview控件需要添加到控件工具箱才能插入和...
  • 前言成堆的数据如何导入Excel进行分析?...使用的比较的有:文档操作: 虽然大家都是操作 Excel,但即使最基本的新建文件、修改文件、保存文件等功能,在不同的库中也存在差异。比如 xlsxwriter 并不...
  • ExcelVBA使用删除重复项获取不重复记录 关注微信公众号:VBA168 每天更新Excel VBA经典代码,祝你工作和学习更轻松! 利用单元格区域的RemoveDuplicates方法可以去除重复值,从而获取不重复值列表,如下图所示。 ...
  • 问题 左上角为a1 比如其中,key2 ,key4, key6 后面都可能带空格 key1 key2 key3 key4 key5 key6 key7 key8 key9 key10 key11 key12 key10 key10 ...VBA方法 所有的工...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,355
精华内容 942
关键字:

vba删除指定多列