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)

この記事を読むことによって、GAS(Google Apps Script)で計算結果を格納する方法を学べます。今回は平均を求めるAVERAGEと条件に該当する人数を数えるCOUNTIF関数を使います。また、文字入力の復習も出来ます。

Excelが分かれば、すんなり納得されると思います。

このコーナーではGASをアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載しております。

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

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

前回(episode6)の復習をします。

ハンター試験ルーキーのキャラクターのセルの背景や文字の色を設定しました。
そのコードと実行結果です。

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

//セルの背景色とフォントを変える
function rookieColor(){

  //A列B列の名前と念系統が入っているセル範囲をcelDATAと定義
  const cellDATA=ss.getRange(1,1,4,2);

  //背景色を黒にする
  cellDATA.setBackground('black');

  //文字を白にする
  cellDATA.setFontColor('white');

  //C列のヒソカチェックのセル範囲をcellHISOKAと定義
  const cellHISOKA=ss.getRange(1,3,4);

  //背景を薄紫にする
  cellHISOKA.setBackground('#eeddee');

}

今回は、この一つ右のセルにキャラクターの身長を入力して、平均を求めてみたいと思います。(下の表のD列にゴンからレオリオまでの身長を入れました。)

それで、まずはこの表の下のセルA6に「平均」といいう文字を入れてみます。

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

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

この様に文字が入りました。

また、この1つ下のセルA7に「170cm以上の人数」の文字を入れます。

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

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

少しA列を広げました。

今度は、セルB6に平均身長を求めます。

ss.getRange(6,2).setFormula(‘=AVERAGE(D1:D4)’);

この様に、setFormula(‘=関数(セル範囲)’);で求まります。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
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)');
}

最後に、セルB7に身長が170cm以上のキャラクターの人数を求めます。

ss.getRange(7,2).setFormula(‘=COUNTIF(D1:D4,”>=170″)’);

この様に、setFormula(‘COUNTIF関数(=セル範囲,”カウントする条件”)’);で求まります。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
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")');
}

この様に、求まりました。ご精読ありがとうございました。

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

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

←episode6               episode8(最終回)→

←GAS自作サンプルへ戻る

episode6 GASの「指定したセル範囲に色を付ける」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むことによって、GAS(Google Apps Script)でスプレッドシートの指定の範囲のセル背景やフォントに色を付けることを学べます。
GASをアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載しております。

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

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

前回(episode5)の復習をします。

スプレッドシートA列にある、ハンター試験ルーキーのキャラクター名のフォントを大きくしたり、文字を太くしたりしました。

そのコードと結果です。

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

//キャラクターの名前を12ptの太字にする
function Bold12pt(){

  const N=ss.getLastRow();
  let cellROOKIE=ss.getRange(1,1,N);
  cellROOKIE.setFontSize(12).setFontWeight('bold');

}

今回は、この表に色を付けます。
イメージとしては、厨二病っぽい感じにしたいと思います。

各キャラクターの名前(列A)と念系統(列B)を黒背景に白文字に、
ヒソカチェックの列(列C)は、紫にします。

列ABの4行2列分の範囲をcellDATAと定義します。

//A列B列の名前と念系統が入っているセル範囲をcelDATAと定義
let cellDATA=ss.getRange(1,1,4,2);

背景色を黒にしています。

cellDATA.setBackground(‘black’);

文字の色を白にしています。

cellDATA.setFontColor(‘white’);

列Cの4行1列分の範囲をcellHISOKAという名前にします。

//C列のヒソカチェックのセル範囲をcellHISOKAと定義
let cellHISOKA=ss.getRange(1,3,4);

白がffffff、黒が000000で、最初の2桁が赤、次が緑、最後が青なので、薄紫を[eeddee]で表しました。
このコードでは、赤と青を強めにしていて、薄い紫になります。

