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) の中で任意の場所を指定できます