百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Excel VBA学习笔记:合并单元格的相关操作

zhezhongyun 2025-07-20 00:00 3 浏览

合并单元格,一个在工作中很常见的,但是是令写(工作表)公式和VBA代码的人都很不喜欢的东东,今天来讲讲与它相关的操作语法。

1、Range("A1:B2").Merge;合并A1到B2单元格,共4个单元格。也可写成: Range("A1").resize(2,2).Merge,这种写法只需知道起始单元格地址。注意:合并时如果除A1之外的单元格有数据的话,会弹出提示(会造成代码中断),只保留下A1单元格的数据。

2、Range("A1").MergeCells;MergeCells属性 是判断此单元格是否是合并单元格,是则返回True值,否返回False。只返回逻辑值。

3、Range("A2").MergeArea.Address(0,0) ;返回被合并的单元格的地址区域,地址是个范围。接前面的语句,此处返回的值为”A1:B2”,Address不带参数(0,0)返回的地址带$符号。

4、Range("a1").MergeArea.Count;合并单元格中 单元格的数量。接上面示例,返回值为4。Range("A1").MergeArea.Rows.Count;合并单元格涵盖的行数。接上面示例,返回值为2。Range("A1").MergeArea.Columns.Count;合并单元格涵盖的列数。接上面示例,返回值为2。

5、range("A1:B2").UnMerge ;拆分合并的单元格,不弹出提示,将原数据留置在A1单元格(即原合并区域最左上方的单元格中)。

示例一、将选中区域中的单元格,数据相同的给予合并,代码如下:

Application.DisplayAlerts = False
rw = Selection.Rows.Count   ’得到选择区域包含的行数
cl = Selection.Columns.Count  ’得到选择区域包含的列数
If rw <= 1 Or cl > 1 Then Exit Sub  ’只有一行,或是多列就退出,此程序不处理多列的情况。
n = Selection.Column    ’得到选择区域的列序数
If Cells(rw, n) = "" Then     ’如果点选了一整列,数据之下都是”空”格子,循环浪费时间。
    rw = Cells(rw, n).End(xlUp).Row
End If
For i = rw To 2 Step -1     ’倒序循环
  Set Rng = Cells(i, n)     
  If Rng = Rng.Offset(-1) Then  ’当前单元格与其上单元格相同就合并
    Rng.Offset(-1).Resize(2).Merge
  End If
Next i
Application.DisplayAlerts = True

示例二、将选择区域中的单元格,有数据单元格向下合并“空”的单元格,代码如下:

起 = 1: 止 = 1
With Selection ‘选择区域只适合单列,且是有界的区域
 For rw = 1 To .Rows.Count
   If .Cells(rw, 1) = "" Then   ’判断下一个单元格是否是“空”的
     止 = rw
   Else
     .Cells(起, 1).Resize(止 - 起 + 1, 1).Merge  ’不是“空”,就把之前的进行合并 
     起 = rw: 止 = rw
   End If
  If rw = .Rows.Count Then
     .Cells(起, 1).Resize(止 - 起 + 1, 1).Merge
  End If             ‘这个IF语句只是处理最后一个数据的合并
Next rw
End With

示例三、自定义函数 合并求和

Function ssum(单元格 As Range, Optional P As Integer = 0)
    If P = 0 Then
    rw = Application.ThisCell.MergeArea.Rows.Count
    ssum = WorksheetFunction.Sum(单元格.Resize(rw))
    ElseIf P = 1 Then
        cl = Application.ThisCell.MergeArea.Columns.Count
    ssum = WorksheetFunction.Sum(单元格.Resize(1, cl))
    End If
End Function

此函数作用:合并的单元格对应数据求和。函数的写法与Sub 一样的,都是在模块中写入,只是将Sub换成了Function。写完后,就可以在工作表中使用了。如图:

ssum有两个参数,括号内的(单元格 As Range, Optional P As Integer = 0),第1个参数是单元格,第2个参数是数字0或1,默认是0;数字1是用于行方向的合并单元格的求和。

相关推荐

Qt setAttribute设置窗口属性(qt设置窗口名字)