cellHISOKA.setBackground(‘#eeddee’);

ここまでのコードです。

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

//セルの背景色とフォントを変える
function rookieColor(){

  //A列B列の名前と念系統が入っているセル範囲をcelDATAと定義
  const cellDATA=ss.getRange(1,1,4,2);

  //背景色を黒にする
  cellDATA.setBackground('black');

  //文字を白にする
  cellDATA.setFontColor('white');

  //C列のヒソカチェックのセル範囲をcellHISOKAと定義
  const cellHISOKA=ss.getRange(1,3,4);

  //背景を薄紫にする
  cellHISOKA.setBackground('#eeddee');

}

ご精読ありがとうございました。

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

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

←episode5               episode7→

←GAS自作サンプルへ戻る

episode5 GASの「指定したセル範囲のフォントを変える」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むことで、GAS(Google Apps Script)で、スプレッドシートの指定の範囲の文字を太字にする処理を学べます。
GASをアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載しております。

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

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

前回(episode4)の復習をします。

IF文とForループを使って、各キャラクターの念がヒソカと同じ「変化系」か、それ以外かで分岐しました。

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


//【メンバー】がヒソカと同じ念系統か判定
function Hisoka(){

  //行数を取得して、変数Nにメンバーの人数を格納
  let N=ss.getLastRow();

  //ループを使って各キャラクターの念が「変化系」と等しいか判定して結果入力
  for(let i=1;i<=N;i++){
    let nen=ss.getRange(i,2).getValue();  //【メンバー】の念を取得
  
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(nen=='変化系'){                      
      ss.getRange(i,3).setValue('ヒソカと一緒');
    }else{
      ss.getRange(i,3).setValue('XXX'); //違うからこっちに分岐
    }

  }  
}


//ヒソカチェッククリア
function HisoClear(){

  //行数を取得して、変数Nに人数を格納
  let N=ss.getLastRow();
  ss.getRange(1,3,N).clear();
}

このコードでもループを使ったIFによる分岐とその結果の出力は可能なのですが、GASでは、SpreadsheetAppからアクティブシートを辿り、更にセルを辿るとその分処理時間がかかります。

そこで、配列を使って分岐をするコードも作りました。

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


//【メンバー】がヒソカと同じ念系統か判定
function Hisoka(){

  //行数を取得して、変数Nにメンバーの人数を格納
  let N=ss.getLastRow();

  //【メンバー】の念を格納する配列を宣言
  let array=[];

  //変化系と等しいか判定結果を入れる配列
  let judge=[];

  //念を配列に格納
  array=ss.getRange(1,2,N).getValues();

  //arrayに念が格納されたことをログに出力して確認
  console.log(array);

  //ループを使って配列の中身が「変化系」と等しいか調べて判定結果を二次元配列として追加
  for(let i=0;i<N;i++){
    if(array[i][0]=='変化系'){
      judge.push('ヒソカと一緒');
    }else{
      judge.push('XXX');
    }
  }

  //判定結果が二次元配列として格納されたことをログで確認
  console.log(judge);

  
  //配列judgeをスプレッドシートに出力
  for(let i=1;i<=N;i++){
    ss.getRange(i,3,1).setValue(judge[i-1]);
  }
}


//ヒソカチェッククリア
function HisoClear(){

  //行数を取得して、変数Nに人数を格納
  let N=ss.getLastRow();
  ss.getRange(1,3,N).clear();
}

今回は、この表のA列にあるキャラクターの名前のフォントを変えます。
キャラクター名の所を12ptと少し大きいフォントにして、更に太字にして目立たせます。

ハンター試験ルーキーのデータが掲載されている範囲は、セルA1からC4まであります。この範囲が文字で大きさ12ptになります。

キャラクターの人数は、getLastRowで取得します。

const N=ss.getLastRow();

範囲に「cellROOKIE(ルーキー)」と名前を付けて、大きさを変える範囲を確保します。

let cellROOKIE=ss.getRange(1,1,N);

(1,1,N)は、セルA1(1,1)からN行分の範囲という意味です。
これで、キャラクターが増えても対応可能です。

この範囲にフォントの大きさを12ptで太字にする設定を下記のコードに施します。

cellROOKIE.setFontSize(12).setFontWeight(‘bold’);

ここまでのコードです。

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

//キャラクターの名前を12ptの太字にする
function Bold12pt(){

  const N=ss.getLastRow();
  let cellROOKIE=ss.getRange(1,1,N);
  cellROOKIE.setFontSize(12).setFontWeight('bold');

}

この様に、キャラクターの名前がフォント12の太字になりました。


7行目の

const N=ss.getLastRow();

で、最終行を取得しているので、キャラクターの名前が増えても対応可能です。

新人潰しのトンパさんからビスケまで、キャラクターを追加しました。
再度実行してみます。

全員の名前が太字になりました。

ご精読ありがとうございました。

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

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

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

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

←episode4               episode6→

←GAS自作サンプルへ戻る

episode4 GASの「ヒソカチェックで、IFとループを一気に学ぶ」(Hunter×Hunterで覚えるGoogle Apps Script)

GAS(Google Apps Script)をアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載しております。

この記事を通して、GASによるIF分岐とループ、SpreadSheetApp→アクティブシート→アクティブセルと階層を辿ることによって処理時間がかかってしまうことを空の配列を用意することで解決する方法を掲載しています。
GASでは配列の扱いがとても重要になります。

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

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

←GAS自作サンプルへ戻る

前回(episode3)の復習をします。

・セルA1からB4にキャラクター名を入力する関数と消去する関数を作り、それぞれをボタンに登録しました。

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

//キャラクターの名前と念の系統を入力する関数
function mySet(){

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

  //二次元配列hhにデータが格納されたことをログ出力で確認
  console.log(hh);

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

}

//入力範囲を消去する関数
function myClear(){

  hh=ss.getDataRange();
  hh.clear();

}

今回はIF文を使って、ゴンからレオリオまでのキャラの念が、ヒソカと同じ変化系かどうか調べます。

ゴンは「強化系」なので「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

念が入力されているセルA2は(1,2)と洗わせます。
elseでは、「XXX」と表記されます。

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


//【ゴン】がヒソカと同じ念系統か判定
function Hisoka(){
  let nen=ss.getRange(1,2).getValue();  //ゴンの念を取得
  
  //【ゴン】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){                      
    ss.getRange(1,3).setValue('ヒソカと一緒');
  }else{
    ss.getRange(1,3).setValue('XXX'); //違うからこっちに分岐
  }
}

