精华内容
下载资源
问答
  • 而正确的表格,“合格”、“现场修复”和“待修”应该在第二行里,如下图所示2、想法利用VBA,遍历每一个表格,在“001”所在行的上方新增一个空白行,然后新增行及其上方一行,第1的两个单元格合并;第2的两个...

    edf470bd24997da414f7e46653f620f8.png

    Word表格批量修改,增行后合并

    1、问题描述

    碰到这样一个问题:由于制作时的失误,word文档中大量表格变成了如下图所示的样子。

    1d50df2e97c83a0cf7d22b01c4924dfa.png

    而正确的表格,“合格”、“现场修复”和“待修”应该在第二行里,如下图所示

    80b6308a70dc516eda0338c51a882050.png

    2、想法

    利用VBA,遍历每一个表格,在“001”所在行的上方新增一个空白行,然后新增行及其上方一行,第1列的两个单元格合并;第2列的两个单元格合并;第3-5列的,“001”所在行的内容移动到新增行。

    如果直接把“状态评价”所在的单元格拆分2行3列,似乎更简单,但恐怕拆分出来的三列很难和下面的三列对齐,所以放弃这个做法。

    注意:删除单元格的语句是tal.Cell(4, i).Delete;删除单元格内容tal.Cell(4, i).Range.Delete。

    3、实现代码如下:

    Sub 表格增行合并()
    Dim tal As Table, i%
    For Each tal In ActiveDocument.Tables
        tal.Rows(3).Select
        Selection.InsertRowsAbove 1 '在第三行上方增加一行
        ActiveDocument.Range(tal.Cell(2, 2).Range.Start, tal.Cell(3, 2).Range.End).Cells.Merge '合并2行和3行第2列的两个单元格
        ActiveDocument.Range(tal.Cell(2, 1).Range.Start, tal.Cell(3, 1).Range.End).Select '2行和3行第1列的两个单元格无法直接合并,要选择后,再合并
            Selection.Cells.Merge
        For i = 3 To 5
            tal.Cell(3, i).Range = Left(tal.Cell(4, i).Range, Len(tal.Cell(4, i).Range) - 2) '获得下一单元格文本,赋值给上一单元格
            tal.Cell(4, i).Range.Delete '删除下单元格内容
        next i
    Next
    End Sub

    4、逐步演示

    d3137f5081dab52f364835d49168b421.png
    https://www.zhihu.com/video/1185214936845828096

    5、一个不明问题

    “ActiveDocument.Range(tal.Cell(2, 1).Range.Start, tal.Cell(3, 1).Range.End).Cells.Merge”,这个语句不能运行,有错误提示:运行时错误‘5941’,集合所要求的成员不存在。所以只能用“ActiveDocument.Range(tal.Cell(2, 1).Range.Start, tal.Cell(3, 1).Range.End).Select Selection.Cells.Merge”代替。不知道是什么原因。

    欢迎交流讨论

    展开全文
  • Sub 新增工作表_遍历现有所有工作表_... '新增工作表,并移动到第个位置,用于写入核实首数据 Worksheets.Add.name = "核实首" Worksheets("核实首").Move before:=Sheets(1) For i = 2 To Worksheets....
    Sub 新增工作表_遍历现有所有工作表_用于核实首列数据_无视隐藏工作表()
        Dim i As Integer
        '新增工作表,并移动到第一个位置,用于写入核实首列数据
        Worksheets.Add.name = "核实首列"
        Worksheets("核实首列").Move before:=Sheets(1)
        For i = 2 To Worksheets.Count
            Worksheets(i).Activate
            Columns(1).Select
            Selection.Copy Worksheets(1).Cells(1, i)
        Next
        Worksheets(1).Activate
        '插入首行,用于写入工作表名字
        Worksheets(1).Rows(1).Insert shift:=xlDown
        For i = 2 To Worksheets.Count
            Cells(1, i).Value = Worksheets(i).name
        Next
        Cells(1, 1).Select
    End Sub

     

    展开全文
  • 基本原理是定位到月度交易流水字段,并遍历每行,调用Split()函数将字符串拆分成数组,并调用简单的交换排序确保按月份降序排列,最后将每月交易流水填入新增中。 使用方法:打开该宏文件,切换到目标excel...
  • VBA 数据透视表再了解

    2020-08-11 23:15:53
    一、如果需要增加一列原来表上没有的内容,比如说“利润”。假设利润 = 原始数据表上面的收入-费用,怎么操作呢? 主要代码和昨天的内容差不多,新增了2句话, pt.CalculatedFields.Add "利润", "=收入-费用...

    今天继续讲讲VBA数据透视表的内容。在昨天插入透视表的内容基础上,增加一点学习内容。

    一、如果需要增加一列原来表上没有的内容,比如说“利润”。假设利润 = 原始数据表上面的收入-费用,怎么操作呢?

    主要代码和昨天的内容差不多,新增了2句话,

        pt.CalculatedFields.Add "利润", "=收入-费用"
        pt.PivotFields("利润").Orientation = xlDataField

    完整代码如下所示(第四步是新增的公式列)

    Option Explicit
    
    Sub createPt2()
        Dim ptCache As PivotCache
        Dim pt As PivotTable
        
        '按照昨天的办法:第一步,创建缓存
        Set ptCache = ActiveWorkbook.PivotCaches.Create( _
            SourceType:=xlDatabase, _
            SourceData:=Sheets(1).Range("a1").CurrentRegion )
        
        '第二步:将缓存赋值给pt
        Sheets.Add
        
        Set pt = ActiveSheet.PivotTables.Add( _
        PivotCache:=ptCache, _
        tabledestination:=Range("A3"))
        
        '第三步:设置行列值
        
        
        pt.PivotFields("部门").Orientation = xlRowField
        pt.PivotFields("收入").Orientation = xlDataField
        pt.PivotFields("费用").Orientation = xlDataField
        
        '——第四步:下面就是今天要提到的,插入要计算值得列内容——
        pt.CalculatedFields.Add "利润", "=收入-费用"
        pt.PivotFields("利润").Orientation = xlDataField
        
        
        '记得加上默认值
        pt.DisplayFieldCaptions = False
    End Sub

    完成效果如下所示

    二、怎么在一张sheet上插入多张透视表呢?其实把上面的内容稍微改一下即可,因为ptCache缓存创建好了,多赋值给pt即可。

    Sub createPt3()
        Dim ptCache As PivotCache
        Dim pt As PivotTable
        
        Set ptCache = ActiveWorkbook.PivotCaches.Create( _
            SourceType:=xlDatabase, _
            SourceData:=Sheets(1).Range("a1").CurrentRegion )
        
        Sheets.Add
        
        '————一张表多插入几张透视表,咱们就在这多循环几次就是了————
        Dim i As Integer
        '公式列创建完了用这个判断,防止重复创建
        Dim flag As Boolean
        
        flag = False
        For i = 1 To 5
            Set pt = ActiveSheet.PivotTables.Add( _
            PivotCache:=ptCache, _
            tabledestination:=Range(Cells(i * 7 - 4, 1), Cells(i * 7 - 4, 1)))
            '当然了上面要创建数据透视表的位置不能和以前一样固定在A3位置了
            
            pt.PivotFields("部门").Orientation = xlRowField
            pt.PivotFields("收入").Orientation = xlDataField
            pt.PivotFields("费用").Orientation = xlDataField
            
            '创建一次利润公式
            If flag = False Then
                pt.CalculatedFields.Add "利润", "=收入-费用"
                flag = True
            End If
            pt.PivotFields("利润").Orientation = xlDataField
            '记得加上默认值
            pt.DisplayFieldCaptions = False
        Next
    End Sub

    创建完了的结果如下所示(当然了如果需要每个都长得不一样,可别直接这样循环)

     

     

     

    展开全文
  • 如何使用VBA实现excel内容处理、sheet页内内容处理1、获取总行数和总数2、查找关键字所在3、查找不到关键字的反馈处理4、判断中是否存在合并单元格5、判断中是否存在空单元格6、判断中是否存在重复...

    一、sheet页内内容处理

    1、获取总行数和总列数

    (1)总行数

    ActiveSheet.UsedRange.Rows.Count
    

    (2)总列数

    ActiveSheet.UsedRange.Columns.Count
    

    2、查找关键字所在列

    (1)查找列号👉方法1

    Num = Application.Range("2:2").Find("关键字").Column
    

    (2)查找列号👉方法2

    For Each col In Range("2:2")  
    	If col.Value = "关键字"  Then 
    		Num  = col.Column
    	End If
    Next
    

    (3)列号转列名

    CName = Replace(Cells(1, Num).Address(0, 0), "1", "")
    

    3、查找不到关键字的反馈处理

    在第2行所有单元格中查找

    k = 0
    For Each cel In Range("2:2")
        If cel = “关键字” Then
            k = k + 1
        End If
    Next
    If k = 0 Then
        MsgBox "找不到关键字,程序即将退出..."
        Exit Sub
    End If
    

    4、判断列中是否存在合并单元格

    对列CName ,从第3行开始,逐行检查直到第n行

    For Each cel In Range(CName & "3:" & CName & n)
        If cel.MergeCells Then
            MsgBox "列存在合并的单元格,请检查!"
        End If
    Next
    

    5、判断列中是否存在空单元格

    对列CName ,从第3行开始,逐行检查直到第n行

    For Each cel In Range(CName & "3:" & CName & n)
        If cel.Value = "" Then
            MsgBox "列存在空单元格,请检查!"
        End If
    Next
    

    6、判断列中是否存在重复单元格

    对列CName(列号Num) ,从第3行开始,逐行检查直到第n行

    For i = 3 To n
        If Application.CountIf(Range(CName & "3:" & CName & n), Cells(i, Num)) > 1 Then
            MsgBox "列存在重复数据!"
            Exit Sub
        End If
    Next
    

    二、sheet跨页内容处理

    1、拷贝已有sheet,新增sheet

    在所有sheet页后面,新增sheet

    Sheets("已有sheet名称").Copy After:=Sheets(Sheets.Count)
    

    2、对新sheet内容进行处理

    (1)定位到新sheet

    行编号RNum, 列编号CNum

    Sheets("已有sheet名称 (2)").Select
    ActiveSheet.Cells(RNum, CNum).Value = “输入值”
    

    注:新增sheet时,默认会先以“所拷贝的sheet的名称+ (2)”为名

    (2)不定位到新sheet,通过调用新sheet名称进行处理

    Sheets(已有sheet名称 (2)).Cells(RNum, CNum).Value = “输入值”
    

    3、判断是否存在同名sheet

    '若不存在同名sheet
    If Sheets(shtname) Is Nothing Then
    	......
    '若存在同名sheet
    Else
    	......	
    End If
    

    4、将当前sheet页作为超链接插入其它某个sheet

    插入超链接的区域格式为:开始列名+列号:结束列名+列号,例如B1:C16

    Sheets("其它某个sheet名称").Select
    Range("B1:C16").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    	"当前sheet名称+超链接需要跳转到的当前sheet的位置", TextToDisplay:="超链接显示文本"
    

    三、窗体与sheet页交互

    1、sheet页设置按钮,点击按钮弹出窗体

    Sub 打开窗体()
        UserForm1.Show   
    End Sub
    

    2、窗体传输参数并调用sheet页主程序

    窗体设置输入框和按钮,点击按钮传输参数并调用sheet页主程序

    Private Sub CommandButton1_Click()       
        Call sheet页主程序 
    End Sub
    

    3、sheet页主程序获取参数并执行程序体

    Public 参数1, 参数2, 参数3
    Sub sheet页主程序()    
    '获取窗体参数,窗体id为UserForm1
    参数1 = UserForm1.TextBox1.Value
    参数2 = UserForm1.TextBox2.Value
    参数3 = UserForm1.TextBox3.Value
    '关闭窗体
    Unload UserForm1
    ...
    '执行程序体
    ...
    End Sub
    
    展开全文
  • 例如:个综合性的excel报表,第1行C是省份,而且此综合性报表有多个sheet要拆分,想要实现拆分所有sheet,并按省份合并成一个excel表,比如所有辽宁省的数据合并成一个excel文件以不同的sheet体现。用此脚本即可...
  • 而正确的表格,“合格”、“现场修复”和“待修”应该在第二行里,如下图所示2、想法利用VBA,遍历每一个表格,在“001”所在行的上方新增一个空白行,然后新增行及其上方一行,第1的两个单元格合并;第2的两个...
  • 我要根据Q中的内容变化,实现相对应单元格所在行某区域变更颜色。Q中的单元格有的是合并后的。如下面代码中$Q$6想设为变化的。 Private Sub CommandButton1_Click() Dim Sht1 As Worksheet Dim i, e, k, b ...
  • 这个问题解决方案很多种,可以用函数,或用数据透视表,还可以用VBA,但都不是最简单的方法,今天告诉你种最简单的解决方案处理总表自动拆分。今天要介绍的方法不但可以自动拆分,还兼容以下几种情况:总表数据...
  • Power Query for Excel

    2020-07-11 15:34:35
    功能为可以新增一列,该列的运算可以自行定义,用Excel也可以解决 添加列—自定义列—修改名称—公式 3. 追加查询 可以将多个工作表汇总为一个,或者多个工作簿汇总为一个,VBA也可以做到 1.多个工作簿汇总 获取...
  • 根据各功能的特点,对子菜单作了18个分类, 并Excel函数基础上扩展新增200个实用新的函数,用于增益Excel的扩展功能。且所有功能都通用于Excel 2003、2007和2010、2013、2016、Excel2019。支持中英文显示与繁简体...
  • 根据各功能的特点,对子菜单作了18个分类, 并Excel函数基础上扩展新增200个实用新的函数,用于增益Excel的扩展功能。且所有功能都通用于Excel 2003、2007和2010、2013、2016、Excel2019。支持中英文显示与繁简体...
  • 多排表工具

    2011-12-23 11:16:59
    用Excel做表格,有的表格的数很少,只有1至3,而行数却很多。因而用这样的版式打印的话有两个问题,第一是每张纸的信息量较少,只有2内容;...加载后在“工具(T)”菜单内新增一子菜单“多排表工具”,
  • 用EXCEL的VBA写的,通过表格来操作比较方便。(需要允许启用excel的宏功能,wps的个人版不支持) 网络工程师在配置交换机等产品时,会遇到很多重复的工作,有时也会复制到excel中去拉,但是也很麻烦,于是写了这个...
  • 实例16 :替代 VLOOUP、SUMPRODUCT 的VBA编码-多重 Join 的使用(第7页69楼) 实例17:出库中欠缺编号-NOT IN 的应用(第8页71楼) 实例18:用 Union 从字段不相同的两个 Access 表中筛选记录后按相似字段排序...
  • Excel终极伴侣

    2008-03-13 17:03:14
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel终极伴侣1.287

    2008-10-24 16:41:04
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel终极伴侣1.286

    2008-10-14 10:56:40
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel终极伴侣1.291

    2009-03-19 09:01:10
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel终极伴侣1.290

    2009-03-12 14:33:14
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel终极伴侣1.288

    2008-11-26 16:01:36
    普通TreeView控件只能显示一列数据(仅一个字段),而OBS表格却可以显示更多的列(N个字段),而且每个字段都可以汇总(这一点又要比Excel自身的分类汇总更直观、简单),再配合VBA,可以让您轻松驾驭超灵无比的Excel!...
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    【取消合并还原合并数据】:对一列中合并后的单元格取消合并,且恢复合并前所有数据 【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行...
  • 、隐藏无发生额的数据(行),冻结标题行; 二、提供导出银行代发工资的数据,可自定义银行代发工资的数据格式,方便所有银行代发工资; 三、提供按部门打印工资表,工资条、个人工资单,并可以按部门生成汇总表...
  • 【屏幕取色】 经典的屏幕取色工具,可取任意处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...
  • 【屏幕取色】 经典的屏幕取色工具,可取任意处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    【屏幕取色】 经典的屏幕取色工具,可取任意处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...
  • 9.9.5 新增导入多图片(1-9000)功能,导入图片允许按图片名称排序. 9.9.6 新增邮件群发器功能. 9.9.7 自动填充增加自动着色功能,可以指定范围来着色. 9.9.8 批量图片批注现已支持所有图片类型,增强与改进其他...
  • 【屏幕取色】 经典的屏幕取色工具,可取任意处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...
  • 【屏幕取色】 经典的屏幕取色工具,可取任意处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...
  • Kofler还是Definitive Guide to Excel VBA第2版的作者。 目录 封面 -23 封底 -22 扉页 -21 版权 -20 版权声明 -19 译者序 -18 前言 -16 目录 -11 第部分 入门 1 第1章 什么是MySQL 2 1.1 什么是数据库 2 1.1.1...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

vba新增一列