LANG SELRCT

コードを書く場所

2018年2月16日金曜日

シート内の空白の行と列を削除する


シート内で使っていない行や列を削除したくて書いたコードです

A12行までデータが入っていて
E列までデータが入っている
このようなシートがあるとき

範囲外(データが入っていない)の行と列を削除する

以下のコード.gsの SHEET_ID に対象のシートIDを入れて
delete_blank_rows_cols() を実行すると空白の行と列が削除されます



コード.gs
function 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


アドオンのコード

コード.gs
function 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);
  }
}