データ転記・整形を自動化するGASテンプレート集

Sheet Lab GAS

🔄

データ転記・整形を自動化するGASテンプレート集

GAS 🕐 約6分 ← Sheet Lab に戻る

「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分・完全無料。

▶ 無料で登録する

📧 無料メルマガ登録

DX・AI活用のヒントを週1回お届け。登録特典:すぐ使えるプロンプト集&GASテンプレート。

登録情報は第三者に提供しません。いつでも配信停止できます。

目次