以前の記事で、Google Apps Scriptにおける配列の重要性についてご紹介しましたが、今回は行と列を格納する事のできる二次元配列についてご紹介します。
※以前の記事についてはこちらをご覧ください。

二次元配列とは?
まず二次元配列とは何なのかについてみていきます。
その前にまず、下記のようなシートを用意します。

用意するスプレッドシート
次に、下記のサンプル1では、
var ary = sh.getRange(1, 1, last_row, 3).getValues();
で、変数aryにアクティブシートのA1~C5の範囲の値を取得して代入し、
Logger.log(ary);
で変数aryをログ出力しています。
・サンプル1
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ary = sh.getRange(1, 1, last_row, 3).getValues(); Logger.log(ary); } |
ログ出力された変数aryを見てみると下記のように表示されますが、

出力されたログ
この中の、
[[A1, B1, C1], [A2, B2, C2], [A3, B3, C3], [A4, B4, C4], [A5, B5, C5]]
が二次元配列の状態になっています。
スプレッドシートに記載されているデータと、上記の二次元配列のデータを見比べると、二次元配列のイメージがなんとなくついてくるようにも思われます。
※ログ出力についてはこちらの記事をご覧ください。

二次元配列を宣言、作成してスプレッドシートに貼りつける
下記のサンプル2は、
var ary = [[‘A1’, ‘B1’, ‘C1’], [‘A2’, ‘B2’, ‘C2’], [‘A3’, ‘B3’, ‘C3’], [‘A4’, ‘B4’, ‘C4’], [‘A5’, ‘B5’, ‘C5’]];
で二次元配列のデータを作成し、
var rows = ary.length;
で、変数ary全体の配列の要素数を取得して行数とし、
var cols = ary[0].length;
で、変数ary[0](変数aryの1番目の行)の配列の要素数を取得して列数とし、
sh.getRange(1,1,rows,cols).setValues(ary);
で配列全体をスプレッドシートに記入するための範囲を確保しつつ、配列に代入された値をスプレッドシートに記入しています。
・サンプル2
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ary = [[‘A1’, ‘B1’, ‘C1’], [‘A2’, ‘B2’, ‘C2’], [‘A3’, ‘B3’, ‘C3’], [‘A4’, ‘B4’, ‘C4’], [‘A5’, ‘B5’, ‘C5’]]; var rows = ary.length; sh.getRange(1,1,rows,cols).setValues(ary); } |
二次元配列を宣言、作成してスプレッドシートに貼りつける ~pushを使用して配列に追加する~
下記のサンプル3では、
var ary = [];
でいったん空の配列を作成し、
for (var i = 0; i < 5; i++) {
ary.push([‘A’ + (i + 1),’B’ + (i + 1),’C’ + (i + 1)])
}
で、pushを使用して配列の末尾に配列を追加していく事で二次元配列を作成しています。
※pushについてはこちらの記事をご覧ください。
・サンプル3
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); for (var i = 0; i < 5; i++) { ary.push([‘A’ + (i + 1),’B’ + (i + 1),’C’ + (i + 1)]) } var rows = ary.length; sh.getRange(1,1,rows,cols).setValues(ary); } |
二次元配列に格納された値をスプレッドシートに貼りつける
配列の要素を指定し、二次元配列のデータをスプレッドシートに貼り付ける
次に、配列に格納した値を要素数を指定しながらスプレッドシートの右隣りに貼り付けてみます。
下記のサンプル4では、
for (var i = 0; i < ary.length; i++) {
で変数iの初期値を0とし、ary.lengthで配列変数aryの要素数を取得し(今回は5の数値が取得されます)、変数iがary.lengthより小さい間は処理を繰り返します。
sh.getRange(1 + i, 4).setValue(ary[i][0]);
sh.getRange(1 + i, 5).setValue(ary[i][1]);
sh.getRange(1 + i, 6).setValue(ary[i][2]);
ですが、配列の行や列の各要素は、
ary[列の要素数][行の要素数]
で指定する事ができます。
そのため、[i](変数aryの1番目~5番目の行)で配列の行の要素数を指定し、次の[0]~[2](変数aryの1番目~3番目の列)で配列の列の要素数を指定して、格納されている値をスプレッドシートのD列~F列に記載していきます。
・サンプル4
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ary = sh.getRange(1, 1, last_row, 3).getValues(); for (var i = 0; i < ary.length; i++) { sh.getRange(1 + i, 4).setValue(ary[i][0]); } |

配列の要素を指定して貼り付ける 処理結果
スプレッドシートへの貼り付けに必要な範囲を確保し、二次元配列のデータを貼り付ける
前述の「二次元配列を宣言、作成してスプレッドシートに貼りつける」でも既にやってはいますが、配列の大きさを調べた上で、貼り付けに必要な範囲を確保してスプレッドシート貼り付ける事もできます。
今回も配列に格納した値をスプレッドシートの右隣りに貼り付けてみます。
下記のサンプル5では、
var rows = ary.length;
で、変数ary全体の配列の要素数を取得して行数とし、
var cols = ary[0].length;
で、変数ary[0](変数aryの1番目の行)の配列の要素数を取得して列数とし、
sh.getRange(1,4,rows,cols).setValues(ary);
で配列全体をスプレッドシートに記入するための範囲を確保しつつ、配列に代入された値をスプレッドシートのD列~F列に記入しています。
・サンプル5
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ary = sh.getRange(1, 1, last_row, 3).getValues(); var rows = ary.length; sh.getRange(1,4,rows,cols).setValues(ary); } |

スプレッドシートへの貼り付けに必要な範囲を確保し、二次元配列のデータを貼り付ける 処理結果
二次元配列内のデータを加工してからスプレッドシートに貼り付ける
サンプル6では、配列内のデータを少々加工してから貼り付けており、
str = ary[i][0] + ary[i][1] + ary[i][2]
で、変数ary[i][0]~ary[i][2]に格納された値を結合し、スプレッドシートのD列に記入しています。
・サンプル6
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ary = sh.getRange(1, 1, last_row, 3).getValues(); for (var i = 0; i < ary.length; i++) { str = ary[i][0] + ary[i][1] + ary[i][2] sh.getRange(1 + i, 4).setValue(str); } |

二次元配列内のデータを加工してからスプレッドシートに貼り付ける 処理結果
以上、二次元配列を利用した例をいくつかご紹介しましたが、以前ご紹介した配列の記事と同様に処理速度においても非常に優れていますので、Google Apps Scriptを使用していく上で二次元配列は欠かせないものです。