本記事では、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();
}
サンプル動画では、独自のメニューを作成しスクリプトを実行しています。
削除するシート名などを指定できるインプットボックスも用意しているので、お好みにアレンジしてお使いください。
シートの作成・コピーについては以下の記事で解説しています。気になった方はチェックしてみてください。