スプレッドシートのチェックボックスで選択したデータを別シートに移動【GASで効率化】

Googleスプレッドシートのチェックボックスを使ったデータ管理をしていて、「チェック済みの行だけを別シートへカンタンに移動できたら便利なのに……」と思ったことはありませんか?

手作業での移動は時間がかかりますし、繰り返し作業となると面倒でもあります。

そこで今回は、Google Apps Script(GAS)を使って、チェックボックスが✅済みになった行を別のシートに移動する方法を紹介します。

このスクリプトを使えば、データの整理が効率化され、作業の手間を削減できます!

目次

完成イメージ

移動前

移動先のシート

スクリプトを実行すると✅を入れた行だけが別のシートに移動

手順

STEP
スプレッドシートの準備

対象のスプレッドシートを開きます。

今回の例では、A列にチェックボックスを挿入します。

1行目はヘッダーとするため、2行目以降のデータが移動対象となります。

チェックボックスの作成方法

チェックボックスを作成する範囲を選択します。

上部メニューの「挿入」から「チェックボックス」をクリックすると作成されます。

STEP
移動させたい行に✅を入れる

移動させたい行のチェックボックスに✅を入れます。

(サンプルの画像は条件付き書式で対象範囲に緑で色付けをしています。)

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプトの作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

function moveCheckedRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート名を入力"); // 元のシート
  var targetSheet = ss.getSheetByName("完了"); // 移動先のシート
  
  if (!sheet) {
    Logger.log("元のシートが見つかりません。");
    return;
  }
  
  // 完了シートが存在しない場合は作成し、ヘッダーをコピー
  if (!targetSheet) {
    targetSheet = ss.insertSheet("完了");
    var header = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    targetSheet.getRange(1, 1, 1, header[0].length).setValues(header);
  }
  
  var lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // データがない場合は終了

  var dataRange = sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()); // ヘッダーを除く
  var data = dataRange.getValues();
  var formats = dataRange.getBackgrounds(); // セルの背景色
  var fontColors = dataRange.getFontColors(); // 文字色
  var checkboxes = sheet.getRange(2, 1, lastRow - 1, 1).getValues(); // A列のチェックボックス値のみ取得

  var rowsToMove = [];
  var formatToMove = [];
  var fontColorToMove = [];
  var checkboxToMove = [];
  var deleteIndexes = [];

  for (var i = 0; i < data.length; i++) { // **順番を維持するため、昇順でループ**
    if (data[i][0] === true) { // A列のチェックボックスがTRUEか
      rowsToMove.push(data[i]);
      formatToMove.push(formats[i]);
      fontColorToMove.push(fontColors[i]);
      checkboxToMove.push([checkboxes[i][0]]); // A列のみ格納
      deleteIndexes.unshift(i + 2); // **削除時の行ズレを防ぐため逆順で格納**
    }
  }

  if (rowsToMove.length > 0) {
    var targetLastRow = targetSheet.getLastRow();
    var insertRow = targetLastRow >= 1 ? targetLastRow + 1 : 2; // 2行目からデータを挿入
    var targetRange = targetSheet.getRange(insertRow, 1, rowsToMove.length, rowsToMove[0].length);
    targetRange.setValues(rowsToMove);
    targetRange.setBackgrounds(formatToMove); // 書式(背景色)を適用
    targetRange.setFontColors(fontColorToMove); // 文字色を適用
    
    var checkboxRange = targetSheet.getRange(insertRow, 1, rowsToMove.length, 1);
    var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build();
    checkboxRange.setDataValidation(rule);
    checkboxRange.setFontColor(null); // **チェックマークの色をリセット**

    deleteIndexes.forEach(index => sheet.deleteRow(index)); // **削除は逆順で行う**
  }
}
スクリプトの説明
元のシート・移動先のシートを取得
function moveCheckedRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート名を入力"); // 元のシート
  var targetSheet = ss.getSheetByName("完了"); // 移動先のシート
  • スプレッドシートを取得し、元のシート完了シート を取得します。
  • 元のシートには対象のシート名を入力します。
  • 完了 シートが存在しない場合は自動的に後で作成されます。
シートが存在しない場合のチェック
  if (!sheet) {
    Logger.log("元のシートが見つかりません。");
    return;
  }
  • 元のシート が見つからない場合は処理を終了します。
完了シートの作成とヘッダーのコピー
  // 完了シートが存在しない場合は作成し、ヘッダーをコピー
  if (!targetSheet) {
    targetSheet = ss.insertSheet("完了");
    var header = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    targetSheet.getRange(1, 1, 1, header[0].length).setValues(header);
  }
  • 完了 シートが 存在しない場合に作成します。
  • (元のシートの1行目をヘッダーとしてコピーします)
