任课情况表: for (var Rng1 of arr=Sheets("合并处理").Range("e2:e20")) 2、对合并的行数组,进行每个单元格合并 for (var Rng of Sheets("合并处理").Range(Cells(2,2),Cells(82,2))){ var name=Rng.Value(); 3、 由于填写其他表格的需要,所以对任教年级与课程内容也进行了合并!并且对重复的内容行了去重操作。 function 合并区域单元格(){ for (var Rng1 of arr=Sheets("合并处理").Range("e2:e20")){ //修改处Range("d2:d20") var arr1=[]; var arr2=[]; var arr3=[]; for (var Rng of Sheets("合并处理").Range(Cells(2,2),Cells(82,2))){ var name=Rng.Value(); if(name.indexOf(Rng1.Value())>-1){ var grades=Sheets("合并处理").Range(Cells(Rng.Row,3),Cells(Rng.Row,3)).Value(); var curriculum=Sheets("合并处理").Range(Cells(Rng.Row,4),Cells(Rng.Row,4)).Value(); arr1.push(grades); arr2.push(curriculum); arr3.push(grades+curriculum); } } var DateArr=[...new Set(arr1)].join("、"); var newarr=[...new Set(arr2)].join("、"); Sheets("合并处理").Cells(Rng1.Row,6).Value2=DateArr+newarr; Sheets("合并处理").Cells(Rng1.Row,7).Value2=[...arr3].join("、"); } } 4、循环的顺序要与单元格一一对应,此处比较难。 function CommandButton1_Click(){ //Sheets("任课情况表一").Range("F6:AI24").Select(); //Selection; //清空统计区域 for (var Rng1 of Sheets("任课情况表一").Range("b6:b24")){ //获取统计单元格区域 var Num=1 var NumA=1 var NumB=1 while(NumB<7){ //循环6次 for (var Rng of Sheets("功课表格式一").Range(Cells(3+NumB,2),Cells(3+NumB,36))){ //用for循环遍历获取每次循环的单元格区域的数组Cells(行,列) //,Range(Cells(4,2),Cells(4,32))等价于Range("b4:aj4") var name=Rng.Value(); //每次获得单元格值赋给变量name if(name.indexOf(Rng1.Value())>-1){ //用indexof方法判断搜索字符是否存在 var NumA=Num%5 //求获得单元的位置的余数作为定位标准 if(NumA==0){ //单元定位不能为0赋为5 NumA=5 } Sheets("任课情况表一").Cells(Rng1.Row,6*NumA+NumB-1).Value2="0" //获得定位的单元格写入指定数据 Rng1.Column } Num++ } NumB++ } } } 5、使用重新构造集合set()的方法去重。 function test(){ var arr=Sheets("去重处理").Range("a1:a240").Value(); //修改处Range("a1:a240") var DateArr=[...new Set(arr.map(ar=>ar[0]))]; var NewArr=DateArr.map(d=>arr.find(ar=>ar[0]==d)); Range("g2").Resize(NewArr.length,NewArr[0].length).Value2=NewArr; } 6、不同表格内容的单元格去重。 function test2() { i=40 //修改处i=功课表区域列数 for (var Rng1 of Sheets("任课情况表二").Range("b6:b24")){ //获取统计单元格区域修改处Range("b6:b24") Num=1 NumA=1 NumB=1 while(NumB<i+1){ //循环6次 for (var Rng of Sheets("功课表格式二").Range(Cells(4,NumB+1),Cells(9,NumB+1))){ //用for循环遍历获取每次循环的单元格区域的数组Cells(行,列) //,Range(Cells(4,2),Cells(4,32))等价于Range("b4:aj4") var name=Rng.Value(); //每次获得单元格值赋给变量name if(name.indexOf(Rng1.Value())>-1){ //用indexof方法判断搜索字符是否存在 var NumA=Num%6 //求获得单元的位置的余数作为定位标准 if(NumA==0){ //单元定位不能为0赋为5 NumA=6 } Sheets("任课情况表二").Cells(Rng1.Row,5+NumA+Math.trunc((NumB-1)/(i/5))*6).Value2="0" } Num++ } NumB++ } } } 7、表格的对应顺序比较难操作,经过多次调试才完成。 |
|
来自: 优美的代码 > 《WPS JS宏基础与实践》