Excel区域操作
对已打开 Excel 里的某个区域赋值、设格式、调用方法或读取信息。通过 Microsoft.Office.Interop,本机需要安装 Excel。「区域」对应 Range。只读写文件、不启动 Excel 请用 Excel文件读写。
当前模块定义
sys:excelRange输入 13 · 输出 13 · 枚举 2
输入参数
- 区域
rangeObject可选可以输入区域变量、留空(表示当前选择区域)、used(表示当前工作表的使用区域)或区域范围如A1:E9等,请参考文档。
- 限定子范围
subRangeEnum必填根据需要,将要操作的目标限定为一个子区域
10 个选项整个区域、区域内的第一行、区域内的第一列
整个区域默认FullArea区域内的第一行FirstRow区域内的第一列FirstColumn区域内最后一行LastRow区域内最后一列LastColumn活动单元格ActiveCell整行(包含区域外EntireRow整列(包含区域外EntireColumn所有行(区域范围内Rows所有列(区域范围内Columns - 操作类型
operationEnum必填操作类型
8 个选项设置值、设置公式、设置数值格式
设置值默认SetValue设置公式SetFormula设置数值格式SetNumberFormat行高,列宽SetCellSize设置格式SetStyle调用方法CallMethod替换内容Replace获取区域信息GetRangeInfo - 参数
valueAny可选要设置的内容
- 行高,列宽
cellSizeAny可选-表示不改变,auto表示自动,数字表示具体值。如auto,auto表示自适应高度和宽度
- 格式
styleText可选要设置的格式内容。每行一个格式设置,请参考模块文档了解详细参数设置。
- 方法
methodsText可选要调用的方法,每行一个。格式请参考文档。
- 查找内容
replaceWhatText必填要替换的内容
- 替换为
replaceToText必填替换成的内容
- 转义"查找内容"
replaceEscapeWhatBoolean可选替换"查找内容"中的转义字符(\r,\n,\t)
- 转义"替换为"
replaceEscapeToBoolean可选替换"替换为"中的转义字符(\r,\n,\t)
- 区分大小写
replaceMatchCaseBoolean可选 - 失败后停止
stopIfFailBoolean可选失败后是否停止动作
输出参数
- 是否成功
isSuccessBoolean操作是否成功
- 值
valueAny单元格的值
- 文本
textText单元格的显示文本
- 公式
formulaText单元格的公式值
- 数值格式
numberFormatText单元格数值格式值
- 位置引用
addressText区域位置范围
- 列号
columnInteger左上角单元格从1开始的列数
- 行号
rowInteger左上角单元格从1开始的行数
- 列数
colNumInteger区域包含的列数
- 行数
rowNumInteger区域包含的行数
- 格式信息
styleText单元格的格式
- 区域对象
rangeObjectRange对象
- 工作表对象
sheetObjectWorkSheet对象
概述
Excel区域操作
- 因权限限制,只能操作由 Quicker 打开的工作簿。用下面的动作打开:
- 编程改过的内容无法撤销,改之前先保存。
- 封装面很广,可能和预期不一致,欢迎反馈。熟悉 VBA 会更好用。
参数说明
区域:要操作的范围,任选一种写法:
- 通过变量或表达式传入Range对象。
- 不填写内容:表示当前Excel窗口中选定的区域。
- 填写“used”(不写引号):表示当前Excel窗口工作表中使用的整个区域。内部实现:通过当前工作表的UsedRange属性得到。
- 填写指定区域范围的文本,如“A1:E9”“A1”等(不写引号)。内部实现:通过当前工作表的Range属性(VBA文档)得到。
限定子范围:把操作目标再收窄到「区域」里的一部分。
- 整个区域
- 区域内的第一行 / 区域内的第一列 / 区域内最后一行 / 区域内最后一列
- 活动单元格:当前有录入焦点的单元格
- 整行(包含区域外):EntireRow,调行高时用
- 整列(包含区域外):EntireColumn,调列宽时用
- 所有行(区域范围内):Rows
- 所有列(区域范围内):Columns
旧稿里的「指定单元格 / cell:行,列」当前 catalog 已无此项;请改用「区域」写 A1 这类地址,或先「获取区域信息」再操作。

操作类型:
-
设置值:为区域的单元格赋值。内部实现为:为
Region.Value属性赋值。 -
设置公式:为区域的单元格设置公式。内部实现为:为 Region.Formula 属性赋值。与在编辑栏(包括等号)中显示时的格式相同,如:“=RAND()*100000”
-
设置数值格式:设置单元格格式。内部实现为:为Range.NumberFormat 属性赋值。格式代码是在 设置单元格格式对话框中 格式代码选项相同的字符串。
-
行高,列宽:为区域设置行高列宽,格式为“行高,列宽”
-
行高可以指定的值:
-
-(横线符号):表示不更改行高;
-
auto:表示自适应行高;
-
std:表示默认行高;
-
整数数字:以磅为单位的行高值。
-
列宽可以指定的值:
-
-(横线符号):表示不更改列宽;
-
auto:表示自适应列宽;
-
std:表示默认列宽;
-
整数数字:指定具体的宽度数值。一个列宽单位等于"常规"样式中一个字符的宽度。对于比例字体,则使用字符 0(零)的宽度。
-
设置格式:每行一条格式,见下文。对应参数 格式。
-
调用方法:每行一个 Range 方法,见下文。对应参数 方法。
-
替换内容:在区域内查找替换。对应 查找内容、替换为、转义"查找内容"、转义"替换为"、区分大小写。
-
获取区域信息:读值 / 公式 / 格式 / 位置 / 对象引用。
失败后停止:失败后是否中止动作。默认开启。
设置值 / 公式 / 数值格式时,内容写在 参数 里。行高列宽写在 行高,列宽 里。
输出
- 是否成功
- 仅「获取区域信息」:值、文本、公式、数值格式、位置引用、列号、行号、列数、行数、格式信息、区域对象、工作表对象
替换内容
Excel区域操作
查找内容 / 替换为:要找的文本和换成的文本。
转义"查找内容" / 转义"替换为":把 \r \n \t 当成换行和 Tab。
区分大小写:默认关闭。
设置格式

在 格式 参数里写,每行一条,形式为 格式名称=格式值。
支持的格式如下:
| 格式名称 | 说明 | 示例 |
|---|---|---|
| Style | 风格名 | |
| Font.Name | 字体名称 | 楷体 |
| Font.Size | 字号 | 24 |
| Font.Bold | 是否粗体,1表示是,0表示否。下面的所有“是”“否”类型的参数,都是使用这两个数字表示是或否。 | |
| Font.Italic | 是否斜体 | |
| Font.Strikethrough | 是否显示删除线 | |
| Font.Superscript | 是否为上标 | |
| Font.Subscript | 是否为下标 | |
| Font.FontStyle | 字体样式文本 | |
| Font.Color | 字体颜色 | #FF0000 |
| Font.Underline | 下划线类型,可用值: xlUnderlineStyleNone 无 xlUnderlineStyleSingle 单下划线 xlUnderlineStyleDouble 粗双下划线 xlUnderlineStyleSingleAccounting 紧靠在一起的两条细下划线 参考 | |
| Interior.Color | 单元格底色 | #A0A0A0 |
| ShrinkToFit | 是否缩小文字适应单元格大小 | |
| VerticalAlignment | 垂直居中,可用值: xlVAlignBottom 底端对齐 xlVAlignCenter 居中 xlVAlignDistributed 分散对齐 xlVAlignJustify 两端对齐 xlVAlignTop 向上 参考 | |
| HorizontalAlignment | 水平居中,可用值: xlHAlignCenter 居中 xlHAlignCenterAcrossSelection 跨列居中。 xlHAlignDistributed 分散对齐。 xlHAlignFill 填充。 xlHAlignGeneral 按数据类型对齐。 xlHAlignJustify 两端对齐。 xlHAlignLeft 靠左。 xlHAlignRight 靠右。 | |
| Orientation | 文本角度,是-90到90之间的数字。或者下面的值: xlDownward 从上到下 xlHorizontal 从左到右 xlUpward 从下到上 xlVertical 从上到下并且在单元格中居中 | 30 |
| WrapText | 是否换行 | |
| Borders.All | 所有边框的风格。格式为英文逗号分隔的3个参数值:LineStyle,Weight,Color LineStyle可选值: xlContinuous 实线。 xlDash 虚线。 xlDashDot 点划相间线。 xlDashDotDot 划线后跟两个点。 xlDot 点线。 xlDouble 双线。 xlLineStyleNone 无线。 xlSlantDashDot 倾斜的划线。 Weight(宽度)可选值: xlHairline 极细 xlThin 细 xlMedium 中等. xlThick 粗 Color为#RRGGBB格式的颜色。 | |
| Borders.BorderIndex | 单独设置某一类边框的风格。 BorderIndex可能是下面的某一个: xlDiagonalDown xlDiagonalUp xlEdgeBottom xlEdgeLeft xlEdgeRight xlEdgeTop xlInsideHorizontal xlInsideVertical 值的格式与Borders.All相同,都是LineStyle,Weight,Color https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlbordersindex |
调用方法
调用Range对象的某一个方法。请参考VBA文档中Range对象的各个方法的说明获取详细信息。
每行一个方法,格式为:“方法名(不需要参数的方法):”或“方法名:参数1,参数2....”
简单方法:
| 方法 | 说明 |
|---|---|
| Activate: | 激活当前选中区域中的一个单元格。 被操作对象必须是一个单元格并且在选中范围内。如果要选中一个区域,使用Select:方法 链接 |
| AddComment:备注文字 | 给区域添加备注 |
| ApplyOutlineStyles: | 对指定区域应用分级显示样式 |
| AutoFill:目标区域,填充类型 | 目标区域:必须包含当前区域。可以使用类似A1:E9的格式。 填充类型:可选值请参考文档https://docs.microsoft.com/en-us/office/vba/api/excel.xlautofilltype |
| AutoFit: | 自适应尺寸。必须对“整列”或“整行”区域上执行。 |
| AutoOutline: | 自动为指定区域创建分级显示。如果区域为单个单元格,Microsoft Excel 将创建整个工作表的分级显示。新分级显示将取代所有的分级显示。 |
| Calculate: | 计算选择区域的公式 |
| CalculateRowMajorOrder: | 按单元格的左上角到右下角 (按行主要顺序) 计算指定范围的单元格 |
| Clear: | 清除整个区域 |
| ClearComments: | 清除指定区域的所有单元格批注 |
| ClearContents: | 清理区域中的公式和值 |
| ClearFormats: | 清除区域的格式设置 |
| ClearHyperlinks: | 删除指定区域中的所有超链接 |
| ClearNotes: | 清除指定区域中所有单元格的批注和语音批注 |
| ClearOutline: | 清除指定区域的分级显示 |
| Copy: Copy:目标区域 | 复制区域。如果未指定目标区域,则复制到剪贴板。 |
| Cut: Cut:目标区域 | 将对象剪切到剪贴板,或者将其粘贴到指定的目的地。 |
| CopyPicture:Appearance,Format | 将所选对象作为图片复制到剪贴板 Appearance的可选值:xlScreen(屏幕),xlPrinter(打印) Format的可选值:xlBitmap(位图),xlPicture(矢量图) |
| Delete: Delete:移动方向 | 删除区域。“移动方向”如何移动单元格来替换删除的单元格。可选值: xlShiftToLeft或xlShiftUp。 如果省略此参数,Excel 将根据区域的形状确定调整方式。 |
| Dirty: | 强制下次重新计算发生时计算这个区域 https://docs.microsoft.com/en-us/office/vba/api/excel.range.dirty |
| FillDown: | 从指定区域的顶部单元格开始向下填充,直至该区域的底部。 区域中首行单元格的内容和格式将复制到区域中其他行内。 |
| FillLeft: | 从右向左,从指定范围中的单元格的最右侧的单元格的填充。 内容和格式的单元格或单元格区域的右边的列会复制到区域中的列的其余部分。 |
| FillRight: | 从指定区域的最左边单元格开始向右填充。 区域中最左列单元格的内容和格式将复制到区域中其他列内。 |
| FillUp: | 填满从底部单元格或指定范围中的单元格区域的顶部。 内容和格式的单元格或单元格区域的底部行中会复制到区域中的行的其余部分。 |
| FunctionWizard: | 对指定区域左上角单元格启动“函数向导” |
| Insert:Shift,CopyOrigin | 插入单元格或区域。 Shift:可选。可以是下列的**XlInsertShiftDirection** 常量之一: xlShiftToRight或xlShiftDown。 如果省略此参数,Microsoft Excel 将根据区域的形状确定调整方式。 CopyOrigin:可选。副本源;也就是说, 从何处复制插入单元格的格式。 可以是下列的**XlInsertFormatOrigin** 常量之一: xlFormatFromLeftOrAbove (默认值) 或xlFormatFromRightOrBelow。 |
| InsertIndent:缩进量 | 向指定的区域添加缩进量。如果用本方法将缩进量设置为一个小于 0(零)或大于 15 的值,将出错。 |
| Parse:ParseLine,Destination | 分列区域内的数据并将这些数据分散放置于若干单元格中。 将区域内容分配于多个相邻接的列中;该区域只能包含一列。 ParseLine: 包含方括号的字符串,用以指明在何处拆分单元格。[xxx][xxx]将在目标区域的第一列中插入前三个字符, 并在第二列中插入后面的三个字符。 如果省略此参数, Microsoft Excel 将根据区域左上角单元格的间距推测出拆分列的位置。 Destination: 可选。一个代表用于放置分列数据的目标区域的左上角的 Range 对象。 如果省略该参数,Microsoft Excel 将在原处进行分列。 |
| Justify: | 调整区域内的文字,使之均衡地填充该区域。如果该区域不足够大,Microsoft Excel 将显示一条消息,告知您文本将超出范围。 |
| Merge:是否每行单独一个 | 从指定的 Range 对象创建合并单元格。合并区域的值在该区域左上角的单元格中指定。参数Across,可选,如果设置为 True,则将指定区域中每一行的单元格合并为一个单独的合并单元格。 默认值为 False。 |
| PrintOut:From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName | 打印区域。请参考:https://docs.microsoft.com/en-us/office/vba/api/excel.range.printout 示例: PrintOut:,,,,,,, |
| PrintPreview: | 按对象打印后的外观效果显示对象的预览 |
| RemoveDuplicates:Columns , Header | Columns:包含重复信息的列的编号数组,以英文分号分隔,如1;2 Header:指定第一行是否包含标题信息。可选值: xlGuess,由Excel猜测是否有标题,如果有的话,在哪里。xlYes:整个区域不应该被排序。xlNo:默认值,整个区域应该被排序。 |
| RemoveSubtotal: | 删除区域中的分类汇总 |
| Replace:What,Replacement,MatchCase | 替换内容(简单版)。查找和替换内容中不能包含逗号。 |
| Select: | 选择区域。 |
| SetPhonetic: | |
| Show: | 滚动当前活动窗口中的内容以将指定区域移到视图中。 此区域必须由活动文档中的单个单元格组成。 |
| ShowDependents: | 绘制从指定区域指向直接从属单元格的追踪箭头。 |
| ShowErrors: | 显示到源的错误,并返回的范围包含该单元格的单元格绘制通过从属单元格树的追踪箭头。 |
| ShowPrecedents: | 绘制从指定区域指向直接引用单元格的追踪箭头 |
| Subtotal:GroupBy, Function, TotalList, Replace, PageBreaks, SummaryBelowData | 创建分类汇总 请参考:https://docs.microsoft.com/en-us/office/vba/api/excel.range.subtotal GroupBy: 分组列编号(1开始) Function:分类汇总函数 XlConsolidationFunction 枚举 TotalList:使用分号;分隔的列序号。指示被分类汇总的字段。 Replace: True以替换现有的分类汇总。 默认值为 False PageBreaks:True以添加分页。 默认值为 False SummaryBelowData:放置相对于分类汇总的汇总数据。 - xlSummaryAbove 汇总行在大纲中位于明细数据行的上方。 - xlSummaryBelow 汇总行在大纲中位于明细数据行的下方。 |
| Ungroup: | 在大纲中的一个区域进行升级 (即,降低其大纲级别)。 指定的范围必须是行或列或行或列的范围。 如果该区域不在数据透视表报告中,此方法将取消范围中包含的项。 |
| UnMerge: | 将合并区域分解为独立的单元格 |
注:本文部分方法的说明参考自 https://www.bilibili.com/read/cv2365417/
较为复杂的方法
**AdvancedFilter:**Action, CriteriaRange, CopyToRange, Unique 高级筛选 VBA文档
参数:
Action 操作类型,可选值:
- xlFilterInPlace 将筛选结果显示在原位置
- xlFilterCopy 将筛选出的数据复制到新位置
CriteriaRange 条件区域,可选
CopyToRange 复制到的区域,可选
Unique 是否筛选唯一值
示例:
*AdvancedFilter:*xlFilterCopy,,G1:G9,true
Consolidate:Sources, Function, TopRow, LeftColumn, CreateLinks 合并计算
Sources:使用英文分号;分隔的多个需要计算的源区域。必须包含将要合并计算的工作表的完整路径。如Sheet1!R1C1:R4C2;Sheet1!R7C7:R10C8
Function:XlConsolidationFunction的常量值之一:
- xlAverage 平均.
- xlCount 计数.
- xlCountNums 只计数数值。
- xlDistinctCount 使用非重复计数分析进行计数。
- xlMax 最大值。
- xlMin 最小值。
- xlProduct 乘除.
- xlStDev 基于样本的标准偏差。
- xlStDevP 基于全体数据的标准偏差。
- xlSum 总值.
- xlUnknown 未指定任何分类汇总函数。
- xlVar 基于样本的方差。
- xlVarP 基于全体数据的方差。
*TopRow:可选,*如果为 True,则基于合并计算区域中首行内的列标题对数据进行合并。 如果为 False,则按位置进行合并计算。 默认值为 False。
*LeftColumn:*可选,如果为 True 则基于合并计算区域中左列内的行标题对数据进行合并计算。 如果为 False,则按位置进行合并计算。 默认值为 False。
*CreateLinks:可选,*如果为 True,则让合并计算使用工作表链接。 如果为 False,则让合并计算复制数据。 默认值为 False。
**ExportAsFixedFormat:**Type,FileName 导出为固定格式。(相对于原版方法参数有所精简)
Type:类型,可选xlTypePDF、xlTypeXPS
FileName:要导出的文件路径。
**PasteSpecial:**Paste, Operation, SkipBlanks, Transpose 特殊格式粘贴
Paste: 要粘贴的类型,可选值为XLPasteType的常量之一:
| 名称 | 说明 |
|---|---|
| xlPasteAll | 粘贴全部内容。 |
| xlPasteAllExceptBorders | 粘贴除边框外的全部内容。 |
| xlPasteAllMergingConditionalFormats | 将粘贴所有内容,并且将合并条件格式。 |
| xlPasteAllUsingSourceTheme | 使用源主题粘贴全部内容。 |
| xlPasteColumnWidths | 粘贴复制的列宽。 |
| xlPasteComments | 粘贴批注。 |
| xlPasteFormats | 粘贴复制的源格式。 |
| xlPasteFormulas | 粘贴公式。 |
| xlPasteFormulasAndNumberFormats | 粘贴公式和数字格式。 |
| xlPasteValidation | 粘贴有效性。 |
| xlPasteValues | 粘贴值。 |
| xlPasteValuesAndNumberFormats | 粘贴值和数字格式。 |
Operation:粘贴的操作方式,可选值为XlPasteSpecialOperation 的值之一:
| 名称 | 说明 |
|---|---|
| xlPasteSpecialOperationAdd | 复制的数据将被添加到目标单元格中的值。 |
| xlPasteSpecialOperationDivide | 复制的数据将除以目标单元格中的值。 |
| xlPasteSpecialOperationMultiply | 复制的数据将与目标单元格中的值相乘。 |
| xlPasteSpecialOperationNone | 粘贴操作中不执行任何计算。 |
| xlPasteSpecialOperationSubtract | 复制的数据将从目标单元格中的值中减去。 |
*SkipBlanks:*如果为 True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。 默认值为 False。
*Transpose:*如果为 True , 则在粘贴区域时转置行和列。 默认值为 False。
示例:
PasteSpecial:xlPasteValues,xlPasteSpecialOperationAdd,false,false
相关链接
更新于