【js宏】wps中筛选每个月新增的不重复项目

在这里插入图片描述
结果:
在这里插入图片描述
因为原表不能动,于是新建副本在里面操作。

/**
*	筛选出每个月新增的不重复项目,先排序后去重,目的是留下的是月份最小的项目。
*/
function 查找新增项目(){
	Console.clear();
	AddSheet();
	Sort("月份");		//排序
	Unique("建设单位");	//去重
}
function Sort(a)
{
	var target_name = a;
	//查找值
	/**知识点:定位单元格位置*/
	let cell = Cells.Find(target_name).Select();
	var col = ActiveCell.Cells.Column;
	var row = ActiveCell.Cells.Row;
	let rangeCell = Range(Cells(row,col),Cells(row,col));
	var rowend = Cells(Rows.Count,1).End(xlUp).Row;
	// 按列进行升序排序
	Columns(col).Select();
	(obj=>{
		(obj=>{
			obj.Clear();
			// xlDescending降序;xlAscending升序
			obj.Add(rangeCell, undefined, xlAscending, undefined, undefined);
		})(obj.SortFields);
		obj.Header = xlYes;				// 首行标题行
		obj.MatchCase = false;			// 不区分大小写
		obj.SortMethod = xlPinYin;		// 拼音
		obj.Orientation = xlSortColumns;// 排序方向 按列
		obj.SetRange(Range(Rows(1),Rows(rowend)));
		obj.Apply();
	})(ActiveSheet.Sort);
	//alert("排序完成");
	Debug.Print("排序完成");
}
function Unique(b) 
{
    var target_name = b;
	//查找值
	let cell = Cells.Find(target_name).Select();
	var col = ActiveCell.Cells.Column;
	var row = ActiveCell.Cells.Row;
	let rangeCell = Range(Cells(row,col),Cells(row,col));
	var rowend = Cells(Rows.Count,1).End(xlUp).Row;
	//去重
	Range(Rows(1),Rows(rowend)).Select();
	Selection.RemoveDuplicates(col, xlYes);
	Debug.Print("去重完成");
}
function AddSheet()
{
	ActiveSheet.Copy(null, Application.Sheets.Item("其他费用估算表"));
	Debug.Print("新增完成");
}
/** 在点击目标表时自动弹出执行窗口
*/
function Workbook_SheetActivate()
{
	/**知识点:获取表名*/
	var sh = ActiveSheet.Name;
	if(sh == "项目分项估算表"){
		if(MsgBox("查找新增项目",jsOKCancel)==1)
		{
			查找新增项目();
		}
	}
}

下一步的问题:

  • 想将代码封装,给不懂代码的人每次运行的时候有个按钮一点就行,有什么好方法吗?用户窗体显示的话好像不能一块封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值