A列に10個のデータがあって
3つずつに区切ってこのようにしたい
コード.gs
function run(){
var count = 3;
split_str_by_count(count);
}
function split_str_by_count(count) {
var sh = SpreadsheetApp.getActiveSheet();
var range = sh.getDataRange();
var values = range.getValues();
var array = array_push_apply(values);
var result = [];
for(var i = 0; i < (values.length/count)-1; i++){
var spliced = array.splice(0, count);
result.push(spliced);
}
set_values(result);
set_last_values(array, count);//set_values([result]);でも同じ
}
function array_push_apply(values){
for(var i = 1; i < values.length; i++){
Array.prototype.push.apply(values[0], values[i]);
}
return values[0];
}
function set_values(array){
var sh = SpreadsheetApp.getActiveSheet();
var last_row = sh.getLastRow();
var start_row = last_row + 1;
var start_col = 1;
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);
}
function set_last_values(array, count){
var blanks = count - array.length;
for(var j = 0; j < blanks; j++){
array.push("");
}
set_values([array]);
}
|
意訳この機能がやること 長さを決めて split_str_by_countに渡す この機能がやること アクティブシートを取得して データが入っている範囲を取得して その範囲内の値たちを取得すると二次元配列なので array_push_applyに渡して一次元配列にして result配列を用意して countの数で割り切れた分だけ以下を繰り返す 一次元配列からcountの分だけ取り出して result配列に追加して 追加し終わったresult配列をset_valuesに渡してシートに入力する countの数で割り切れなかった残りをset_last_valuesに渡して入力する この機能がやること 受け取ったvaluesの数だけ以下を繰り返す valuesの先頭の要素に後ろの要素を追加していく 追加し終わったら返す この機能がやること アクティブシートを取得して 受け取ったshの最後でデータが入っている最後の行を取得して その次の行をstartにして 1列目をstartにして arrayの要素数を取得して array[0]内の要素数を取得して 入力する範囲を指定して 入力する この機能がやること 受け取ったcount - arrayの長さ で空白にする要素数を取得して その数だけ以下を繰り返す arrayに空白を追加して set_valuesに2次元配列にして渡して入力する |
実行結果
実行したいシートで run() の countを決めて
run() を実行すると
例でみた10個のデータをこのように区切ることができる
区切った値を書き出す場所は
例では同じシートの最終行の下にしていますが
set_values(array) の中で任意の場所を指定できます


