LANG SELRCT

コードを書く場所

2019年4月8日月曜日

シートの選択範囲の値をユニークにして別の行に書き出したい


このように



関連記事

の合わせ技で実現したコード



コード.gs
//選択肢した範囲の値をユニークにして一列で書き出す
function get_unique_values() {
  var array = get_range_values();
  var unique = get_unique(array);
  var arrays = get1dTo2d(unique);
  set_values(arrays);
}

//範囲を一列に書き出す
function get_range_values() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var range = sh.getActiveRange();
  var value = range.getA1Notation();
  var values = sh.getRange(value).getValues();
  var col = values[0].length + 1;
  var row = 1;
  var array = [];
  for (var i = 0; i < values[0].length; i++) {
    for (var j = 0; j < values.length; j++) {
      if(values[j][i] != ""){
        array.push(values[j][i]);
        row++;
      }
    }
  }
  return array;
}

//一次元配列をユニークにする
function get_unique(values){
  var unique = values.filter(return_unique);
  return unique;
}

function return_unique(value_i, index, array){
  var value_i_index = array.indexOf(value_i);
  var result = value_i_index === index;
  return result;
}

//一次元配列を2次元配列にする[1,2,3]→[[1],[2],[3]]
function get1dTo2d(array) {
  var arrays = [];
  for(var i = 0; i < array.length; i++) {
    arrays.push([array[i]]);
  }
  return arrays;
}

//シートに書き出す
function set_values(array){
  var sh = SpreadsheetApp.getActiveSheet();
  var last_row = sh.getLastRow();
  var start_row = 1//last_row + 1;
  var start_col = sh.getLastColumn() + 2;
  var num_rows = array.length;
  var num_cols = array[0].length;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  range.setValues(array); 
}