ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yuanzhuping

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 07:26 | 显示全部楼层

第1部分Range(单元格)对象

本帖已被收录到知识树中,索引项:开发帮助和教程
技巧15         合并单元格操作
15-1        判断单元格区域是否存在合并单元格
       Range对象的MergeCells属性可以确定单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。
       下面的代码判断单元格 A1是否包含合并单元格,并显示相应的提示信息。
  1. #001  Sub IsMergeCell()
  2. #002      If Range("A1").MergeCells = True Then
  3. #003          MsgBox "包含合并单元格"
  4. #004      Else
  5. #005          MsgBox "没有包含合并单元格"
  6. #006      End If
  7. #007  End Sub
  8.        如果在指定区域中
复制代码
存在部分合并的单元格,比如如图所示的工作表区域E8:I17中包含合并单元格区域F8:G9,H12:I13。
包含部分合并单元格的区域.jpg
       判断这样一个单元格区域中是否包含合并单元格,可以使用下面的代码快速判断单元格区域中是否包含部分合并单元格,而不需要遍历单元格。
  1. #001  Sub IsMerge()
  2. #002      If IsNull(Range("E8:I17").MergeCells) Then
  3. #003          MsgBox "包含合并单元格"
  4. #004      Else
  5. #005          MsgBox "没有包含合并单元格"
  6. #006      End If
  7. #007  End Sub
复制代码
代码解析:
       当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null,因此第2行代码通过该返回结果作为判断条件。
       运行IsMerge过程结果如图所示。
提示信息.JPG

[ 本帖最后由 yuanzhuping 于 2009-2-16 23:07 编辑 ]

15-1 判断单元格区域是否存在合并单元格.rar

6.42 KB, 下载次数: 2475

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 07:35 | 显示全部楼层

第1部分Range(单元格)对象

技巧15         合并单元格操作
15-2        合并单元格时连接每个单元格的文本
       使用Excel的“合并及居中”按钮合并多个单元格区域时,Excel仅保留区域左上角单元格的内容,如果用户希望在合并如图所示单元格区域时,将各个单元格的内容连接起来保存在合并后的单元格区域中,则可以使用下面的代码。
合并前单元格区域.jpg
  1. #001  Sub Mergerng()
  2. #002      Dim StrMerge As String
  3. #003      Dim rng As Range
  4. #004      If TypeName(Selection) = "Range" Then
  5. #005          For Each rng In Selection
  6. #006              StrMerge = StrMerge & rng.Value
  7. #007          Next
  8. #008          Application.DisplayAlerts = False
  9. #009          Selection.Merge
  10. #010          Selection.Value = StrMerge
  11. #011          Application.DisplayAlerts = True
  12. #012      End If
  13. #013  End Sub
复制代码
代码解析:
       Mergerng过程将所选各个单元格的内容连接起来保存在合并后的单元格区域中。
       第4行代码使用TypeName函数判断当前选定对象是否为Range对象,若是则继续执行代码。
       第5行到第7行代码将当前选中区域的内容连接起来保存在字符串变量StrMerge中。
       第8行代码将DisplayAlerts属性设置为False,禁止在合并多重数值区域时,Excel显示的警告信息,避免中断代码的运行。
       第9行代码使用Merge方法合并当前选定区域。应用于Range对象的Merge方法通过指定Range对象创建合并单元格,语法如下:
expression.Merge(Across)
       参数expression是必需的,返回一个Range对象。
       参数Across是可选的,如果该值为True,则将指定区域内的每一行合并为一个合并单元格。默认值为False。
       第9行也可以使用下面的代码:
Selection.MergeCells = True
       第10行代码将变量StrMerge的值赋给合并后的单元格。
       运行Mergerng过程结果如图所示。
合并单元格结果.jpg

[ 本帖最后由 yuanzhuping 于 2009-2-16 22:26 编辑 ]

15-2 合并单元格时连接每个单元格的文本.rar

4.88 KB, 下载次数: 2540

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 07:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第1部分Range(单元格)对象

技巧15         合并单元格操作
15-3        合并内容相同的连续单元格
       如果需要合并如图所示的工作表中B列中部门相同的连续单元格,可以使用下面的代码。
需合并的工作表.jpg
  1. #001  Sub Mergerng()
  2. #002      Dim IntRow As Integer
  3. #003      Dim i As Integer
  4. #004      Application.DisplayAlerts = False
  5. #005      With Sheet1
  6. #006          IntRow = .Range("A65536").End(xlUp).Row
  7. #007          For i = IntRow To 2 Step -1
  8. #008              If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then
  9. #009                  .Range(.Cells(i - 1, 2), .Cells(i, 2)).Merge
  10. #010              End If
  11. #011          Next
  12. #012      End With
  13. #013      Application.DisplayAlerts = True
  14. #014  End Sub
