この記事のシリーズを読むことで、アニメ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(最終回)→
■ 関連記事 ■