次に、「キルア」を調べます。

キルアは「変化系」なので、「ヒソカ」と同じという条件が当てはまり「ヒソカと一緒」と表示されます。

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


//【キルア】がヒソカと同じ念系統か判定
function Hisoka(){
  let nen=ss.getRange(2,2).getValue();  //キルアの念を取得
  
  //【キルア】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){                      
    ss.getRange(2,3).setValue('ヒソカと一緒');//同じだからこっちに分岐
    }else{
    ss.getRange(2,3).setValue('XXX'); 
  }
}

次に、「クラピカ」を調べます。

クラピカは「具現化系」なので、「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

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


//【クラピカ】がヒソカと同じ念系統か判定
function Hisoka(){
  let nen=ss.getRange(3,2).getValue();  //クラピカの念を取得
  
  //【クラピカ】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){                      
    ss.getRange(3,3).setValue('ヒソカと一緒');
    }else{
    ss.getRange(3,3).setValue('XXX'); //違うからこっちに分岐
  }
}

最後に、「レオリオ」を調べます。
レオリオは「放出系」なので、「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

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


//【レオリオ】がヒソカと同じ念系統か判定
function Hisoka(){
  let nen=ss.getRange(4,2).getValue();  //レオリオの念を取得
  
  //【レオリオ】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){                      
    ss.getRange(4,3).setValue('ヒソカと一緒');
    }else{
    ss.getRange(4,3).setValue('XXX'); //違うからこっちに分岐
  }
}

もうお気づきですよね。

getRange(i,2)getValue(); //キャラの念を取得 
getRange(i,3)setValue(‘ヒソカと同じか違うか’)      

この、「i」の部分のみを変えています。
ただ、コードをいちいち変えるの面倒なので、Forによるループを使います。

実は、これまでで、ループのトレースができちゃっていました。

追加としては、

ゴン・・・i=1
キルア・・・i=2
クラピカ・・・i=3
レオリオ・・・i=4

と、変数が出てくるぐらいです。

なぜ「i」なのか、それは、ループで慣習的に使う変数として、「i、j、k」がよく使われるからです。このことについては、「なぜ、新人つぶしのトンパさんは、トンパさんという名前なのか」と突き詰めてしまうことのようなものなので、ループではiとかを使うんだな、程度におさえておいて大丈夫です。

また、メンバーは4人なので、その人数を調べるために、変数Nに「LastRow」(最後の行)を調べます。

以上を踏まえてコードを書くと、こうなります。

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


//【メンバー】がヒソカと同じ念系統か判定
function Hisoka(){

  //行数を取得して、変数Nにメンバーの人数を格納
  let N=ss.getLastRow();

  //ループを使って各キャラクターの念が「変化系」と等しいか判定して結果入力
  for(let i=1;i<=N;i++){
    let nen=ss.getRange(i,2).getValue();  //【メンバー】の念を取得
  
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(nen=='変化系'){                      
      ss.getRange(i,3).setValue('ヒソカと一緒');
    }else{
      ss.getRange(i,3).setValue('XXX'); //違うからこっちに分岐
    }

  }  
}

