四、Range操作

4.2取得最后一个非空单元格

xlDown/xlToRight/xlToLeft/xlUp

Dim ERow as Long
Erow=Range("A" & Rows.Count).End(xlUp).Row

4.3 复制单元格区域

注意:使用PasteSpecial方法时指定xlPasteAll(粘贴全部),并不包括粘贴列宽

Sub CopyWithSameColumnWidths()Sheets("Sheet1").Range("A1").CurrentRegion.CopyWith Sheets("Sheet2").Range("A1").PasteSpecial xlPasteColumnWidths.PasteSpecial xlPasteAllEnd WithApplication.CutCopyMode = False
End Sub
Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues '粘贴数值

4.9 设置字符格式

4.9.1设置单元格文本字符串格式

Sub CellCharacter()With Range("A1").Clear.Value = "Y=X2+1".Characters(4, 1).Font.Superscript = True '将第4个字符设置为上标.Characters(1, 1).Font.ColorIndex = 3.Font.Size = 20End With
End Sub

通过Range对象的Characters属性来操作指定的字符。

Characters属性返回一个Characters对象,代表对象文字的字符区域。Characters属性的语法格式如下

Characters(Start, Length)

4.9.2 设置图形对象文本字符格式

如下示例为A3单元格批注添加指定文本,并设置字符格式。

Sub ShapeCharacter()If Range("A3").Comment Is Nothing ThenRange("A3").AddComment Text:=""End IfWith Range("A3").Comment.Text Text:="Microsoft Excel 2016".Shape.TextFrame.Characters(17).Font.ColorIndex = 3'返回从第17个字符开始到最后一个字符的字符串End With
End Sub

TextFrame属性返回Shape对象的文本框对象,而Characters属性返回其中的文本字符。

4.10 单元格区域添加边框

使用Range对象的Borders集合可以快速地对单元格区域全部边框应用相同的格式。

Range对象的BorderAround方法可以快速地为单元格区域添加外边框。

Sub AddBorders()Dim rngCell As RangeSet rngCell = Range("B2:F8")With rngCell.Borders.LineStyle = xlContinuous '边框线条的样式.Weight = xlThin '设置边框线条粗细.ColorIndex = 5 '设置边框线条颜色End WithrngCell.BorderAround xlContinuous, xlMedium, 5 '添加一个加粗外边框Set rngCell = Nothing
End Sub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKKb9Tpw-1581860892362)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206164323610.png)]

在单元格区域中应用多种边框格式

Sub BordersIndexDemo()Dim rngCell As RangeSet rngCell = Range("B2:F8")With rngCell.Borders(xlInsideHorizontal) '内部水平.LineStyle = xlDot.Weight = xlThin.ColorIndex = 5End WithWith rngCell.Borders(xlInsideVertical) '内部垂直.LineStyle = xlContinuous.Weight = xlThin.ColorIndex = 5End WithrngCell.BorderAround xlContinuous, xlMedium, 5Set rngCell = Nothing
End Sub

Borders(index)属性返回单个Border对象,其参数index取值可为以下:

名称 说明
xlDiagonalDown 5 从区域中每个单元格的左上角到右下角的边框。
xlDiagonalUp 6 从区域中每个单元格的左下角到右上角的边框。
xlEdgeBottom 9 区域底部的边框。
xlEdgeLeft 7 区域左边缘的边框。
xlEdgeRight 10 区域右边缘的边框。
xlEdgeTop 8 区域顶部的边框。
xlInsideHorizontal 12 区域中所有单元格的水平边框(区域以外的边框除外)。
xlInsideVertical 11 区域中所有单元格的垂直边框(区域以外的边框除外)。

去除边框

Sub Restore()Columns("B:F").Borders.LineStyle = xlNone
End Sub

4.11 高亮显示单元格区域

高亮显示是指以某种方式突出显示活动单元格或指定的单元格区域,使得用户可以一目了然地获取某些信息。

1.高亮显示单个单元格

Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNone'清除所有单元格的内部填充颜色Target.Interior.ColorIndex = 5
End Sub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHyHtUS6-1581860892364)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206165636905.png)]

2.高亮显示行列

Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim rngHighLight As RangeDim rngCell1 As Range, rngCell2 As RangeCells.Interior.ColorIndex = xlNoneSet rngCell1 = Intersect(ActiveCell.EntireColumn, _[HighLightArea])Set rngCell2 = Intersect(ActiveCell.EntireRow, [HighLightArea])On Error Resume NextSet rngHighLight = Application.Union(rngCell1, rngCell2)rngHighLight.Interior.ThemeColor = 9Set rngCell1 = NothingSet rngCell2 = NothingSet rngHighLight = Nothing
End Sub

命名区域HighLightArea(示例文件已指定B2:H15单元格区域)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRfa5MXB-1581860892364)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206165756300.png)]

