episode8(最終回) GASの「キャラの身長をシンプルなグラフ化する」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むことによって、GAS(Google Apps Script)の最も基礎的な縦棒グラフの作り方が学べます。
このコーナーではGASをアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載しております。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

まず、前回(episode7)の復習をします。

セルに「平均」、「170cm以上の人数」と入力し、平均身長と該当する人数を求めています。


この身長のデータは、HUNTER×HUNTER(ハンターハンター)の主要キャラクターの設定を用いました。

前回のコードです。

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

//身長の平均と170cm以上の人数を求める関数
function height(){
  ss.getRange(6,1).setValue('平均');
  ss.getRange(7,1).setValue('170cm以上の人数');

  //平均身長を計算
  ss.getRange(6,2).setFormula('=AVERAGE(D1:D4)');

  //身長が170cm以上のキャラクターの人数を求める
  ss.getRange(7,2).setFormula('=COUNTIF(D1:D4,">=170")');
}

今回は、「キャラクター名」と「身長」の最も簡単な縦棒グラフを作ります。
名前の範囲をセルA1から4行分取得して、定数nameに格納します。

const name=ss.getRange(1,1,4);

身長の範囲をセルD1から4行分取得して、chara_heightとします。

const chara_height=ss.getRange(1,4,4);

以下、「chart」というグラフを作る処理になります。
ここまでで、上記のnameと、chara_heightを追加します。

let chart=ss.newChart()
    .asColumnChart()//単純な縦棒グラフ
    .addRange(name)//名前を追加
    .addRange(chara_height) //身長を追加

セルA10から縦横に10ドット下がった位置に配置し、高さ300、幅400のグラフを指定します。

.setPosition(10,1,10,10)//セルA10からタテ・ヨコ10ドット下がった所に配置
    .setOption('height',300)//グラフの高さを設定
    .setOption('width',400)//グラフの幅を設定
    .build()//グラフを作る

最後にグラフchartをアクティブなスプレッドシートに追加します。

ss.insertChart(chart);

ここまでのコードです。

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

//キャラクター名と身長の単純な縦棒グラフを作る
function myGraph(){
  
  //キャラクターの名前を定数nameに格納する
  const name=ss.getRange(1,1,4);

  //キャラクターの身長を定数chara_heightに格納する
  const chara_height=ss.getRange(1,4,4);

  
  //グラフを作る処理
  let chart=ss.newChart()
    .asColumnChart()//単純な縦棒グラフ
    .addRange(name)//名前を追加
    .addRange(chara_height) //身長を追加
    .setPosition(10,1,10,10)//セルA10からタテ・ヨコ10ドット下がった所に配置
    .setOption('height',300)//グラフの高さを設定
    .setOption('width',400)//グラフの幅を設定
    .build()//グラフを作る
    
    //アクリティブなスプレッドシートにグラフchartを追加する
    ss.insertChart(chart);

}

それでは、マクロを実行します。

スプレッドシートに切り替えて、拡張機能→マクロ→関数を追加で指定のマクロ(今回でいえば、myGraph)をインポートします。

再び拡張機能→マクロから「myGraph」を選んで実行します。

グラフが表示されました。

お疲れ様でした。
入門講座はここで最後になります。
最終回までご覧いただき、ありがとうございました(=^x^=)mm

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

←episode7

←GAS自作サンプルへ戻る

episode7 GAS【平均・カウント・昇順と降順の並び替え】キャラ身長で演算「HUNTER×HUNTERで覚えるGoogle Apps Script」

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

この記事では、

・キャラクターの身長の平均

・身長170cm以上のキャラクターの人数をカウント


・カスタム数値形式で身長のcmや人数の人を表示する方法

・念系統を昇順、身長を降順で並び替え

・演算結果と並び替えのクリア

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

今回はキャラの平均身長を求めるAVERAGE関数と、身長170cm以上という条件に該当する人数を数えるCOUNTIF関数を使いますので、Excelの関数に慣れている方でしたら馴染みやすいかもしれません。