この「Hisoka」をボタンの「スクリプトを割り当て」でボタンに登録します。
また、下記のコードで、判定結果の範囲を削除します。

//ヒソカチェッククリア
function HisoClear(){

  //行数を取得して、変数Nに人数を格納
  let N=ss.getLastRow();
  ss.getRange(1,3,N).clear();
}

一旦ここまでのコードをまとめます。

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


//【メンバー】がヒソカと同じ念系統か判定
function Hisoka(){

  //行数を取得して、変数Nにメンバーの人数を格納
  let N=ss.getLastRow();

  //ループを使って各キャラクターの念が「変化系」と等しいか判定して結果入力
  for(let i=1;i<=N;i++){
    let nen=ss.getRange(i,2).getValue();  //【メンバー】の念を取得
  
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(nen=='変化系'){                      
      ss.getRange(i,3).setValue('ヒソカと一緒');
    }else{
      ss.getRange(i,3).setValue('XXX'); //違うからこっちに分岐
    }

  }  
}


//ヒソカチェッククリア
function HisoClear(){

  //行数を取得して、変数Nに人数を格納
  let N=ss.getLastRow();
  ss.getRange(1,3,N).clear();
}

これで、ボタンを使って、判定したり消したりが出来る様になりました。
このままでも良いのですが、GASでループを使う場合、1回1回SpreadsheetAppからアクティブシートを辿ってしまうので処理に時間がかかってしまいます。

そこで、一旦配列arrayにメンバーの念系統を格納します。
また、メンバーの念系統がヒソカの変化系と等しいかどうかの判定結果を格納する配列judgeを用意します。

  //【メンバー】の念を格納する配列を宣言
  let array=[];

  //変化系と等しいか判定結果を入れる配列
  let judge=[];

  //念を配列に格納
  array=ss.getRange(1,2,N).getValues();

配列arrayを使って、念系統がヒソカと同じ変化系かどうか調べて、その判定結果を配列judgeに格納するループです。
これ(配列)を使うことによって、スプレッドシートからアクティブシートに階層を辿って行く処理時間を短縮できます。

配列arrayをログ出力しました。


この配列arrayは、4行1列の二次元配列です。
なので、array[0][0]=ゴンの「強化系」,array[1][0]=キルアの「変化系」,array[2][0]=クラピカの「具現化系」,array[3][0]=レオリオの「放出系」にアクセスして、それがヒソカの「変化系」と等しいかどうか調べてその結果を配列judgeに格納しています。

//ループを使って配列の中身が「変化系」と等しいか調べて判定結果を二次元配列として追加
  for(let i=0;i<N;i++){
    if(array[i][0]=='変化系'){
      judge.push('ヒソカと一緒');
    }else{
      judge.push('XXX');
    }
  }

配列judgeのログはこちらです。

この判定結果の配列judgeをループでスプレッドシートに格納します。

//配列judgeをスプレッドシートに出力
  for(let i=1;i<=N;i++){
    ss.getRange(i,3,1).setValue(judge[i-1]);
  }

同様にスプレッドシートに書き込めました。
ここまでのコードをまとめます。

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


//【メンバー】がヒソカと同じ念系統か判定
function Hisoka(){

  //行数を取得して、変数Nにメンバーの人数を格納
  let N=ss.getLastRow();

  //【メンバー】の念を格納する配列を宣言
  let array=[];

  //変化系と等しいか判定結果を入れる配列
  let judge=[];

  //念を配列に格納
  array=ss.getRange(1,2,N).getValues();

  //arrayに念が格納されたことをログに出力して確認
  console.log(array);

  //ループを使って配列の中身が「変化系」と等しいか調べて判定結果を二次元配列として追加
  for(let i=0;i<N;i++){
    if(array[i][0]=='変化系'){
      judge.push('ヒソカと一緒');
    }else{
      judge.push('XXX');
    }
  }

  //判定結果が二次元配列として格納されたことをログで確認
  console.log(judge);

  
  //配列judgeをスプレッドシートに出力
  for(let i=1;i<=N;i++){
    ss.getRange(i,3,1).setValue(judge[i-1]);
  }
}


//ヒソカチェッククリア
function HisoClear(){

  //行数を取得して、変数Nに人数を格納
  let N=ss.getLastRow();
  ss.getRange(1,3,N).clear();
}

