GASでスプレッドシートのシートを削除|パターン別コードあり

本記事では、GASでスプレッドシートのシートを削除する方法を解説しています。

複数のシートを手作業で削除するとなると時間も多少かかりますし、地味に面倒です。シートの削除など決まった作業はGASを使って楽にしましょう。

パターン別にコードを解説していますので、ぜひ参考にしてみてください。

今回のコードを使ったサンプル動画

GASでシート削除
目次

GASでシートを削除するスクリプト

GASを使ってスプレッドシートのシートを削除するにはdeleteSheetメソッドを利用します。

deleteSheet(削除するシート名)

引数に削除したいシート名を指定することで、紐づいたスプレッドシート内にある指定したシートを削除することができます。

実際の使い方について、以下の5パターンにわけてみていきましょう。

  • 特定のシートを削除
  • 特定のシート以外を削除
  • 特定の複数シートを削除
  • 特定の複数シート以外を削除
  • 全てのシートを削除

特定のシートを削除

特定のシートを1つ指定して削除するコードです。

function gas_sheet_delete() {
  // 紐づいているスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  // 削除したいシート名を指定
  const deleteSheet = sheet.getSheetByName('新規作成');
  
  // 指定したシート名をdeleteSheetメソッドで削除
  sheet.deleteSheet(deleteSheet);
}

5行目のsheet.getSheetByName()の引数に、削除したいシート名を指定します。

特定のシート以外を削除

1つのシートだけを指定して、残りを全て削除するコードです。

