||
关于拆分功能,网上很多,抄抄改改即可。为了通用,我们增加个设置的功能。设置,可以按上图技术路径自选。打个样如下:
拆分:
function CF(){
Application.DisplayAlerts=false; //关闭提醒,防止拆分过程被打断
new_custab();//调用新建客户表程序
Sheets.Item("设置").Visible=false;
// 获取"设置"工作表
var sheet = Sheets.Item("设置");
// 获取A2:AZ2的范围
var range = sheet.Range("A2:AZ2");
// 将范围的值加载到数组中
var dataArray = range.Value2[0];
obj={}; //定义一个字典对象obj,用于存放文件标题
//获取公司名字字段
let isheet = ThisWorkbook.Sheets.Item("结算及尾款");
let icellValue = isheet.Range("A1").Value2;
// 定义要检查的关键字
let keywords = ["金桂", "玖龙", "理文", "太阳", "仙鹤"];
// 初始化变量
let globalVar = "";
// 检查单元格值是否包含关键字
for (let bf = 0; bf < keywords.length; bf++) {
if(icellValue.indexOf(keywords[bf])!== -1) {
globalVar = keywords[bf];
break; // 找到匹配的关键字后跳出循环
}
}
p=ThisWorkbook.Path+"//"+globalVar+" - "; //拆分文件夹
//p="C:\\Users\\Administrator\\Desktop\\拆分";
th=ThisWorkbook.ActiveSheet;
//t = parseInt(InputBox("请输入标题行数","标题行数",3)); //标题行数,接受用户输入
t=3;
//col=InputBox("请输入拆分列名","拆分列名",'d'); //拆分列名,接受用户输入
col="D";
c = th.Range(col+1).Column; //获取拆分列号
rn=th.Range("A"+Rows.Count).End(xlUp).Row; //最后一行数据行号
tg=Rows("1:"+t); //将标题区域写入单元格对象tg
ar=th.Range(col+(t+1)+":"+col+rn).Value2; //将关键列写入数组ar
ar.forEach(v=>obj[v]=v); //将拆分列写入字典对象obj,目的是去重
for(k of Object.keys(obj)){
th.Range("A"+t).AutoFilter(); //取消筛选
let nw = Workbooks.Add(); //新建工作簿
let sh = nw.Sheets.Item(1); //新工作簿的第一张工作表
tg.Copy(sh.Range("A1:AX"+t));
th.Range("A"+t).AutoFilter(c,k); //筛选数据
th.Range("A"+t).CurrentRegion.Offset(1,0).Copy(
sh.Range("A"+(t+1))); //复制筛选后的数据
q=k+"-"+Range("A2")+"-";
//求和
for(let ii=0;ii<=51;ii++){
let da=dataArray[ii];
if(da==1||da=="1"){
var kk=4;
let iisum=0;
let wo=ii+1;
while(nw.Sheets.Item(1).Cells(kk,wo).Value2!=undefined){
iisum+=nw.Sheets.Item(1).Cells(kk,wo).Value2;
kk+=1;
}
nw.Sheets.Item(1).Cells(kk,wo).Value2=iisum;
nw.Sheets.Item(1).Cells(kk,3).Value2="合计";
//格式调整
nw.Sheets.Item(1).Columns.Item(wo).Select();
Selection.ColumnWidth =40;
nw.Sheets.Item(1).Cells(kk,wo).Select();
Selection.NumberFormatLocal = "G/通用格式";
Selection.NumberFormatLocal = "#,##0.000_ ";
(obj=>{
obj.HorizontalAlignment = xlHAlignCenter;
obj.VerticalAlignment = xlVAlignCenter;
})(Selection);
}
}
//把合计弄到第4行
let c_n=4;
while(nw.Sheets.Item(1).Cells(c_n,3).Value2!=undefined){//确定合计所在的行
c_n+=1;
}
c_n-=1;
Rows.Item(c_n).Select();
Selection.Cut(undefined);
Rows.Item("4:4").Select();
Rows.Item(c_n).Cut(undefined);
ActiveSheet.Select(false);
Selection.Insert(xlShiftDown, undefined);
ActiveSheet.Select(false);
Range("A4").Select();
//把序号重新排排序
var inum=c_n-4;
for(icle=1;icle<=inum;icle++){
let ddd=4+icle;
Range("A"+ddd).Value2=icle;
}
//保存
nw.SaveAs(p + q + ".xlsx", undefined, undefined, undefined, undefined, undefined, xlNoChange, 1, -1, undefined, undefined); //保存表格
nw.Close(); //关闭表格
th.Range("A"+t).AutoFilter(); //取消筛选
}
th.Range("A"+t).AutoFilter(); //取消筛选
//删除客户表
var sh;
for (sh of Sheets){
if(sh.Name!="润港发玖龙结算及尾款" && sh.Name!="设置"){
sh.Delete();
}
}
//关闭“设置”表
set_tab_close();
//打开提醒
Application.DisplayAlerts=true;
alert("拆分完成!");
}
改名|钢镚|会员|联系我们|公卫人
( 沪ICP备06060850号-3|沪公网安备31010402334125号 )
GMT+8, 2025-8-31 23:43 , Processed in 0.033058 second(s), 6 queries , Gzip On, Redis On.
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.