ご精読ありがとうございました。

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

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

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

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

←episode3               episode5→

←GAS自作サンプルへ戻る

episode3 GASの「範囲を指定してまとめて入力(二次元配列は団地だ!)」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むと、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)で、二次元配列をスプレッドシート出力することが可能です。
この記事で取り扱うのは、4行2列の配列です。
シートに出力する関数、消去する関数の2つを作って、それぞれボタンに割り当て(登録)します。
また、シートに入力されている範囲をgetDataRangeで配列として扱へます。

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

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

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

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

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

//入力とログ出力をする関数
function mySet(){

  //セル入力
  let hh=ss.getRange(1,1).setValue('ハンターハンター');

  //ログ出力
  console.log(hh);

}

//消去する関数
function myClear(){
  ss.getRange(1,1).clear();

}

ここから、いよいよキャラクターの名前を登録していきます。

登録するデータは、

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

です。

スプレッドシートは行列の二次元配列なので二次元配列を使って入力します。
二次元配列とか配列って難しそうですが、イメージは「団地(マンションでも)」です。

1階・・・ゴンのデータ(101号室に「ゴンの名前」 102号室に「ゴンの念系統」)
2階・・・キルアのデータ(201号室に「キルアの名前」 202号室に「キルアの念系統」)

というふうに「団地」と捉えると、操作しやすくなるのかも知れません。

以上を踏まえてスクリプトを書いていきます。
まずは、キャラクターの名前と念の系統を入力する関数であるmySetから解説します。

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

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

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

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

lengthで4行、length[0]で2列分のセル範囲を確保しています。

ログ出力で配列hhが二次元配列として格納されたことが確認できました。

次に、データを消去に関するmyClear関数を作成します。

//入力範囲を消去する関数
function myClear(){

  hh=ss.getDataRange();
  hh.clear();

}

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

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

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

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

//キャラクターの名前と念の系統を入力する関数
function mySet(){

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

  //二次元配列hhにデータが格納されたことをログ出力で確認
  console.log(hh);

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

}

//入力範囲を消去する関数
function myClear(){

  hh=ss.getDataRange();
  hh.clear();

}

下記のシートのボタンにそれぞれのスクリプトを割り当てて実行します。
ボタンを選択すると、右上の「・・・」からスプリクトを割り当てられます。

これで、「入力」「消去」ボタンも機能出来ました。

ご精読ありがとうございました。

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

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

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

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

←episode2               episode4→

←GAS自作サンプルへ戻る

episode2 GASの「文字入力と消去をボタン操作で行う」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むと、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の基礎の基礎が学べます。この記事ではスプレッドシートにボタンを作成してスクリプトを登録して、ボタンを押すと各関数の処理が実行される流れを学ぶことが出来ます。
また、スプレッドシートのボタンの複製は悩む所なので、お役に立てるかも知れません。

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

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

GASは環境設定不要ですぐ始められますが、

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

・セルA1に「ハンターハンター」と入力する

function hh1no1(){
  
  //アクティブなスプレッドシートにアクセスしている
  const ss=SpreadsheetApp.getActiveSheet();

  //ここで入力処理を行なっている。
  ss.getRange(1,1).setValue('ハンターハンター');

}

・セルA1の内容を実行ログに出力

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //ここを追加してセルA1の内容をログに表示する
  console.log(ss.getRange(1,1).getValue());
}

・セルA1の内容を消去する

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //消去する処理
  console.log(ss.getRange(1,1).clear());
}

以上を関数に分けます。

いきなり「関数」なんて出てくると難しそうですが、

入力と表示」を「ヤマダさんのお家」、
文字の消去」を「サトウさんのお家」、
両家(両方)で使うスプレッドシートからアクティブシートを選択する共通の処理を「ゴミ捨て場」というイメージを持って読み進めて下さい。

ゴミ捨て場→「共通:アクティブなシートを選択」・・・グローバル関数(共通領域)


ヤマダ家→「入出力:セルA1に「ハンターハンター」と入力して実行ログに表示する」・・・mySet関数

サトウ家→「消去:セルA1に入力された内容を消去する」・・・myClear関数

ヤマダさんは、ヤマダさんの家と共通のゴミ捨て場は使えるけれど、サトウさんの家のものは使えない、
サトウの立場ではその逆が言える、これが関数のイメージです。

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

