【GAS】スプレッドシートに新しいシートを追加する(insertSheet)

GASmatch,スプレッドシート,正規表現

Google Apps Script(GAS)でスプレッドシートに新しいシートを追加する方法を解説します。

もともと存在するシートをコピー(複製)する場合は下記の記事をご確認ください。

スプレッドシートにシートを追加

「スプレッドシートに新しいシートを追加する」という作業は、多くの方が普段から実施している簡単な作業かと思います。

例えば「月別にファイルが分かれている売上データを新シートに追加したい」といったシーンなど、GAS処理を開発しているときにも、スプレッドシートに新規でシートを追加したいシーンが出てきます。

こういった処理に対応するため、GASにはスプレッドシートで新しいシートを追加するメソッドが用意されています。

新シートを追加するにはinsertSheetメソッドを使う

新しいシートを追加するにはinsertSheetメソッドを使います。シンプルに新しいシートを追加してみましょう。

まずは、追加したいスプレッドシートを用意して、ファイルIDをコピーしておきます。(IDはURL上で確認できます)

サンプルコード

上記のスプレッドシートを読み込んで、シート追加する処理を実行します。

下記のサンプルコードでは「シート追加」という名称のシートを追加しています。

function insertSheet() {

  //追加先のスプレッドシート
  const spId = '[対象となるスプレッドシートのファイルID]';
  let insert_ss = SpreadsheetApp.openById(spId);

  let newSheet = insert_ss.insertSheet();
  newSheet.setName('シート追加');

}

無事追加できたようです。

ちなみにsetNameメソッドでシート名を指定しないとエラーになります。

応用編:複数のスプレッドシートのデータをシートに分けて一つのスプレッドシートに集約

複数のスプレッドシートを集約する2つの方法

①「複数のスプレッドシートのデータを一つのシートの集約する」②「複数のスプレッドシートのデータをシートに分けて一つのスプレッドシートの集約する」の方法があります。

①については同じデータ構造でないといけないので、共通列を持つ必要があります。こちらの方法を実行したい方は、下記の記事で解説をしています。

今回は②の複数のスプレッドシートのデータを、新たなスプレッドシートにシートを分けて集約する方法を解説します。

サンプルコード

function myFunction() {

  //追加先のスプレッドシート
  const spId = [集約先のスプレッドシートのID];
  let insert_ss = SpreadsheetApp.openById(spId);

  // 追加したいスプレッドシート読み込み
  // フォルダの指定  
  const folderId = [転記したいスプレッドシートが格納されているフォルダのID];

  //フォルダ内のすべてのファイルを取得
  const folder = DriveApp.getFolderById(folderId);

  //ファイルタイプを指定
  const name = /売上データ.*/; //ファイル名が「売上データ~」となっているファイルが対象
  const files = folder.getFiles(); // すべてのファイルを取得

  //各ファイルごとに実行
  while(files.hasNext()){
    
    let file = files.next();

    // name の正規表現に一致するファイルのみ処理
    if(file.getName().match(name)){
    
      let fileName = file.getName(); // ファイル名
      let fileId = file.getId(); // ファイルID

      // console.log([fileName,fileId,fileURL]);

      let ss = SpreadsheetApp.openById(fileId);
      let sheet = ss.getActiveSheet();
      let values = sheet.getDataRange().getValues();

      console.log(values);

      let row = values.length;
      let col = values[0].length;

      let newSheet = insert_ss.insertSheet();
      newSheet.setName(fileName);
      newSheet.getRange(1,1,row,col).setValues(values);

    }      
  }
}

この記事を書いた人

てつお
広告代理店出身、事業会社でWebマーケティングや開発の仕事をしている26歳です。プロフィール詳細はこちら
■Google広告認定資格|Google アナリティクス個人認定資格(GAIQ)|TOEIC920点