episode3 GAS【二次元配列は団地!!】範囲指定でまとめて入力「HUNTER×HUNTERで覚えるGoogle Apps Script」

この記事のシリーズを読むことで、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の最初の一歩が学べます。

この記事では、

・配列は「0:ゴン」、「1:キルア」、「2:クラピカ」、「3:レオリオ」のイメージ

・配列を団地に例えて「キャラクター」と「念能力」の二次元配列を作成

・配列の長さをlengthを使って求め、同じ長さ分の行と列をスプレットシートに確保して配列を出力

についての概要を掴めます。

この記事で作成する配列は、キャラクター4人分の「キャラ名」と「念能力」を格納する4行2列の配列です。

シートに出力する関数、消去する関数の2つを作って、それぞれボタンに割り当て(登録)します。

また、シートに入力されている範囲をgetDataRangeで配列として扱えます。

まずは前回(episode2)の復習をします。

・セルA1に「ハンターハンター」と入力する関数と消去する関数を作り、それぞれをボタンに登録しました。

//アクティブなスプレッドシートを選択するグローバル(キャラ共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//入力とログ出力をする関数(ゴンさんの家)
function myInput() {
  
  //セル入力
  ss.getRange(1,1).setValue('ハンターハンター');

  //ログ出力
  console.log(ss.getRange(1,1).getValue());

}


//消去する関数(キルアさんの家)
function myClear() {

  //セルA1を消去
  ss.getRange(1,1).clear();

}

それでは、ここから配列にキャラクターの名前と念能力を格納していきます。

二次元配列に格納するするデータは、

「ゴン」「強化系」
「キルア」「変化系」
「クラピカ」「具現化系」
「レオリオ」「放出系」

です。

スプレッドシートはExcelの様に行と列の二次元ですので、二次元配列を使って入力します。

二次元配列や配列と聞くと難しそうですが、イメージは「団地(マンションでも)」です。

配列は添字0から始まります。

0階・・・ゴン(00号室に「ゴンの名前」 、01号室に「ゴンの強化系」)

1階・・・キルア(10号室に「キルアの名前」 、11号室に「キルアの変化系」)

2階・・・クラピカ(20号室に「クラピカの名前」 、21号室に「クラピカの具現化系」)

3階・・・レオリオ(30号室に「レオリオの名前」 、31号室に「レオリオの放出系」)

というイメージで二次元配列を「団地」と捉えると、掴みやすくなるのかも知れません。

以上を踏まえてコードを書いていきます。

まずは、キャラクターの名前と念の系統を入力する関数であるnenArray(配列は英語でarray)から解説します。

キャラクター名と念系統の二次元配列をこのように作成します。

//アクティブなスプレッドシートを選択するグローバル領域
const ss=SpreadsheetApp.getActiveSheet();

//スプレッドシートにキャラクターの名前と念系統の入った配列を出力する
function nenArray(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  const hh = [
      ['ゴン','強化系'],
      ['キルア','変化系'],
      ['クラピカ','具現化系'],
      ['レオリオ','放出系']
    ];
  
  //配列hhをログに出力
  console.log(hh);
}

実行すると、配列がログに出力されました。

次に、上記の二次元配列は4行2列ですので、スプレッドシートのA1を起点に4行2列分のデータを確保するプログラムを書いていきます。

まず、行と列が4行2列になっていることをログ出力で確認します。
長さを調べるのにlengthを使います。

//アクティブなスプレッドシートを選択するグローバル領域
const ss=SpreadsheetApp.getActiveSheet();

//スプレッドシートにキャラクターの名前と念系統の入った配列を出力する
function nenArray(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  const hh = [
      ['ゴン','強化系'],
      ['キルア','変化系'],
      ['クラピカ','具現化系'],
      ['レオリオ','放出系']
    ];
  
  //配列hhをログに出力
  console.log(hh);

  //行の長さを調べる
  console.log(hh.length);

  //列の長さを調べる
  console.log(hh[0].length);

}

行が4人分のhh.lengthが4になることはイメージしやすいと思います。

その下のhh[0].lengthですが、これは[‘ゴン’,’強化系’]の長さを調べていて、2列分なので2と返しています。


キルアのhh[1].lengthにしても同じ結果になりますが、全てのキャラクター(行)に対して2列になるので、代表してゴンのhh[0].lengthを用いております。

この行と列の長さは、スプレッドシートにキャラクターの配列hhを出力する時に、出力範囲を一致させる必要があるので調べました。

それではスプレッドシートに出力致します。
末尾にこの部分を追加します。

//二次元配列hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

ここまでのコードの全てです。

//スプレッドシートにキャラクターの名前と念系統の入った配列を出力する
function nenArray(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  const hh = [
      ['ゴン','強化系'],
      ['キルア','変化系'],
      ['クラピカ','具現化系'],
      ['レオリオ','放出系']
    ];
  
  //配列hhをログに出力
  console.log(hh);

  //行の長さを調べる
  console.log(hh.length);

  //列の長さを調べる
  console.log(hh[0].length);

  //二次元配列hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

}

次に、データを消去に関するmyClear関数を作成します。
消去する範囲を、スプレットシート上のデータが存在する範囲として捉えることの出来るgetDataRangeを使っています。

シートオブジェクト.getDataRange()

以下、myClear関数のコードです。

//出力した配列を消去する
function myClear() {

  //出力した配列をgetDataRangeを使って取得して消去する
  ss.getDataRange().clear();

}

この書式でシート上のデータを配列として取得できました。
その下のclearメソッドで入力範囲を削除できます。

ここまでのコード全体を記述します。

//アクティブなスプレッドシートを選択するグローバル領域
const ss=SpreadsheetApp.getActiveSheet();


//スプレッドシートにキャラクターの名前と念系統の入った配列を出力する
function nenArray(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  const hh = [
      ['ゴン','強化系'],
      ['キルア','変化系'],
      ['クラピカ','具現化系'],
      ['レオリオ','放出系']
    ];
  
  //配列hhをログに出力
  console.log(hh);

  //行の長さを調べる
  console.log(hh.length);

  //列の長さを調べる
  console.log(hh[0].length);

  //二次元配列hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

}


//出力した配列を消去する
function myClear() {

  //出力した配列をgetDataRangeを使って取得して消去する
  ss.getDataRange().clear();

}

シートのボタンにそれぞれのスクリプトを割り当てて実行します。

ボタンを右クリックで選択して、右上の「・・・」から「入力」ボタンに「nenArray」、消去ボタンに「myClear」のスプリクトを割り当てます。

これで、キャラの名前と念の入った配列をボタンを押すことで手軽に実行出来る様になりました。


お疲れ様でした。ブレイクタイムPhotoは、

横浜のクルーズ船です。

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

←episode2               episode4→

←GAS自作サンプル集HUNTER×HUNTERへ戻る

HUNTER×HUNTERのGAS自作サンプル集のページに戻る
初めてのGASに戻る


自己紹介