function gas_sheet_delete() {
  // 紐づいているスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  // 全てのシート情報を取得
  const all_sheets = sheet.getSheets();
  // 残したいシート名を指定
  const not_deleteSheet = '残すシート';

  // 存在するシートの枚数分繰り返し
  for(let j = 0; j < all_sheets.length; j++) {
    // 対象のシート名と残したいシート名が一致しない場合は削除
    if(all_sheets[j].getSheetName() != not_deleteSheet) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

特定のシート以外を削除する場合は事前に全てのシートを取得する必要があるため、5行目のsheet.getSheets()で全てのシート情報を取得しall_sheetsに代入しています。

10行目以降は、forで取得したシートの枚数分処理を繰り返しifで削除したいシート名と一致しているか判定する処理です。

シート名を比較する際、sheet.getSheets()で取得したシート情報のままでは使用できないため、getSheetName()を使いシート名を参照しています。(12行目)

特定の複数シートを削除

削除したいシートが複数ある場合のコードです。

function gas_sheet_delete() {
  // 紐づいているスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  // 全てのシート情報を取得
  const all_sheets = sheet.getSheets();
  // 削除したいシート名を配列で宣言
  const deleteSheets = ["削除①","削除②","削除③"];

  // 存在するシートの枚数分繰り返し
  for(let j = 0; j < all_sheets.length; j++) {
    // 対象のシート名と削除したいシート名が一致しない以外(一致する)場合に削除
    if(deleteSheets.indexOf(all_sheets[j].getSheetName()) != -1) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

削除するシートを複数指定する場合は、シート名を配列で宣言しておきます。(7行目)

12行目のindexOfは、特定の要素が配列の何番目に入っているか調べられるメソッドで、一致しない場合は「-1」を返します。

そのため、all_sheets[j].getSheetName()で取得したシート名が削除したいシート名の配列の中に入っているかを調べることができ、「-1」の場合(一致しない場合)にdeleteSheetメソッドを使用することで複数のシートを削除することができます。

特定の複数シート以外を削除

残したいシートを複数指定して、それ以外を削除するコードです。

function gas_sheet_delete() {
  // 紐づいているスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  // 全てのシート情報を取得
  const all_sheets = sheet.getSheets();
  // 残したいシート名を配列で宣言
  const not_deleteSheet = ["残す①","残す②","残す③"];

  // 存在するシートの枚数分繰り返し
  for(let j = 0; j < all_sheets.length; j++) {
    // 対象のシート名と削除したいシート名が一致しない場合に削除
    if(not_deleteSheet.indexOf(all_sheets[j].getSheetName()) == -1) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

特定の複数シート以外を削除する場合は、特定の複数シートを削除するコードのindexOfメソッドの結果を反転することで実現できます。(12行目)

全てのシートを削除

全てのシートを削除するコードです。

function gas_sheet_delete() {
  // 紐づいているスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  // 全てのシート情報を取得
  const all_sheets = sheet.getSheets();
  
  // 全てのシートを削除できないので一番左のシートだけ残す
  for(let j = 1; j < all_sheets.length; j++) {
    sheet.deleteSheet(all_sheets[j]);
  }
}

スプレッドシートのシートは全て削除することができないため、どれか1つのシートは残す必要があります。

今回はforのカウント開始を1からスタートし、all_sheets[0](=1番目のシート)を残すようにしています。

シートを削除するサンプル動画のコード全体像

最後に、本記事の冒頭に載せている動画のコードの全体像を紹介しておきます。

// ①特定のシートのみ削除
function m_gas_sheet_delete_1() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const deleteSheetName = Browser.inputBox("削除するシート名を入力してください。", Browser.Buttons.OK_CANCEL);
  const deleteSheet = sheet.getSheetByName(deleteSheetName);
  
  if(deleteSheet !== "cancel") {
    sheet.deleteSheet(deleteSheet);
  }
}

// ②特定のシート以外を削除
function m_gas_sheet_delete_2() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const all_sheets = sheet.getSheets();
  const not_deleteSheetName = Browser.inputBox("残したいシート名を入力してください。", Browser.Buttons.OK_CANCEL);
  const not_deleteSheet = sheet.getSheetByName(not_deleteSheetName);

  for(let j = 0; j < all_sheets.length; j++) {
    if(all_sheets[j].getSheetName() != not_deleteSheet) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

// ③特定の複数シートを削除
function m_gas_sheet_delete_3() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const all_sheets = sheet.getSheets();
  const input_deleteSheets = Browser.inputBox("削除したいシート名を入力してください。\\n※複数ある場合は「,」で区切る", Browser.Buttons.OK_CANCEL);
  const deleteSheets = input_deleteSheets.split(',');

  for(let j = 0; j < all_sheets.length; j++) {
    if(deleteSheets.indexOf(all_sheets[j].getSheetName()) != -1) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

// ④特定の複数シート以外を削除
function m_gas_sheet_delete_4() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const all_sheets = sheet.getSheets();
  const ipnut_not_deleteSheet = Browser.inputBox("残したいシート名を入力してください。\\n※複数ある場合は「,」で区切る", Browser.Buttons.OK_CANCEL);
  const not_deleteSheet = ipnut_not_deleteSheet.split(',');

  for(let j = 0; j < all_sheets.length; j++) {
    if(not_deleteSheet.indexOf(all_sheets[j].getSheetName()) == -1) {
      sheet.deleteSheet(all_sheets[j]);
    }
  }
}

// ⑤全てのシートを削除
function m_gas_sheet_delete_5() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const all_sheets = sheet.getSheets();
  
  // 全てのシートを削除できないので一番左のシートだけ残す
  for(let j = 1; j < all_sheets.length; j++) {
    sheet.deleteSheet(all_sheets[j]);
  }
}

// 独自メニュー作成
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  const menu = ui.createMenu("シート操作");

  menu.addItem("新規作成","m_gas_sheet_create_1");
  menu.addItem("コピー","m_sheet_copy");
  menu.addSubMenu(
    ui.createMenu('削除')
    .addItem("特定のシートを削除","m_gas_sheet_delete_1")
    .addItem("特定のシート以外を削除","m_gas_sheet_delete_2")
    .addItem("特定の複数シートを削除","m_gas_sheet_delete_3")
    .addItem("特定の複数シート以外を削除","m_gas_sheet_delete_4")
     .addItem("全てのシートを削除","m_gas_sheet_delete_5")
  );

  menu.addToUi();
}

サンプル動画では、独自のメニューを作成しスクリプトを実行しています。

削除するシート名などを指定できるインプットボックスも用意しているので、お好みにアレンジしてお使いください。

シートの作成・コピーについては以下の記事で解説しています。気になった方はチェックしてみてください。

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