3.结合条件格式定义名称高亮显示行

Private Sub Worksheet_SelectionChange(ByVal Target As Range)ThisWorkbook.Names.Add "ActRow", ActiveCell.Row
End Sub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cd7d2naO-1581860892364)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206165917049.png)]

4.结合条件格式定义名称高亮显示行列

Private Sub Worksheet_SelectionChange(ByVal Target As Range)ThisWorkbook.Names.Add "ActRow", ActiveCell.RowThisWorkbook.Names.Add "ActCol", ActiveCell.Column
End Sub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ghE6bHB-1581860892365)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206170134713.png)]

4.12 动态设置单元格数据验证序列

【数据验证】对话框如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9c3qcNx-1581860892365)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206171335869.png)]

如下示例代码通过VBA将示例工作簿中工作表“Office 2016"以外的工作表名称设置为工作表“Office 2016"中C3单元格的数据验证序列。

数据验证序列是由逗号分隔的字符串,两个逗号之间的空字符串将被忽略。

Sub SheetsNameValidation()Dim i As IntegerDim strList As StringDim wksSht As WorksheetFor Each wksSht In WorksheetsIf wksSht.Name <> "Office 2016" ThenstrList = strList & wksSht.Name & ","End IfNext wksShtWith Worksheets("Office 2016").Range("C3").Validation.Delete.Add Type:=xlValidateList, Formula1:=strListEnd WithSet wksSht = Nothing
End Sub
Sub DeleteValidation()Range("C3").Validation.Delete
End Sub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hG4eDXy-1581860892365)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200206171703131.png)]

Validation对象的Add方法向指定区域内添加数据验证,其语法格式如下:

Add (Type, AlertStyle, Operator, Formula1, Formula2)

参数Type是必需的,代表数据验证类型。其值可为以下常量之一:

名称 说明
xlValidateCustom 7 使用任意公式验证数据有效性。
xlValidateDate 4 日期值。
xlValidateDecimal 2 数值。
xlValidateInputOnly 0 仅在用户更改值时进行验证。
xlValidateList 3 值必须存在于指定列表中。
xlValidateTextLength 6 文本长度。
xlValidateTime 5 时间值。
xlValidateWholeNumber 1 全部数值。

参数Formula2指定数据验证公式的第二部分。仅当Operator为xlBetween或xlNotBetween时有效。

4.14 判断单元格公式是否存在错误

Excel公式返回的结果可能是一个错误的文本,包含#NULL、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM!和#N/A等。

通过判断Range对象中的Value属性的返回结果是否为错误值,可得知公式是否存在错误。

Sub FormulaIsError()If VBA.IsError(Range("A1").Value) = True ThenMsgBox "A1单元格错误类型为:" & Range("A1").TextElseMsgBox "A1单元格公式结果为:" & Range("A1").ValueEnd If
End Sub

IsError函数判断表达式是否为一个错误值,如果是则返回逻辑值True,否则返回逻辑值False。

4.15批量删除所有错误值

使用CurrentRegion属性取得包含A1单元格的当前区域。

Sub DeleteError()Dim rngRange As RangeDim rngCell As RangeSet rngRange = Range("a1").CurrentRegionFor Each rngCell In rngRangeIf VBA.IsError(rngCell.Value) = True ThenrngCell.Value = ""End IfNext rngCellSet rngCell = NothingSet rngRange = Nothing
End Sub

通过定位功能可获取错误值的单元格对象,并批量修改。

利用单元格对象的SpecialCells方法定位所有错误值。

Sub DeleteAllError()On Error Resume NextDim rngRange As RangeSet rngRange = Range("a1").CurrentRegion.SpecialCells _(xlCellTypeConstants, xlErrors)If Not rngRange Is Nothing ThenrngRange.Value = ""End IfSet rngRange = Nothing
End Sub

单元格对象的SpecialCells方法返回一个Range对象,该对象代表与指定类型和值匹配的所有单元格,其语法格式如下:

SpecialCells(Type,Value)

参数与Type是必需的,用于指定定位类型,可为如下表列举的XlCellType常量之一。

常量 说明
xlCellTypeAllFormatConditions -4172 任何格式的单元格
xlCellTypeAllValidation -4174 含有验证条件的单元格
xlCellTypeBlanks 4 空单元格
xlCellTypeComments -4144 含有注释的单元格
xlCellTypeConstants 2 含有常量的单元格
xlCellTypeFormulas -4123 含有公式的单元格
xlCellTypeLastCell 11 已用区域中的最后一个单元格
xlCellTypeSameFormatConditions -4173 具有相同的格式的单元格
xlCellTypeSameValidation -4175 验证条件相同的单元格
xlCellTypeVisible 12 所有可见单元格

