WPS宏编程:实现数据表与查询表联动的高效方法 点击使用AI助手 了解更多

发布于 2024-10-11 liusiyang 256 编辑

【案例】下面是一张数据表和一张查询表,当我们在查询表单击A列的村名时,会在C:H区域实时显示该村的查询结果。

【代码】具体代码如下,可按ALT+F11打开WPS宏编辑器,复制下面的代码粘贴到编辑器中。

function Workbook_SheetSelectionChange(Sh, Target)

{

if(Sh.Name=='查询表'

&& Target.Column==1

&& Target.Row>1

&& Target.Count==1

)

{

ar=Sheets.Item('数据表').Range("a1").CurrentRegion.Value2

Range('c5:h65535').ClearContents()

br=二维数组查询(ar,1,Target)

Range('c2').Resize(br.length,br[0].length).Value2=br

}

}

function 二维数组查询(数组,查找列,查找值)

{

let 结果数组=[]

k=0

for(i=0;i<数组.length;i++){

结果数组[i]=new Array(数组[0].length)

if(数组[i][查找列-1]==查找值){

for(j=0;j<数组[0].length;j++){

结果数组[k][j]=数组[i][j]

}

k++

}

}

return 结果数组

}

【代码解释】

// 这是一个工作表单元格选择事件,当单元格被选择时触发相应事件

function Workbook_SheetSelectionChange(Sh, Target) {

// 如果工作表名是'查询表'...

if(Sh.Name=='查询表'

// 并且被选择的列为第一列..

&& Target.Column==1

// 并且被选择的行大于第一行

&& Target.Row>1

// 并且被选择的单元格只有一个

&& Target.Count==1

) {

// 将数据表的数据区域赋值给ar。

ar=Sheets.Item('数据表').Range("a1").CurrentRegion.Value2

// 清除范围为'c5:h65535'的所有单元格的内容。

Range('c5:h65535').ClearContents()

// 调用二维数组查询函数(下文中有解释),将结果赋值给br。参数包括ar(前面获取的数据),查找列为第一列的村名,以及查找值为被选择的单元格。

br=二维数组查询(ar,1,Target)

// 将二维数组br的内容输出到C2至H列区域。

Range('c2').Resize(br.length,br[0].length).Value2=br

}

}

// 定义了一个名为二维数组查询的函数,该函数接收三个参数:数组、查找列和查找值。

function 二维数组查询(数组,查找列,查找值) {

// 初始化一个空数组,准备用来存放查询结果。

let 结果数组=[]

// 初始化一个变量k,初值为0,用来记录找到的符合条件的行数。

k=0

// 遍历输入的数组。

for(i=0;i<数组.length;i++){

// 在结果数组中添加一个新的空数组,长度与原数组的第一行长度相同。这是为了存储可能存在的不规则二维数组。

结果数组[i]=new Array(数组[0].length)

// 如果数组的当前行的查找列的值等于查找值...

if(数组[i][查找列-1]==查找值){

// 将当前行的所有数据复制到结果数组的对应位置。

for(j=0;j<数组[0].length;j++){

结果数组[k][j]=数组[i][j]

}

// 将k增加1,表示找到了一行符合条件的记录。

k++

}

}

// 返回结果数组。

return 结果数组

}

【素材下载】点击下方链接,下载文件至本地文件夹进行练习。

https://www.kdocs.cn/l/ch1o5oEIXjEv

原文链接:https://bbs.wps.cn/topic/9261

上一篇: WPS从入门到熟练的快速指南
下一篇: 提升文档编辑效率:WPS文字编辑功能详解
相关文章