データがない場合は終了
var lastRow = sheet.getLastRow();
if (lastRow < 2) return; // データがない場合は終了
  • データがない場合はスクリプトを終了します。
移動対象のデータ取得
var dataRange = sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()); // ヘッダーを除く
var data = dataRange.getValues();
var formats = dataRange.getBackgrounds(); // セルの背景色
var fontColors = dataRange.getFontColors(); // 文字色
var checkboxes = sheet.getRange(2, 1, lastRow - 1, 1).getValues(); // A列のチェックボックス値のみ取得
  • A列のチェックボックスの値を取得します
  • セルの背景色・フォント色を取得します。(移動後も同じデザインを維持するため)
移動する行のリスト作成
var rowsToMove = [];
var formatToMove = [];
var fontColorToMove = [];
var checkboxToMove = [];
var deleteIndexes = [];

for (var i = 0; i < data.length; i++) { // **順番を維持するため、昇順でループ**
  if (data[i][0] === true) { // A列のチェックボックスがTRUEか
    rowsToMove.push(data[i]);
    formatToMove.push(formats[i]);
    fontColorToMove.push(fontColors[i]);
    checkboxToMove.push([checkboxes[i][0]]); // A列のみ格納
    deleteIndexes.unshift(i + 2); // **削除時の行ズレを防ぐため逆順で格納**
  }
}
  • A列にチェックが入っている行を抽出し、配列に格納します。
  • 行の順番を維持します。
  • 削除時の行ズレを防ぐため、削除する行のインデックスを逆順で保存します。
完了シートへデータを追加
if (rowsToMove.length > 0) {
  var targetLastRow = targetSheet.getLastRow();
  var insertRow = targetLastRow >= 1 ? targetLastRow + 1 : 2; // 2行目からデータを挿入
  var targetRange = targetSheet.getRange(insertRow, 1, rowsToMove.length, rowsToMove[0].length);
  targetRange.setValues(rowsToMove);
  targetRange.setBackgrounds(formatToMove); // 書式(背景色)を適用
  targetRange.setFontColors(fontColorToMove); // 文字色を適用
  • 完了シートの最終行を取得し、2行目以降にデータを追加します・
  • データの順番や背景色・フォント色を元のシートと同じように適用します。
元のシートから移動済みの行を削除
  deleteIndexes.forEach(index => sheet.deleteRow(index)); // **削除は逆順で行う**
}
  • 元のシートから移動済みの行を削除します。
  • 逆順で削除することで行ズレを防ぎます。
STEP
“シート名を入力”を実際のシート名に変更
function moveCheckedRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート1"); // 元のシート

スクリプトの"シート名を入力"の部分を変更します。

例:”シート1” "タスク管理"

STEP
移動先のシート名を変更(必要に応じて)
  var targetSheet = ss.getSheetByName("完了"); // 移動先のシート

移動先のシート名は「完了」としていますが、必要に応じてシート名を変更します。

STEP
スクリプトを保存

スクリプトを書いたら、名前を付けて保存します。

(例:「チェック済み行移動」)

STEP
スクリプトを実行

スクリプトを実行して、チェック済みの行を移動させます。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
✅済みの行が完了シートに移動

✅済みの行が完了シートの2行目以降に移動します。

移動元のシートにあった✅済みのデータはなくなります。

GASの実行をカンタンにする方法

スクリプトをスプレッドシート上で素早く実行できるようにするには、次のような方法があります。

図形ボタンを設置して実行

STEP
上部メニューから「挿入」→「図形描画」 をクリック
STEP
実行用のボタンを作成(「タスク完了」など)
STEP
ボタンを右クリック →「スクリプトを割り当て」 を選択
STEP
「moveCheckedRows」と入力してOKを押す

これで、ボタンをクリックするだけでスクリプトが実行されます。

マクロを活用してショートカットキーで実行

STEP
「拡張機能」→「マクロ」→「マクロをインポート」 をクリック
STEP
リストから「moveCheckedRows」を選択してインポート
STEP
「マクロの管理」→ ショートカット設定で実行用のキーを設定

(例:Ctrl + Alt + 1

これで、ショートカットキーを押すだけでスクリプトを実行できます。

図形ボタンの設置方法やマクロの詳細な設定方法については、こちらの記事で紹介しています。

まとめ

今回のGASでは、チェックボックスが✅済みになった行を「完了」シートに自動で移動し、元のシートから削除することができます。

繰り返し作業の場合はGASを活用することで、手作業の負担を減らして業務の効率化が可能です。

ひんぱんに行移動させる作業がある場合に、今回のスクリプトをご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次