分享免费的编程资源和教程

网站首页 > 技术教程 正文

JSA宏教程WPS表格常用内置对象——单元格区域(Range)对象(五)

goqiw 2024-11-22 14:50:45 技术教程 6 ℃ 0 评论

本节是WPS表格常用内置对象模型Range的最后一点内容。

填充类方法:AutoFill、FillDown、FillUp、FillRight、FillLeft(演示AutoFill和FillDown)

查找替换类方法:Find、FindNext、FindPrevious、Replace(演示Find和Replace)

练习

练习1:练习自动填充、向下填充

一共六列数据:第三列是求第一列和第二列之和;第六列是求第四列及第五列之和。

分别用自动填充(AutoFill)和向下填充(FillDown).

AutoFill演示

//AutoFill,自动填充rngSource.AutoFill (FillTarget, AutoFillType);
//意思是将rngSource单元格的内容,自动扩展到FillTarget目标单元格区域,扩展的方式,采用自动填充的类型
function fillAutoFill(){
	let wsh = ActiveWorkbook.Worksheets('Sheet1');
	let target = wsh.Range('E2:E16');
	let source = wsh.Range('E2');
	source.Formula = '=C2+D2';
	source.AutoFill(target,xlFillSeries);
}
//上述代码中:源单元格区域就是E2单元格,先设置好这个单元格的公式。
//接下来设置好目标单元格区域:目标单元格区域是E2:E16这个区域,需自动向下填充公式的
/*xlFillSeries:是个枚举类型的值,为2。在此处的意思是将源区域中的值扩展到目标区域中,形式为系列(如,“1, 2”扩展为“3, 4, 5”)。 
格式从源区域复制到目标区域,如有必要可重复执行。
*/

上述代码中的枚举AutoFillType的种类如下,如果该参数省略默认为0即是xlFillDefault:

名称

Description

xlFillCopy

1

将源区域的值和格式复制到目标区域,如有必要可重复执行。

xlFillDays

5

将星期中每天的名称从源区域扩展到目标区域中。 格式从源区域复制到目标区域,如有必要可重复执行。

xlFillDefault

0

Excel 确定用于填充目标区域的值和格式。

xlFillFormats

3

只将源区域的格式复制到目标区域,如有必要可重复执行。

xlFillMonths

7

将月名称从源区域扩展到目标区域中。 格式从源区域复制到目标区域,如有必要可重复执行。

xlFillSeries

2

将源区域中的值扩展到目标区域中,形式为系列(如,“1, 2”扩展为“3, 4, 5”)。 格式从源区域复制到目标区域,如有必要可重复执行。

xlFillValues

4

只将源区域的值复制到目标区域,如有必要可重复执行。

xlFillWeekdays

6

将工作周每天的名称从源区域扩展到目标区域中。 格式从源区域复制到目标区域,如有必要可重复执行。

xlFillYears

8

将年从源区域扩展到目标区域中。 格式从源区域复制到目标区域,如有必要可重复执行。

xlGrowthTrend

10

将数值从源区域扩展到目标区域中,假定源区域的数字之间是乘法关系(如,“1, 2,”扩展为“4, 8, 16”,假定每个数字都是前一个数字乘以某个值的结果)。 格式从源区域复制到目标区域,如有必要可重复执行。

xlLinearTrend

9

将数值从源区域扩展到目标区域中,假定数字之间是加法关系(如,“1, 2,”扩展为“3, 4, 5”,假定每个数字都是前一个数字加上某个值的结果)。 格式从源区域复制到目标区域,如有必要可重复执行。

xlFlashFill

11

根据先前用户操作检测到的模式,将源范围中的值扩展到目标范围,如有必要,请重复。

FillDown演示

/*
FillDown:从指定区域的顶部单元格开始向下填充,直至该区域的底部。
         区域中首行单元格的内容和格式将复制到区域中其他行内。
*/
function fillFillDown(){
	let wsh = ActiveWorkbook.Worksheets('Sheet1');
	let rngFill = wsh.Range('H2:H16');//指定区域
	rngFill.Cells(1).Formula = '=F2+G2';//指定区域的顶部单元格
	rngFill.FillDown();//指定区域向下填充
}

上述两个方法的演示效果:

练习2:在指定区域查找名字中带有“成”的学生成绩情况,Find的语法如下:

Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

其实这个方法就是用户界面中的“查找”功能,它们一一对应的关系如下图:

这些参数的含义是:

名称

选项

数据类型

说明

What

必需

Variant

要搜索的数据。 可为字符串或任意 Microsoft Excel 数据数型。

After

可选

Variant

要在其后开始搜索的单元格。 从用户界面搜索时,这对应于活动单元格的位置。请注意,After 必须是区域内的单个单元格。 请注意,搜索在此单元格之后开始;在方法回绕到此单元格之前,不会搜索指定的单元格。如果未指定此参数,搜索将在区域左上角的单元格后面开始。

LookIn

可选

Variant

可以是下列 XlFindLookIn常量之一:xlFormulasxlValuesxlCommentsxlCommentsThreaded

LookAt

可选

Variant

可以是下列 XlLookAt常量之一:xlWholexlPart

SearchOrder

可选

Variant

可以是以下 XlSearchOrder常量之一:xlByRowsxlByColumns

SearchDirection

可选

Variant

可以是以下 XlSearchDirection常量之一: xlNextxlPrevious

MatchCase

可选

Variant

如果为 True,则搜索区分大小写。 默认值为 False

MatchByte

可选

Variant

仅在选择或安装了双字节语言支持时使用。 如果为 True,则双字节字符仅匹配双字节字符。 如果为 False,则双字节字符匹配其单字节等效字符。

SearchFormat

可选

Variant

搜索格式。

function findFind(){
	//Range.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
	/*
  wsh:是定工作表对象变量,用来存贮Sheet1工作表
  rngFind:是用来存贮我们要进行查找的单元格区域。
  */
  let wsh = ActiveWorkbook.Worksheets('Sheet1');
	let rngFind = wsh.Range('A1:H16');
  /*
  findContent:是要查找的内容,即对应上方语法中的what
  findResult:是个数组,是用来存放每次查找的结果的。因为find这个方法自己并不会主动去循环查找,
              要想实现循环查找,就要通过一个数组将每次查找的结果都存贮起来。
  findFlag:是一个布尔类型的值,用来制作一个循环标识,当它是true时,就让循环进行下去,false时就
            退出循环。
  Counter:是一个整数,用来做计数器的,目的是为了防止出现死循环。一但循环次数超过一定次数,就
            退出循环。
  lastRange:是用来存放上一次被查找到的位置,用以实现查找下一个要查找的内容。
  */
	let findContent = '成';
	let findResult = [];
	let findFlag = true;
	let Counter = 0;
	let lastRange;
  const ENDCOUNT = 100000;
  /*
  以下while循环是实现连续查找的核心。即是一次性将所有符合的内容都查找出来。
    当findFlag为true时,循环就会一直执行;当为false时,循环终止。
  */
	while(findFlag)
	{
		let v;
    //条件运算符:如果Counter为0,则表示是第一次查找,那就执行find方法,否则就执行findnext方法
		lastRange = Counter == 0 ? rngFind.Find(findContent) : rngFind.FindNext(lastRange);
		//将查找到的单元格的值赋值给v
    v = lastRange.Value2;
    //条件运算符:如果数组中没有v,就把v加入到数组中,如果存在了,就将Counter直接设为循环终了
		(findResult.indexOf(v) < 0) ? findResult.push(v) : Counter = ENDCOUNT;
    /*条件运算符:如果v为空,即上述已经找不到要查找的内容了或者达到循环次数了,就让循环标识为false
                  否则为true。
    */
		findFlag = (v == undefined || v == null || Counter == ENDCOUNT) ? false : true;
    //一次循环结束,让Counter自增1。
		Counter++;
	}
  //将查找到的结果赋值到I2单元格开始的单元格区域中。
	ActiveWorkbook.Worksheets('Sheet1').Range('I2').Resize(1,findResult.length).Value2 = findResult;
}

以上代码复制后即可运行。

小编的演示文档会保存起来,免费提供给大家学习,如有需要关注后私信说明要哪一章节的演示文档。

请注意:演示文档与小编的教程同步即是小编的教程到哪一步,演示文档就到哪一章节。

关注我,持续共同学习,一起踏上wps宏(JSA)的登山之路。

#头条创作挑战赛#

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表