如果参数Type为xlCellTypeConstants或xlCellTypeFormulas,则该参数可用于确定结果中应包含哪几类单元格,参数Value可为以下列举的XlSpecialCellsValue常量之一。将这些值相加可使此方法返回多种类型的单元格。默认情况下,将选择所有常量或公式,无论类型如何。

常量 说明
xlErrors 16 有错误的单元格。
xlLogical 4 具有逻辑值的单元格。
xlNumbers 1 具有数值的单元格。
xlTextValues 2 具有文本的单元格。

4.17 判断单元格是否存在批注

Function blnComment(ByVal rngRange As Range) As BooleanIf rngRange.Cells(1).Comment Is Nothing ThenblnComment = FalseElseblnComment = TrueEnd If
End Function

返回单元格区域rngRange的第一个单元格是否存在批注。

注:对于合并单元格的批注,批注对象从属于合并单元格的第一个单元格。

Range对象的Comment属性返回批注对象,如果指定的单元格不存在批注,则该属性返回Nothing。

4.18 为单元格添加批注

Sub Comment_Add()With Range("B5")If .Comment Is Nothing Then.AddComment Text:=.Text.Comment.Visible = TrueEnd IfEnd With
End Sub

使用Range对象的AddComment方法为单元格添加批注。

编辑批注文本

使用批注对象的Text方法,能够获取或修改单元格批注的文本。

Sub Comment_Add()With Range("B5")If .Comment Is Nothing Then.AddComment Text:=.Text.Comment.Visible = TrueEnd IfEnd With
End Sub

Comment对象的Text方法的语法格式如下。

Text(Text,Start,Overwrite)

参数Text代表需要添加的文本。

参数Start指定添加文本的起始位置。

参数OrverWrite指定是否覆盖现有文本。默认值为False(新文字插入现有文字中)。

vbCrLf常量代表回车换行符。

4.21 显示图片批注

为单元格批注添加背景图片或将图片作为批注的内容

Sub ChangeCommentShapeType()With Range("B3").Comment.Shape.Fill.UserPicture _ThisWorkbook.Path & "\Logo.jpg"End With
End Sub

Comment对象的Shape属性返回批注对象的图形对象

Fill属性能够返回FillFormat对象,该对象包括指定的图表或图形的填充格式属性,UserPicture方法为图形填充图像

4.22 设置批注字体

单元格批注的字体通过单元格批注的Shape对象中文本框对象(TextFrame)的字符对象(Characters)进行设置。TextFrame代表Shape对象中的文本框,包含文本框中的文字。

Sub CommentFont()Dim objComment As CommentFor Each objComment In ActiveSheet.CommentsWith objComment.Shape.TextFrame.Characters.Font.Name = "微软雅黑".Bold = msoFalse.Size = 14.ColorIndex = 3End WithNext objCommentSet objComment = Nothing
End Sub

4.23 快速判断单元格区域是否存在合并单元格

Range对象的MergeCells属性可以判断单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。

Sub IsMergeCell()If Range("A1").MergeCells = True ThenMsgBox "包含合并单元格"ElseMsgBox "没有包含合并单元格"End If
End Sub

对于单个单元格,直接通过MergeCells属性判断是否包含合并单元格。

Sub IsMerge()If VBA.IsNull(Range("A1:E10").MergeCells) = True ThenMsgBox "包含合并单元格"ElseMsgBox "没有包含合并单元格"End If
End Sub

当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null.

4.24合并单元格时连接每个单元格内容

在合并多个单元格时,将各个单元格的内容连接起来保存在合并后的单元格区域中。

Sub MergeValue()Dim strText As StringDim rngCell As RangeIf TypeName(Selection) = "Range" ThenFor Each rngCell In SelectionstrText = strText & rngCell.ValueNext rngCellApplication.DisplayAlerts = FalseSelection.MergeSelection.Value = strTextApplication.DisplayAlerts = TrueEnd IfSet rngCell = Nothing
End Sub

使用TypeName函数判断当前选定对象是否为Range对象。

将DisplayAlerts属性设置为False,禁止Excel弹出警告对话框。

4.25 取消合并时在每个单元格中保留内容

Sub UnMergeValue()Dim strText As StringDim i As Long, intCount As IntegerFor i = 2 To Range("B1").End(xlDown).RowWith Cells(i, 1)strText = .ValueintCount = .MergeArea.Count.UnMerge.Resize(intCount, 1).Value = strTextEnd Withi = i + intCount - 1Next i
End Sub

4.26 合并内容相同的单列连续单元格

Sub BackUp()Dim intRow As Integer, i As LongApplication.DisplayAlerts = FalseWith ActiveSheetintRow = .Range("A1").End(xlDown).RowFor i = intRow To 2 Step -1If .Cells(i, 1).Value = .Cells(i - 1, 1).Value Then.Range(.Cells(i - 1, 1), .Cells(i, 1)).MergeEnd IfNext iEnd WithApplication.DisplayAlerts = True
End Sub

