だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

スプレッドシートのセル内容を配列取得して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とはちょっとだけ異なるんですが、まあ大体の基本は一緒です。

ページ上部に戻る