this->resize(500,400);this->setWindowTitle("主窗口");QLabel*label=newQLabel(...

利用Axure+js创建可配置地图页面(axure制作app界面)

编辑导语:如何利用Axure实现自定义地图展示?本篇文章里,作者结合Axure与高德地图,对如何在Axure中设置相应参数、进而预览时实现自定义地图展示效果的操作流程进行了示范和总结,一起来看一下。本...

Excel如何获取所有类型的工作表,详细编程方法介绍

No.1Excel可以创建不同类型的工作表,编程中会遇到返回某一类型的工作或所有类型的工作表,对表进行操作,那么如何得到想要的工作表呢?下面介绍一个方法。首先要认识一下Sheets对象,它表示工作簿中...

VBA中的常用单元格引用方式(vba中单元格的引用方法)

VBA编程经常和“对象”打交道,其中最频繁的对象大概就是“单元格”了。(听说您还没有对象?那……我想你大概需要一份Excel,包邮988……)今天我们就来聊一下单元格的各种引用方式,比如单个单元格、行...

强烈安利试试这个!效果爆炸的漫画变身AI,火到服务器几度挤爆

金磊丰色发自凹非寺量子位报道|公众号QbitAI“排队1241人,等待2600秒……”——这届网友为了看一眼自己在动漫里的样子,可真是拼了!“始作俑者”是一款可以把人像变动漫的生成器。只...

软网推荐:为窗口控制菜单添加扩展控制命令

当我们点击Windows标准窗口(如记事本、资源管理器等)左上角的窗口控制按钮时,会弹出一个含有窗口控制基本命令的菜单,其中包括移动、大小、最小化、最大化、关闭等窗口控制命令。如果我们觉得这些命令不能...

45、VBA字典去重,两种不同的方法在实战中的运用(VBA进阶)

1、在VBA字典去重的操作中,若程序仅需要使用key值,那么无论采用哪种方法都不会有问题;但如果需要获得对应的item值,就必须根据实际需求选择合适的方法了。学VBA要知其然而知其所以然,不能似懂非懂...

Excel VBA学习笔记:合并单元格的相关操作

合并单元格,一个在工作中很常见的,但是是令写(工作表)公式和VBA代码的人都很不喜欢的东东,今天来讲讲与它相关的操作语法。1、Range("A1:B2").Merge;合并A1到B2单...

软网推荐:图片编辑 小而不凡(秽的读法)

说起图片编辑小工具,咱手边就有个“画图”软件。但是,这个工具比较简单,对于处理透明背景、应用滤镜效果、添加边框、做拼接图和全景照、图层操作等,就无能为力了。同样是小软件,PhotoPad就能满足上述需...

Android弹软键盘时之ListView的变化控制

前几天有个人问我,说在最底下有个输入框,弹出键盘时整个界面都一起跟着移动,上面的标题栏都移到上面看不到了,界面非常难看。其实这种问题一般存在于这样的界面布局中那就是,上面是标题栏,中间是Listvie...

如何将数组值传递到工作表中(怎么传数组)

【分享成果,随喜正能量】不与别人盲目攀比,自己就会悠然自得;不把人生目标定得太高,自己就会欢乐常在;不刻意追求完美,自己就会远离痛苦;不是时时苛求自己,自己就会活的自在;不每每吹毛求疵,自己就会轻轻松...

【VBA入门必备】Offset和Resize这样用,工作效率翻3倍!

大家好!今天共同学习下VBA中单元格属性Offset和Resize操作。一、Offset:单元格的"导航仪"功能说明:以当前单元格为坐标原点,灵活跳转位置语法格式:单元格.Offset...

50道阿里巴巴MySql经典面试题(附答案)

1、MySQL中有哪几种锁?1、表级锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突的概率最高,并发度最低。2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度...

如何在Vue3项目中集成ESLint+Prettier+Stylelint+Husky?

随着前端工程化的发展,前端代码规范也显得越来越重要,所以作为一个前端对于这方面还是需要有一定的了解的。本篇文章将带大家使用ESLint+Prettier+Stylelint+Husky从零搭建一个Vi...

SpringBoot 中 Json 格式化配置(springboot json转对象)

SpringBoot针对jackson是自动化配置的,如果需要修改,也可以自定义配置。0x01:通过application.yml配置属性说明:spring.jackson.date-form...