第一版是单列删除,ActiveCell返回一个 Range 对象,该对象代表活动窗口的活动单元格,注意区分活动单元格和选定区域。活动单元格是当前选定区域内的单个单元格。选定区域可能包含多个单元格,但只有一个是活动单元格。
function Macro1()
{
//1、获取选中单元格列号
var b = ActiveCell.Cells.Column;
var a = ActiveCell.Cells.Row;
//console.log("选中区域首行:"+a);
//console.log("选中区域首列:"+b);
//2、选中所选单元格所属列
/*知识点:
Cells.Item(a,b),Item是Cells的属性,返回集合中的单个单元格对象
*/
//Sheets("Sheet1").Cells.Item(a,b).EntireColumn.Select();
Sheets("Sheet1").Range(Cells(a,b),Cells(a,b)).EntireColumn.Select();
//3、执行删除重复值
/*知识点:
RemoveDuplicates (Columns 、 Header) ,从值区域中删除重复的值,表示 Range 对象的变量
Variant 包含重复信息的列的索引数组
XlYesNoGuess 指定第一行是否包含标题信息。 xlNo 是默认值;
*/
//Sheets("Sheet1").Cells.Item(a,b).EntireColumn.RemoveDuplicates(1, xlYes);
Sheets("Sheet1").Range(Cells(a,b),Cells(a,b)).EntireColumn.RemoveDuplicates(1, xlYes);
}
第二版是既能单列删除也能多列删除,Selection对象代表窗口或窗格中的当前所选内容,每个文档窗格只能有一个Selection对象,并且在整个应用程序中只能有一个活动的Selection对象。这个Selection查了N多资料,真费劲。
function Macro1()
{
//1、获取当前选中区域
var e =Selection.Cells.Address();
var a = Range(e).Columns.Count;
//console.log("所选区域的列数:"+a);
//console.log("所选区域的地址:"+e);
//2、选中所选单元格所属列
Range(e).EntireColumn.Select();
//3、创建数组,将列数通过遍历添加到数组中
var arr = new Array();
for(var i = 1 ; i <= a ; i++){
arr[i-1]=i;
//console.log(arr.length);
}
//4、执行删除重复值
Range(e).EntireColumn.RemoveDuplicates(arr, xlYes);
}