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