从一列收集所有唯一值并将其输出到另一列中.?

Phy*_*sar 6 google-sheets unique-values google-apps-script output

我有这种形式的电子表格:

 A   B   C  D
abc abc abc 1
def ghi jkl 1
mno pqr stu 3
vwx yza bcd 4
mno pqr stu 5
mno pqr stu 5
vwx yza bcd 5
mno pqr stu 1
Run Code Online (Sandbox Code Playgroud)

前3列只是string类型的数据.列D具有重复数字的整数.我的问题是如何输出第五列,如下所示:

 A   B   C  D E
abc abc abc 1 1
def ghi jkl 1 3
mno pqr stu 3 4
vwx yza bcd 4 5
mno pqr stu 5
mno pqr stu 5
vwx yza bcd 5
mno pqr stu 1
Run Code Online (Sandbox Code Playgroud)

它只输出D列中的唯一数字.

我想象在for或while循环中运行if/else语句,它检查"D"中的每个单元格并存储以前未在数组中"看到"的任何值.然后在E列中输出数组.

我想知道是否有更有效的方法来做到这一点.以上只是一个小例子.最有可能的数据范围是400范围.(行明智.列只有4或5,包括新的输出列.)

提前致谢.

PS我在这里搜索了这个,但我只收到与删除重复行有关的问题.如果有问题已经提出,请将我链接到它.

The*_*eke 15

您可以使用该功能在google-spreadsheets中执行此操作UNIQUE.
这是所有可用功能的文档.
(你UNIQUEFilter类别中找到)

您很可能想要插入单元格E1:

=UNIQUE(D1:D)
Run Code Online (Sandbox Code Playgroud)

这将E使用所有列中的唯一值填充列,D同时保留订单.此外,这将动态更新并反映对列所做的所有更改D.

要在google-apps-script中执行此操作:

SpreadsheetApp.getActiveSheet()
 .getRange("E1").setFormula("=UNIQUE(D1:D)");
Run Code Online (Sandbox Code Playgroud)


Ser*_*sas 6

这是一种方法来做到这一点......可能不是唯一一个但可能并不坏......

我添加了一些日志来查看记录器中的中间结果.

function keepUnique(){
  var col = 3 ; // choose the column you want to use as data source (0 indexed, it works at array level)
  var sh = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data=ss.getDataRange().getValues();// get all data
  Logger.log(data);
  var newdata = new Array();
  for(nn in data){
    var duplicate = false;
    for(j in newdata){
      if(data[nn][col] == newdata[j][0]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newdata.push([data[nn][col]]);
    }
  }
  Logger.log(newdata);
  newdata.sort(function(x,y){
  var xp = Number(x[0]);// ensure you get numbers
  var yp = Number(y[0]);
  return xp == yp ? 0 : xp < yp ? -1 : 1;// sort on numeric ascending
});
  Logger.log(newdata);
 sh.getRange(1,5,newdata.length,newdata[0].length).setValues(newdata);// paste new values sorted in column of your choice (here column 5, indexed from 1, we are on a sheet))
  }
Run Code Online (Sandbox Code Playgroud)

编辑:

在Theodros回答之后,电子表格公式确实是一个优雅的解决方案,我从来没有想过它,但我应该!;-)

=SORT(UNIQUE(D1:D))
Run Code Online (Sandbox Code Playgroud)

给出完全相同的结果......