👻
GASでスプレッドシートの未使用行列を削除する
GASは制限があるので、不要な行列はできるだけ無くしたい。
そんな時に使えるコード。
使い方は以下
- コードをgasに入れる
- スプレッドシートを更新する
- メニュバーに表示される「ユーティリティー」をクリック
- 必要な操作を行う
/**
* スプレッドシートの空列を削除する関数
* この関数は「見た目上」空の列を正確に検出して削除します
*/
function deleteEmptyColumns() {
var sheet = SpreadsheetApp.getActiveSheet();
// 最大の行数と列数を取得
var maxRows = sheet.getMaxRows();
var maxCols = sheet.getMaxColumns();
var lastCol = sheet.getLastColumn();
// 使用されている最後の列以降の列を削除
if (lastCol < maxCols) {
// LastColumn+1から最後の列までを削除
sheet.deleteColumns(lastCol + 1, maxCols - lastCol);
Browser.msgBox((maxCols - lastCol) + "個の未使用列を削除しました。");
} else {
Browser.msgBox("削除対象の空列はありませんでした。");
}
}
/**
* スプレッドシートの空行を削除する関数
* この関数は「見た目上」空の行を正確に検出して削除します
*/
function deleteEmptyRows() {
var sheet = SpreadsheetApp.getActiveSheet();
// 最大の行数と列数を取得
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
// 使用されている最後の行以降の行を削除
if (lastRow < maxRows) {
// LastRow+1から最後の行までを削除
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
Browser.msgBox((maxRows - lastRow) + "個の未使用行を削除しました。");
} else {
Browser.msgBox("削除対象の空行はありませんでした。");
}
}
/**
* スプレッドシートの空の行と列を一括削除する関数
*/
function deleteEmptyRowsAndColumns() {
// 空行と空列を削除
deleteEmptyRows();
deleteEmptyColumns();
}
/**
* メニューを追加する関数
* この関数はスプレッドシートを開いたときに実行される
*/
function onOpen() {
var ui = SpreadsheetApp.getUi();
// カスタムメニューを追加
ui.createMenu('ユーティリティ')
.addItem('現在のシート: 未使用の列を削除', 'deleteEmptyColumns')
.addItem('現在のシート: 未使用の行を削除', 'deleteEmptyRows')
.addItem('現在のシート: 未使用の行と列を削除', 'deleteEmptyRowsAndColumns')
.addSeparator()
.addItem('全シート: 未使用の列を削除', 'deleteEmptyColumnsInAllSheets')
.addItem('全シート: 未使用の行を削除', 'deleteEmptyRowsInAllSheets')
.addItem('全シート: 未使用の行と列を削除', 'deleteEmptyRowsAndColumnsInAllSheets')
.addToUi();
}
/**
* 特定のシートの空の行と列を削除する関数
* @param {string} sheetName - 処理対象のシート名
*/
function deleteEmptyRowsAndColumnsInSheet(sheetName) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
Browser.msgBox("エラー: シート「" + sheetName + "」が見つかりません。");
return;
}
// 最大の行数と列数を取得
var maxRows = sheet.getMaxRows();
var maxCols = sheet.getMaxColumns();
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
// 使用されている最後の行以降の行を削除
if (lastRow < maxRows) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
}
// 使用されている最後の列以降の列を削除
if (lastCol < maxCols) {
sheet.deleteColumns(lastCol + 1, maxCols - lastCol);
}
Browser.msgBox("シート「" + sheetName + "」で " +
(maxRows - lastRow) + "個の未使用行と" +
(maxCols - lastCol) + "個の未使用列を削除しました。");
}
/**
* スプレッドシートのすべてのシートで空の行と列を削除する関数
*/
function deleteEmptyRowsAndColumnsInAllSheets() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
var totalRowsDeleted = 0;
var totalColsDeleted = 0;
for (var i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
var sheetName = sheet.getName();
// 各シートの最大の行数と列数を取得
var maxRows = sheet.getMaxRows();
var maxCols = sheet.getMaxColumns();
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
// 使用されている最後の行以降の行を削除
if (lastRow < maxRows) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
totalRowsDeleted += (maxRows - lastRow);
}
// 使用されている最後の列以降の列を削除
if (lastCol < maxCols) {
sheet.deleteColumns(lastCol + 1, maxCols - lastCol);
totalColsDeleted += (maxCols - lastCol);
}
}
Browser.msgBox("すべてのシートで " +
totalRowsDeleted + "個の未使用行と" +
totalColsDeleted + "個の未使用列を削除しました。");
}
/**
* スプレッドシートのすべてのシートで空の列を削除する関数
*/
function deleteEmptyColumnsInAllSheets() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
var totalColsDeleted = 0;
for (var i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
// 各シートの最大の列数を取得
var maxCols = sheet.getMaxColumns();
var lastCol = sheet.getLastColumn();
// 使用されている最後の列以降の列を削除
if (lastCol < maxCols) {
sheet.deleteColumns(lastCol + 1, maxCols - lastCol);
totalColsDeleted += (maxCols - lastCol);
}
}
Browser.msgBox("すべてのシートで " + totalColsDeleted + "個の未使用列を削除しました。");
}
/**
* スプレッドシートのすべてのシートで空の行を削除する関数
*/
function deleteEmptyRowsInAllSheets() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
var totalRowsDeleted = 0;
for (var i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
// 各シートの最大の行数を取得
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
// 使用されている最後の行以降の行を削除
if (lastRow < maxRows) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
totalRowsDeleted += (maxRows - lastRow);
}
}
Browser.msgBox("すべてのシートで " + totalRowsDeleted + "個の未使用行を削除しました。");
}```
Discussion