WPS宏模拟vlookup函数功能

第一版:不指定返回值,比对500行左右,运行2秒

function JIn26() {

//记录时间

console.log("当前时间:‌" + new Date().toLocaleString());

// InputBox方法可弹出框,用于交互

var rst1 = InputBox("输入比对列的Sheet页及列号、‌<br>被比对列的Sheet页及列号用','隔开:‌");// Sheet1,5,Sheet2,4

var strArray = rst1.split(',');

var sheet1 = strArray[0];

var col1 = Number(strArray[1]);

var sheet2 = strArray[2];

var col2 = Number(strArray[3]);

// 使用字典存储Sheet2页被比对列的数据,‌以提高查找效率

var bijiaoDict = {};

var sheet2Data = Application.Worksheets.Item(sheet2).Range(

Cells(2, col2),

Cells(Cells.Item(2, col2).End(xlDown).Row, col2)

).Value();

for (let yy = 0; yy < sheet2Data.length; yy++) {

bijiaoDict[sheet2Data[yy]] = true;

}

//定位到Sheet1页在用户输入的比较列旁边插入一列

Application.Worksheets.Item(sheet1).Range(

Cells(2, col1 + 1),

Cells(Cells.Item(2, col1 + 1).End(xlDown).Row, col1 + 1)

).EntireColumn.Insert(xlShiftToRight, false);

//定位到Sheet1页数据

var sheet1Data = Application.Worksheets.Item(sheet1).Range(

Cells(2, col1),

Cells(Cells.Item(2, col1).End(xlDown).Row, col1)

).Value();

//遍历赋值

for (let y1 = 2; y1 <= sheet1Data.length + 1; y1++) {

var czz = sheet1Data[y1 - 2];

if (bijiaoDict[czz]) {

Application.Worksheets.Item(sheet1).Cells.Item(y1, col1 + 1).Value2 = czz;

} else {

Application.Worksheets.Item(sheet1).Cells.Item(y1, col1 + 1).Value2 = "未找到";

}

}

console.log("结束时间:‌" + new Date().toLocaleString());

}

第二版:指定返回值,比对500行左右,运行40秒

function JIn25()

{

console.log("开始时间:‌" + new Date().toLocaleString());

// InputBox方法可弹出框,用于交互

var rst1 = InputBox("请输入比对列的Sheet页及列号、‌<br>被比对列的Sheet页及列号、返回值<br>的列号被用','隔开:‌");// Sheet1,5,Sheet2,4,7

var strArray = rst1.split(',');

var sheet1 = strArray[0];

var col1 = Number(strArray[1]);

var sheet2 = strArray[2];

var col2 = Number(strArray[3]);

var col3 = Number(strArray[4]);

if(strArray.length!=5 || isNaN(col3) || col3==""){

alert("输入错误!");

}else{

//封装被比较列值的数组

Application.Worksheets.Item(sheet2).Activate();

var range1 = Range(Cells(2,col2),Cells(Cells.Item(2,col2).End(xlDown).Row,col2)).Value();

var range2 = Range(Cells(2,col3),Cells(Cells.Item(2,col3).End(xlDown).Row,col3)).Value();

var bijiao = new Array();

for (let y = 0; y < range1.length; y++) {

bijiao.push(range1[y]+":"+range2[y]);

}

//Sheet1页比较列的旁边插入空白列

Application.Worksheets.Item(sheet1).Activate();

Range(Cells(2,Number(col1)+1),Cells(Cells.Item(2,Number(col1)+1).End(xlDown).Row,Number(col1)+1)).EntireColumn.Insert(xlShiftToRight, false);

//Sheet1页比较列的值for循环

var le = Sheets(sheet1).Cells.Item(2,col1).End(xlDown).Row;

for (let y1 = 2; y1 <= le; y1++) {

var czz = Sheets(sheet1).Cells.Item(y1,col1).Value2;

//遍历比较

for (let yy = 2; yy < bijiao.length+2; yy++) {

var value = bijiao[yy-2];

var value1 = value.split(':');

if(czz==value1[0]){

Application.Worksheets.Item(sheet1).Activate();

var nubr = Number(col1)+1;

Cells.Item(y1,nubr).Value2 = value1[1];

break;

}else{

Application.Worksheets.Item(sheet1).Activate();

var nub = Number(col1)+1;

Cells.Item(y1,nub).Value2 = "#Name";

}

}

}

console.log("结束时间:‌" + new Date().toLocaleString());

}

}

相关推荐
伍哥的传说43 分钟前
鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)
前端·华为·前端框架·harmonyos·鸿蒙
yugi9878381 小时前
前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
前端
浪裡遊1 小时前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
旧曲重听12 小时前
最快实现的前端灰度方案
前端·程序人生·状态模式
默默coding的程序猿2 小时前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
夏梦春蝉2 小时前
ES6从入门到精通:常用知识点
前端·javascript·es6
归于尽2 小时前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课2 小时前
React useEffect 详解与运用
前端·react.js
我想说一句2 小时前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript
funnycoffee1232 小时前
Huawei 6730 Switch software upgrade example版本升级
java·前端·华为