データ転記・整形を自動化するGASテンプレート集
「Aシートのデータを加工してBシートに転記する」作業は、現場で非常によく出てくるGASの使い道です。コピペで使えるテンプレートを4パターン用意しました。
パターン1:条件に合う行だけを別シートに転記
「ステータスが『完了』の行だけをアーカイブシートに移動する」など。
function transferCompletedRows() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName('作業管理'); // 転記元
const dst = ss.getSheetByName('完了アーカイブ'); // 転記先
const STATUS_COL = 4; // ステータスが入っている列番号(D列=4)
const data = src.getDataRange().getValues();
const header = data[0];
// 転記先にヘッダーがなければ追加
if (dst.getLastRow() === 0) {
dst.appendRow(header);
}
// 後ろから走査(削除するので前から消すと行がズレる)
for (let i = data.length - 1; i >= 1; i--) {
if (data[i][STATUS_COL - 1] === '完了') {
dst.appendRow(data[i]);
src.deleteRow(i + 1);
}
}
console.log('転記完了');
}
パターン2:列の順番を入れ替えて別シートに出力
「システムから出力したCSVの列順を整形して別シートに出力する」など。
function reshapeColumns() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName('元データ');
const dst = ss.getSheetByName('整形後');
const srcData = src.getDataRange().getValues();
// 出力したい列のインデックス(0始まり)
// 例:元データの A,C,E列 → A,B,C列 に並び替え
const COL_ORDER = [0, 2, 4];
const shaped = srcData.map(row => COL_ORDER.map(i => row[i]));
dst.clearContents();
dst.getRange(1, 1, shaped.length, COL_ORDER.length).setValues(shaped);
console.log(`${shaped.length}行を整形・出力しました`);
}
パターン3:日付で集計シートに振り分け
「日付列を見て、月ごとのシートに自動振り分けする」など。
function splitByMonth() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName('全データ');
const DATE_COL = 1; // 日付が入っているA列(1始まり)
const data = src.getDataRange().getValues();
const header = data[0];
for (let i = 1; i < data.length; i++) {
const row = data[i];
const date = row[DATE_COL - 1];
if (!date) continue;
// シート名を「2026年1月」形式で生成
const sheetName = Utilities.formatDate(new Date(date), 'Asia/Tokyo', 'yyyy年M月');
let targetSheet = ss.getSheetByName(sheetName);
if (!targetSheet) {
targetSheet = ss.insertSheet(sheetName);
targetSheet.appendRow(header); // ヘッダーを追加
}
targetSheet.appendRow(row);
}
console.log('月別振り分け完了');
}
パターン4:重複を除いてユニークリストを作成
「顧客名リストから重複を除いたマスタを自動生成する」など。
function createUniqueList() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName('受注データ');
const dst = ss.getSheetByName('顧客マスタ');
const NAME_COL = 2; // 顧客名のB列
const data = src.getDataRange().getValues();
const names = data.slice(1).map(row => row[NAME_COL - 1]).filter(Boolean);
// Set で重複除去
const unique = [...new Set(names)].sort();
dst.clearContents();
dst.getRange(1, 1, unique.length, 1).setValues(unique.map(n => [n]));
console.log(`${unique.length}件のユニーク顧客を出力しました`);
}
共通の注意点
- 大量データ(1000行以上)は
getValues()で一括取得してから処理する(1行ずつ読み書きすると極端に遅い) - 本番実行前に必ずバックアップシートを作る
- 削除処理は後ろの行から行う(行番号のズレを防ぐ)
次のステップ
転記の自動化ができたら、トリガーの設定を覚えて、これらのスクリプトを定時実行させましょう。
Free Newsletter
AIを業務に活かしたいなら
SMR-Labメルマガ
毎週火曜10時、コピペで使えるChatGPTプロンプト・
GASテンプレートをお届け。登録は1分・完全無料。