//入力とログ出力をする関数
function mySet(){

  //セル入力
  let hh=ss.getRange(1,1).setValue('ハンターハンター');

  //ログ出力
  console.log(hh);

}

//消去する関数
function myClear(){
  ss.getRange(1,1).clear();

}

このようにスクリプトを作成しました。

スプレッドシートに「入力」と「消去」というボタンを2つ作って、そのボタンを右クリックし、右上角の「てんてん」をクリックして、「スクリプトを割りあて」を押します。そのやり方について、図を用いて詳しく解説致します。

「入力ボタン」を作ってから、それを元に「消去ボタン」を作ります。
ボタンの作り方は、「挿入」→「図形描画」から作れます。


ここで任意の図形を選択します。


図形を選択すると文字が入力可能です。


この文字を中央にするには、図形を選択した状態で下の図の赤枠「・・・」をクリックします。

下の図の「配置」から中央揃えを選びます。

あとは、色やサイズを調整して、右上の緑色の「保存して終了」をクリックします。

この後に、この「入力ボタン」を元に「消去ボタン」をコピーして作成します。

まず、さっき作った「入力ボタン」を右クリックして、の右上角の「てんてん」をクリックし、「編集」をクリックして、編集画面で「入力ボタン」をコピーします。

右上の緑色の「保存して終了」を押して、面倒ですがまたスプレッドシートの「挿入」→「図形描画」から開き、貼り付けてボタンの体裁を整えて、右上の緑の「保存して終了」を押すと複製出来ます。

位置を調整します。

「入力」を実行します。

消去を押すと消せます。

ご精読ありがとうございました。

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

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

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

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



←episode1               episode3→

←GAS自作サンプルへ戻る

episode1 GASの「セル操作で入力と消去」(ハンター×ハンターで覚えるGoogle Apps Script)

GAS(Google Apps Script)をアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載することになりました。
この記事を読めば、今日初めてGASを使う方がセルA1に好きな文字を入れることができ、消去することも可能になります。

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

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

GASは環境設定不要ですぐ始められますが、

・Googleアカウント
・「マイドライブ」から「新規」でスプレッドシートを追加

・スプレッドシートの「ツール」→スクリプトエディタ

この3点の準備は必要です。

準備が整ったところで。

まず最初に、スプレッドシートのセルA1に「ハンターハンター」と入力するスクリプトを書いてみます。(「こんにちは」でも、好きな言葉でも、何かお好きな文字を入れてみましょう。去年だったら「鬼滅の刃」、今年は「呪術廻戦」とかかな。)

getRange(‘セル番地’)でセルを指定して、setValue(‘入力する値’)で指定したセルに値を入力します。

初期状態のまっさらなスプレッドシートです。

function hh1no1(){
  
  //アクティブなスプレッドシートにアクセスしている
  const ss=SpreadsheetApp.getActiveSheet();

  //ここで入力処理を行なっている。
  ss.getRange(1,1).setValue('ハンターハンター');

}

こんな感じに書けました。
さて、
[Ctrl]+[S]で保存します。

Macの方は、「Command」と読み替えて下さい。

[Ctrl]+[R]で実行しようとすると・・・。

「承認が必要です」とメッセージが出るので、

「権限を確認」で、自分のアカウントを選ぶと、

なぬ!!

大丈夫。

「詳細」をクリックして。

「安全ではないページ」に移動して。

パソコンが爆発とか無いので、大丈夫です(=^x^=)

「許可」を押します。

実行ログ

で完了されたことが分かり、

で、入力されていました。

次に、セルA1に入力された「ハンターハンター」の文字を、実行ログに出力してみます。

//ここを追加してセルA1の内容を表示する
console.log(ss.getRange(1,1).getValue());

を追加します。

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //ここを追加してセルA1の内容をログに表示する
  console.log(ss.getRange(1,1).getValue());
}

最後に、これを消します。

setValue(‘入力する値’)のところを、clear()と書き換えます。

//ここを変更してセルA1の内容を消去する
console.log(ss.getRange(1,1).clear());

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //消去する処理
  console.log(ss.getRange(1,1).clear());
}

実行すると・・・

無事に消去できました。

今回は、セルをA1を(1,1)と記述しましたが、(‘A1’)と書いても同様に処理できます。
また、セルB1は(1,2)で、セルA2は(2,1)です。
後に範囲を取得する場合に備えて今回は(1,1)と記述しました。


ご精読ありがとにゃん(=^x^=)

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

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

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

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

←GAS自作サンプルへ戻る     episode2→