Сбор всех уникальных значений из одного столбца и вывод их в другой столбец..?

у меня есть такая форма электронной таблицы:

 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

где первые 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

Он выводит только уникальные номера из столбца D.

Я представил себе запуск оператора if/else в цикле for или while, который проверяет каждую ячейку в "D" и сохраняет любое значение, ранее не "виденное" в массиве. Затем вывод массив в столбец Е.

мне было интересно, если есть более эффективный способ сделать это. Также вышеприведенное - лишь небольшой пример. Скорее всего, в диапазоне в диапазоне 400. (Гребите мудро. Колонок всего 4 или 5, включая новый выходной столбец.)

спасибо заранее.

С. П. Я искал это здесь, но я получаю только вопросы, связанные с удалением повторяющихся строк. Если есть вопрос, который уже задает это, пожалуйста, свяжите меня с ним.

2 ответов


вот способ сделать это... возможно, не единственный, но, возможно, неплохой...

я добавил несколько поленьев, чтобы увидеть промежуточные результаты в журнал.

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))
  }

EDIT:

после ответа Теодроса формула электронной таблицы действительно элегантное решение, я никогда не думаю об этом, но я должен !!! ;-)

=SORT(UNIQUE(D1:D))

дает точно такой же результат...


вы можете сделать это внутри google-электронные таблицы С