それでは早速コードを書いて行きたいと思います。


まず、この様な簡易的なスプレッドシートを用意します。

ボタンの作り方とスクリプトの登録方法につきましては、episode2の記事 をご参照下さいませ。

最初に、キャラクターの身長を求めてセルG2(2,7)に入力するコードを書いて行きます。

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

//身長の平均を求める
function hightcm(){
  ss.getRange(2,7).setFormula('=AVERAGE(D1:D5)');
}

このスクリプト名の「hightcm」をコピーして、オレンジのボタンの右端の3点リーダーから「スクリプトを割り当て」を選んで登録します。

ボタンを押すとこの様に実行されました。

単位の「cm」は、メニューの「表示形式」→「123数字」→「カスタム数値形式」のダイアログボックスにこの様に入力します。cmはダブルクォーテーションで囲っています。


次に、身長170cm以上のキャラクターの人数を求めてセルG6(6,7)に入力するスクリプトを掲載致します。
先ほどのコードの下にこの様に付け加えます。

COUNTIF関数を用いております。

//身長170cm以上の人数を求める
function cm170over(){
  ss.getRange(6,7).setFormula('=COUNTIF(D1:D5,">=170")');
}

緑のボタンに「cm170over」を登録して実行致します。

この様に求まりました。

人数の単位の「人」は、先ほどのカスタム数値形式で「0人」とそのままダブルクォーテーションを付けずに指定します。


次に並び替えを行います。

・念を昇順
・念が同じ場合は身長の降順

になる様に動作するスクリプトを掲載致します。
念は3列目、身長は4列目になっております。

並び替えをするのに、sortメソッド、ascendingがtrueで昇順、falseで降順(背の高い順)を使用しております。

また、下にこのコードを追記します。

//念を昇順、身長を降順で並び替え
function sortNenHight(){

  //並び替えの範囲と並べ替え種類の指定
  ss.getRange(1,1,5,4).sort([
    {column: 3,ascending: true},
    {column: 4,ascending: false},
  ])

}

ピンクのボタンに「sortNenHight」を割り当ててボタンを押します。

実行結果です。
同じ変化系のヒソカとキルアでは、身長が高い方が上になっております。


最後に、並び替えを戻して計算結果を消去するスクリプトを掲載します。
順番を元に戻す処理も考えて、A列に予め番号を割り振っておきましたので、A列である「column: 1」を「ascending: true」で昇順にします。

//計算結果のクリアと順番を元に戻す(キャラクター順)
function sortClear(){

  //並び替えの範囲と並べ替え種類の指定
  ss.getRange(1,1,5,4).sort([
    {column: 1,ascending: true}
  ])

  //計算結果のクリア
  ss.getRange(2,7).clear();
  ss.getRange(6,7).clear();

}

このスクリプト「sortClear」を灰色のボタンに割り当てて実行します。

元の順番に戻って、計算結果もクリア出来ました。
ここまでのコードをまとめます。

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

//身長の平均を求める
function hightcm(){
  ss.getRange(2,7).setFormula('=AVERAGE(D1:D5)');
}


//身長170cm以上の人数を求める
function cm170over(){
  ss.getRange(6,7).setFormula('=COUNTIF(D1:D5,">=170")');
}



//念を昇順、身長を降順で並び替え
function sortNenHight(){

  //並び替えの範囲と並べ替え種類の指定
  ss.getRange(1,1,5,4).sort([
    {column: 3,ascending: true},
    {column: 4,ascending: false},
  ])

}


//計算結果のクリアと順番を元に戻す(キャラクター順)
function sortClear(){

  //並び替えの範囲と並べ替え種類の指定
  ss.getRange(1,1,5,4).sort([
    {column: 1,ascending: true}
  ])

  //計算結果のクリア
  ss.getRange(2,7).clear();
  ss.getRange(6,7).clear();

}

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

みなとみらいの夜景、コスモクロック21です。

←episode6               episode8(最終回)→

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

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


自己紹介

モバイルバージョンを終了