复制代码
代码解析:
       第7行到第11行代码,从最后一行开始,向上逐个单元格判断连续两个单元格的内容是否相同,如果相同则合并。
       运行Mergerng过程后,结果如图所示。
合并内容相同的连续单元格.jpg

[ 本帖最后由 yuanzhuping 于 2009-2-16 22:27 编辑 ]

15-3 合并内容相同的连续单元格.rar

7.98 KB, 下载次数: 2809

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 07:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第1部分Range(单元格)对象

技巧15         合并单元格操作
15-4        取消合并单元格时在每个单元格中保留内容
       如果需要取消技巧15-3中工作表B列“部门”的合并单元格,并且各个单元格均保留原合并单元格的内容,可以使用下面的代码。
  1. #001  Sub UnMerge()
  2. #002      Dim StrMer As String
  3. #003      Dim IntCot As Integer
  4. #004      Dim i As Integer
  5. #005      With Sheet1
  6. #006          For i = 2 To .Range("B65536").End(xlUp).Row
  7. #007              StrMer = .Cells(i, 2).Value
  8. #008              IntCot = .Cells(i, 2).MergeArea.Count
  9. #009              .Cells(i, 2).UnMerge
  10. #010              .Range(.Cells(i, 2), .Cells(i + IntCot - 1, 2)).Value = StrMer
  11. #011              i = i + IntCot - 1
  12. #012          Next
  13. #013      End With
  14. #014  End Sub
复制代码
代码解析:
       UnMerge过程取消工作表中B列中的合并单元格,并且各个单元格均保留原合并单元格的内容。
       第7行代码取得B列每个合并单元格的内容。
       第8行代码取得合并区域的单元格数量。
       第9行代码使用UnMerge方法取消合并单元格。UnMerge方法将合并区域分解为独立的单元格,语法如下:
expression.UnMerge
       第10行代码将原合并单元格的内容赋值给取消合并单元格后的区域。
       第11行代码调整循环变量i的值,使下一次循环从下一个单元格区域开始。
       运行UnMerge过程结果如图所示。
需合并的工作表.jpg

[ 本帖最后由 yuanzhuping 于 2009-2-16 22:28 编辑 ]

15-4 取消合并单元格时在每个单元格中保留内容.rar

11.11 KB, 下载次数: 2579

TA的精华主题

TA的得分主题

发表于 2009-2-12 10:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-12 14:56 | 显示全部楼层
这个代码解析非常好,对像我这样的更好

TA的精华主题

TA的得分主题

发表于 2009-2-12 16:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-12 16:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-12 17:10 | 显示全部楼层
谢谢版主,正是我们这种初学者所需要的,边下载边学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 17:44 | 显示全部楼层

第1部分Range(单元格)对象

技巧16         高亮显示单元格区域
       如果希望以某种方式突出显示活动单元格或者指定的单元格区域,从而一目了然地获得某些信息,那么可以高亮显示活动单元格区域,如下面的代码所示。
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      Cells.Interior.ColorIndex = xlColorIndexNone
  3. #003      Target.Interior.ColorIndex = 8
  4. #004  End Sub
复制代码
代码解析:
       设置工作表当前选定区域单元格的内部填充颜色,以高亮显示选定区域,如图所示。
高亮显示选定区域.jpg
       第2行代码将工作表中所有的单元格的内部填充颜色设置为xlColorIndexNone,即取消单元格的内部填充颜色。
       第3行代码将工作表中选定单元格的内部填充颜色设置为8。
       应用于Interior对象的ColorIndex属性返回或设置边框内部的颜色。该颜色可指定为当前调色板中颜色的编号(请参阅技巧11-1)或为 XlColorIndex 常量之一:xlColorIndexAutomatic(指定对图形对象自动填充)、xlColorIndexNone(用于指定无内部填充)。
       还可以高亮显示指定区域内的行列,如下面的代码所示。
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      Dim rng As Range
  3. #003      Cells.Interior.ColorIndex = xlNone
  4. #004      Set rng = Application.Union(Target.EntireColumn, Target.EntireRow)
  5. #005      rng.Interior.ColorIndex = 24
  6. #006  End Sub
复制代码

代码解析:
       设置工作表当前选定区域单元格内部填充颜色,高亮显示活动单元格所在的行列,如图所示。
高亮显示活动单元格所在的行列.jpg
       第4行代码使用Union方法将所选单元格所在的行、列连接起来成为一个区域,关于Union方法请参阅技巧1-6。
注意 使用此方法时,工作表中所有设置的单元格内部填充颜色将会被清除。(不包括通过条件格式设置的单元格内部填充颜色),同时无法在工作表中实现复制粘贴功能。

[ 本帖最后由 yuanzhuping 于 2009-2-16 22:30 编辑 ]

技巧16 高亮显示单元格区域.rar

6.33 KB, 下载次数: 2472

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 16:11 , Processed in 0.043612 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表