使用For循环结构从最后一行开始,向上逐个判断相邻单元格内容的内容是否相同,如果相同则合并单元格区域。

Excel VBA Range单元格操作实例相关推荐

  1. excel vba 修改单元格的颜色

    vba中  单元格.Interior    表示这个单元格的背景. 比如  range("A1").Interior   指的就是单元格 A1的背景. range("A1 ...

  2. 10, excel vba 修改单元格的颜色

    看数据总是很累的,一堆密密麻麻的.哪个数据才是我想要的呢? 比如一列里有各种各样的数据,我想知道哪些单元格的数据大于11的? 又比如一列里有各种各样的数据,我想知道哪些单元格的数据大于111的? 这里 ...

  3. Excel VBA:设置单元格边框

    Border 对象 代表对象的边框. 说明 大多数具有边框的对象(除 Range 和 Style 对象外)都将边框作为单一实体处理,而不管边框有几个边.整个边框必须作为一个整体单位返回.例如,使用 T ...

  4. Excel VBA 之单元格格式

    一个频繁的任务就是给选中的单元格或区域设置格式.你的VBA过程可能需要查明某个具体单元格的格式.我们可以使用NumberFormat属性来找回单元格格式: ?Range("A1") ...

  5. Excel VBA中单元格的合并与拆分

    对于合并单元格这里提供"从上到下"和"从下到上"合并单元格两种方式,"从上到下"的方法需要记录当前列有多少个相同的单元格和判断相应的单元格是 ...

  6. 4, excel vba 往单元格里写入数据

    通过上一节, 我们基本掌握了得到一个单元格内容的方法.那么, 我们怎么才能把我们想要的数据写入单元格呢? 接下来我们要在 单元格A1 里写入  点点didi4 1,进入vba编辑界面,复制粘贴以下代码 ...

  7. 5, excel vba 修改单元格里的数据

    通过上节学习,我们己经学会了往一个单元格里写入数据,接下来,我们整合前两节的内容. 把一个单元格的数据进行修改 我们看到,在单元格 A1中,有一个数据100, 接下来我们要给它后面加上:美元 . 1, ...

  8. 【Excel VBA】单元格变更事件,单元格内容变更自动触发:Worksheet_Change

    纲举目张 说明 实现功能 代码code 使用说明 说明 我们一般触发或者执行一段宏命令都是通过自定义按钮或者自定义快速访问栏调用相关宏命令,前一段时间在CSDN中回答网友提问的问题时,我无意中测试成功 ...

  9. vba基本操作 -- 单元格操作

    获取单元格中的内容 Sub GetCellValue()Dim cell_A1 As String, cell_B1 As Stringcell_A1 = ActiveSheet.Range(&quo ...

最新文章

  1. 主流Kubernetes发行版梳理,看完就会选了
  2. 生鲜在卖场中的六大类别
  3. HoughLines 函数
  4. 手撕 CNN 经典网络之 VGGNet(理论篇)
  5. css文件的MIME错误引发的Jquery Mobile绘制错误
  6. android 内核态
  7. Redis中的可用性保证之Sentinel 原理
  8. 窝里斗,只给微软看笑话
  9. clion 查看内容窗口_苹果电脑(macOS)查看 WiFi 密码的两种方法
  10. leetcode647 回文子串
  11. 牛客16494 生活大爆炸版石头剪刀布
  12. 分布式工作笔记001---分布式系统中CAP 定理的含义
  13. 前Facebook面试官告诉你如何才能顺利通过编程面试
  14. Mysql表的约束设计和关联关系设计
  15. vue+vuex初入门
  16. 智慧水务管理系统提升城市水务管理智慧化水平
  17. kali linux下的嗅探工具介绍
  18. 2^n-1的因数分解问题
  19. Qt编写自定义控件54-时钟仪表盘
  20. python 加速度_「加速度公式」加速度公式1 - seo实验室

热门文章

  1. Android - 原生登录注册页面【仿】淘宝App
  2. 函授大专和成人大专哪个含金量更高
  3. 推荐一首好歌 布列瑟农(bressanon)
  4. 四位玫瑰数python123_python3 ---数据类型 (2)
  5. Selenium2鼠标点击操作笔记
  6. char[]数组转CString乱码问题
  7. mysql raiserror_sql server数据库中raiserror函数的用法
  8. 基于SSM的进销存管理系统设计与实现 毕业论文+任务书+开题报告+项目源码及数据库文件、
  9. 怎样把你的肾补起来!(原来我有黑眼圈,皮肤发黄时肾不好啊)!!世界上唯一有能力让时间扭转、青春永在的最强有力的器官,就是肾脏。...
  10. C# DataGridView如何获取选中行的某个数据