シート内で使っていない行や列を削除したくて書いたコードです
A12行までデータが入っていて
E列までデータが入っている
このようなシートがあるとき
範囲外(データが入っていない)の行と列を削除する
以下のコード.gsの SHEET_ID に対象のシートIDを入れて
delete_blank_rows_cols() を実行すると空白の行と列が削除されます
コード.gsfunction delete_blank_rows_cols(){
var sh_id = SHEET_ID;
var sh = get_sheet(sh_id);
var last_row = sh.getLastRow();
var last_col = sh.getLastColumn();
var max_row = sh.getMaxRows();
var max_col = sh.getMaxColumns();
var start_row = last_row + 1;
var start_col = last_col + 1;
var num_rows = max_row - last_row;
var num_cols = max_col - last_col;
sh.deleteRows(start_row, num_rows);
sh.deleteColumns(start_col, num_cols);
}
function get_sheet(sh_id) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var shs = ss.getSheets();
for (var i = 0; i < shs.length; i++) {
if (shs[i].getSheetId() == sh_id) {
break;
}
}
var sh = ss.getSheets()[i];
return sh;
}
|
意訳この機能がやること シートIDを指定して get_sheet()に渡してシートを取得して データが入っている最終行を取得して データが入っている最終列を取得して シート全体の最終行を取得して シート全体の最終列を取得して last_rowのひとつ下の行を指定して last_colの1つ右の列を指定して 空白の行数を指定して 空白の列数を指定して 削除する行の範囲を指定して削除する 削除する列の範囲を指定して削除する この機能がやること 現在開いているスプレッドシートを取得して シートをすべて取得して シートの数だけ以下を繰り返す シートのIDが渡されたシートIDなら for文から抜ける 対象のシートを取得して 返す |
関連記事
シートの行を削除する
シートの列を削除する
スプレッドシートアドオンとして公開しました
https://chrome.google.com/webstore/detail/delete-blank-sheet-range/blojpbpagmombfdkjlddfjjmpmgopckb?utm_source=chrome-ntp-icon
アドオンのコード
コード.gsfunction onOpen(e) {
SpreadsheetApp.getUi()
.createAddonMenu()
.addItem('delete', 'deleteBlankRowsCols')
.addToUi();
}
function onInstall(e) {
onOpen(e);
}
function deleteBlankRowsCols(){
var sheet = SpreadsheetApp.getActiveSheet();
var last_row = sheet.getLastRow();
var last_col = sheet.getLastColumn();
if(last_row === 0 && last_col === 0) {
Browser.msgBox("Can't delete. This sheet has no data.");
} else {
var max_row = sheet.getMaxRows();
var max_col = sheet.getMaxColumns();
var start_row = last_row + 1;
var start_col = last_col + 1;
var num_rows = max_row - last_row;
var num_cols = max_col - last_col;
var delet_rows = 0;//消す行を0で初期化
var delet_cols = 0;//消す列を0で初期化
if(num_rows > 0) {//消す行があれば
sheet.deleteRows(start_row, num_rows);
delet_rows = num_rows;
}
if(num_cols > 0) {//消す列があれば
sheet.deleteColumns(start_col, num_cols);
delet_cols = num_cols;
}
Browser.msgBox("Deleted: Row: " + delet_rows + ", Col: " + num_cols);
}
}
|


