【GAS】スプレッドシートのセル内容を配列取得してfor文で書き出し処理させた時の方法

エンジニア

最近、Google app script(GAS)を使って、スプレッドシートのあるシートに記載されたデータ(情報)を配列取得して、それを他のシートにfor文で書き出すというマクロの作成をしたので、備忘録でメモしておこうと思います。

まず、スプレッドシート取得とシート選択。



  //現在のスプレッドシートの取得
  var ss_active_all = SpreadsheetApp.getActiveSpreadsheet();

  //dataシートの選択
  var ss_sheet_data = ss_active_all.getSheetByName("data");

次に、for文の条件式を作成するため、データシートから上限値を取得しておく。



  //dataシートの上限値取得
  var row_max_num = ss_sheet_data.getLastRow(); //行数
  var col_max_num = ss_sheet_data.getLastColumn(); //列数

そんで、getvaluesメソッドで、ガバっと配列に格納。本当は、自分で設けた配列に一個一個格納しようと思ったのですが、GASだと、for文による配列への格納をすると、ヘンなエラーが起きやすいので、getvaluesがラクです。(ちゃんと調べろよって話ですが・・・)



  //personal_dataの取得
  var ary_data = ss_sheet_data.getDataRange().getValues();

ary_dataは二次元配列になっているので、ary_data[行][列]の記述で呼び出し可能。(詳しくは、Loggerで。)

あとは、書き出すシートを指定して、そこにrow_max_numとcol_max_numの上限値分、iとjでループかけて書き出していけばOKです。

マクロ動作中にコピーしたファイルに書き出したい場合、そのIDが分からずに悩むかもしれませんが、単純にコピー後のIDを動作中に取得すれば実現可能なので、下記のようなソースを使えばOKです。



  //データ書き出し先のファイル取得
  var write_data = DriveApp.getFileById("*****ファイルID******");

  //コピー後のファイル名作成
  var file_name_copy  = "**********";

  //コピー後のディレクトリ作成
  var copy_dir = DriveApp.getFolderById("************");

  //指定ディレクトリにファイルをコピー
  var newfile = write_data.makeCopy(file_name_copy, copy_dir);

  //コピーしたファイルのID取得
  var id_copy_file = newfile.getId();

  //コピーしたファイルのスプレッドシート取得
  var ss_copy_all = SpreadsheetApp.openById(id_copy_file);

  // 後はss_copy_allを基に、好きに編集すればOK

まとめ

VBAとはちょっとだけ異なるんですが、まあ大体の基本は一緒です。

最後に一言

一回、基本操作を覚えると、すごくラクです。

この記事が参考になったら「いいね!」

【GAS】スプレッドシートのセル内容を配列取得してfor文で書き出し処理させた時の方法


SNSのシェアはこちらから!

  • 1
    このエントリーをはてなブックマークに追加
  • Pocket

PROFILE

yoshi

運営者のYoshiと申します。今はフリーランスでWEB制作などしています。過去、エンジニアの頃は、MATLAB/simulink/VBA/C/C++など扱っていました。生産管理、MECE、オブジェクト指向など、当時に得た知識はweb業界に入っても、かなり役立っています。