14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【GAS】スプレッドシートのシート移動・ソート

Last updated at Posted at 2018-10-12

GAS公式ドキュメント
https://developers.google.com/apps-script/reference/

使い道

スプレッドシートのシート分けが多くなると、ソートや先頭に配置といったシートの移動処理がとても億劫になる これの回避策としてGASでシートの移動を行う

#考え方
シートの並び順の情報は、シート本体ではなく、スプレッドシート(ファイル)内のindex昇順という管理方法がなされている なので、使うクラスは「Sheet」ではなく「Spreadsheet」になる

#スクリプト実行時の注意点
理由が未だにわからないですが、スクリプト実行後、ソートの結果が見た目上反映されていないことがある ページの更新を行えば解決するのだが...
なぜだろう、同期のタイミング?

#サンプル
###今アクティブなシートを先頭に移動させる

/*
 * moveTop
 *  - 現在アクティブなシートを先頭に移動させる
 */
function moveTop()
{
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.moveActiveSheet(1);
}

###▼五十音昇順にソート

/*
 * sort
 *  - シート名を元に昇順にソートする
 */
function sort()
{
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var all_sheet_list = spreadsheet.getSheets();
  var current_sheet = spreadsheet.getActiveSheet();
  var sort_info = {
    'sheet_list':{},
    'sheet_name_list':[]
  };

  try {
    for (var count = 0; count < all_sheet_list.length; count++) {
      var sheet_name = all_sheet_list[count].getName();      
      sort_info['sheet_list'][sheet_name] = all_sheet_list[count];
      sort_info['sheet_name_list'].push(sheet_name);
    }

    // シート名リストを昇順にソートする
    sort_info['sheet_name_list'].sort(function(a,b){
      a = a.toString().toLowerCase();
      b = b.toString().toLowerCase();
      if( a < b ) return -1;
      if( a > b ) return 1;
      return 0;
    });

    // 実際にソートする
    var set_index = 1;
    for (var sheet_count = 0; sheet_count < sort_info['sheet_name_list'].length; sheet_count++) {
      var sheet_name = sort_info['sheet_name_list'][sheet_count];
      var active_sheet = sort_info['sheet_list'][sheet_name];
      active_sheet.activate();

      spreadsheet.moveActiveSheet(set_index);
      set_index++;
    }

    // 関数実行時のシートに戻る
    current_sheet.activate();
    Browser.msgBox('正常終了。ページを更新してください。');
  } catch(e) {
    // エラーが発生した場合はその旨を表示してから処理中断
    Browser.msgBox(e.lineNumber + ':' + e);
  }
}
14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?