GAS「ねこあつめ」ループに制御を加えて一つずつ出力する「ねこあつめシリーズ:その6」

この記事では、GAS(Google Apps Script)でForループを抜けるbreakや、whileループの使い方を学びます。ループに制御を加えて1つずつ出力して行きます。

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

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

まず、前回の復習をします。
下のスプレッドシートの右端D列が空欄になっている所のねこちゃんの名前(A列)
を出力して、D列の空欄を「済」にするコードを買いました。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for (let i = 2; i <= lastRow; i++) {
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      //出力し終わったら「済」にする
      ss.getRange(i, 4).setValue('済');
    };
  }
}

A列(猫ちゃんの名前)を出力したログです。

スプレッドシートに戻ると、このように「済」になっています。

さて、今回の内容に入る前に、ねこあつめ画像で癒されます。

今回は、この様なスプレッドシートを用意します。
「なまえ」が「サビガー」のみ、入力が「済」になっていて、それ以外は空欄です。

今までは一番右の列で、「済」が入っていない空欄の「ねこともだち」のお名前を一度に一斉に出力していましたが、1つ1つの出力が出来る様にループに制御をかけて行きます。

まずは制御をしないで実行した場合のコードと実行結果です。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for (let i = 2; i <= lastRow; i++) {
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      ss.getRange(i, 4).setValue('済');
    };
  }
}

スプレッドシートの切り替えると、この様に一度に「済」が入っています。

これを、一度ではなく一つ一つ出力出来るように、コードを改良します。
一旦スプレッドシートを実行前に戻します。

先ほどのコードの末尾に「break」を追加して、IF文の所でD列が空白になっている猫ちゃんの名前(A列)を1つ出力した直後にループを抜けます。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  for (let i = 2; i <= lastRow; i++) {
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      ss.getRange(i, 4).setValue('済');

      //ここにbreakを追記して、ループを抜ける
      break;

    };
  }
}

実行結果です。

「ヘキサにゃん」が出力され、1件処理できました。

これを続けると、

2件目の「みっけ」が「済」になりました。

また、breakを使わず、whileループを使う方法もあります。
D列にデータが入っている間は次の行に進み、空白になったらループを抜けてA列の「なまえ」を出力します。
この表の1行目はタイトルなので、2行目から4行目までは「済」が入っています。
2行目は「済」というデータが入っているから次へ→3行目→4行目と行を進めます。
5行目になるとD列が空白になるので、ループを抜けて出力します。

行を表す変数をiとした場合のトレースを行います。

i=2で2行目を見る

D列に「済」が入っているから、iに1を加えてi=3になる

i=3で3行目を見る

D列に「済」が入っているから、iに1を加えてi=4になる

i=4で4行目を見る

D列に「済」が入っているから、iに1を加えてi=5になる

i=5で5行目を見る

D列が空欄なので、whileループを抜けて出力処理を行う。
トレースのコードも追記して、ログ出力及びスプレッドシートの入力を「済」にしました。

実行して、ここまでのトレースのログを見てみます。

では、最後に実行後のスプレッドシートとコードを掲載します。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

    
    //whileループでは、ループに入る前に必ず初期値を設定する。
    let i=2;   
  
    //whileループで、D列目に「済」などの文字が入っていたらiをインクリメントする
    while (ss.getRange(i, 4).getValue()) {
      console.log(`現在のiの値は【${i}】です。`);
      i++;   //iをインクリメントして次の行へ
      console.log(`D列にデータが入っているので、iの値を+1をして【${i}】になりました`);
      console.log('-----------------------------------');
    }

    //D列が空欄なので、A列「なまえ」のログ出力とD列を「済」にする
      console.log('<<ループを抜けた>>>');
      console.log(`iの値は【${i}】です。D列が空白なので【ループを抜けて】出力処理を行います。`);
      console.log(ss.getRange(i, 1).getValue());
      ss.getRange(i, 4).setValue('済');

      //最終的なiの値
      console.log(`最終的なiの値:【${i}】`)
    
    }

Whileの注意点は
・初期値を書き忘れないこと(7行目のi=2)
・無限ループに気をつけること(12行めのi++)

これは、iが加算される行(12行目のi++)があるから処理が進んで空白があったらループを抜けます。
しかし、iが加算されなかったら再び同じ行を見ることになって、ループを抜けられなくなって無限ループになります。

なので、

「初期値を設定」
「ループの変数を加算」


この2つは非常に大事です。
ご精読、ありがとうございました。

参考記事:【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~

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

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

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

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

←前に戻るにゃん              次行くにゃん→

GAS「ねこあつめ」出力したセルに処理済み「済」を出力する「ねこあつめシリーズ:その5」

この記事では、GAS(Google Apps Script)で、実行したら処理済みのセルに「済」と出力する方法を学びます。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

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

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

まずは前回のおさらいを致します。
下記のスプレッドシートで、1番右側の「入力」が「空欄」のセル、つまり「何か入っている」の先頭に「!」のNOTを付けて、「!何か入っている」で何も入っていないセルのねこちゃんの名前(A列)を出力しました。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for(let i=2;i<=lastRow;i++){
    if(!ss.getRange(i,4).getValue()){
      console.log(ss.getRange(i,1).getValue());
    };    
  }
}

今回の内容に入る前にねこあつめ写真で癒されます(=^x^=)

今回は、下記のこのスプレッドシートには、1番右のセルの空欄になっている所の「なまえ(A列の赤枠)」をログに出力した後、「済」と入力します。
実行すると、D列の赤枠の所にも「済」が入るイメージです。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for (let i = 2; i <= lastRow; i++) {
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      //出力し終わったら「済」にする
      ss.getRange(i, 4).setValue('済');
    };
  }
}

実行結果です。

今回処理したセルが処理済みになり、「TRUE」と入りました。

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

参考サイト:【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎

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

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

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

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

←前に戻るにゃん 次行くにゃんっ→

GAS「ねこあつめ」IF文で条件に該当するねこ名を出力する「ねこあつめシリーズ:その4」

この記事では、GAS(Google Apps Script)でForループの中でIF文を使って、ある条件に該当するセルの値を取得する方法を掲載しています。
また、その条件とは、「セルに値が入っていない空欄」なので、NOTという演算子を使う書き方を学べます。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

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

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

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


このようなスプレッドシートから、A列の「なまえ」で2行目の「へきさにゃん」〜5行目の「とらきち」までログに出力します。
出力結果とコードです。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループでねこちゃん達の名前を出力
  for(let i=2;i<=lastRow;i++){
    console.log(ss.getRange(i,1).getValue());
  }
}

今回の内容に入る前に、「ねこあつめ」画像で癒されます(=^x^=)
このコは茶トラのヘキサにゃんです。

では、今回扱うスプレッドシートは、以下の様に用意いたしました。

一番右側の列「入力」の所に何も入っていない猫ちゃんの名前を出力します。
つまりこの例では、「ヘキサにゃん」と「とらきち」が出力されます。

Forループの中にIF文を書いていきます。
イメージは、こんな感じです。

「For
 「IF
 」

「」をブロッック( { } )に見立ててイメージすると分かりやすいかもしれません。

一番右の列が空白だったら、ということは、「セルの中身に何も入っていない」、つまり、言い換えると、
中身に文字が入っていることの否定」です。

この否定(NOT)は、先頭に「!」をつけて書きます。
いきなり論理演算NOTなんて出てくるとチョットびっくりしちゃいますよね。
ビックリマークなんて出てきたし。
そこで、懐かしのベン図を使って解説致します。
(ビックリマンも懐かしいな・・・。)

赤く塗っているところが「東京都民」です。

NOTを使うために「!」を使うと、東京都民では「ない」人が赤くなります。

「!東京都民」で例えば北海道とか沖縄が該当します。
この例では、「!なんか文字が入っている」→「空欄」を指定しています。

では、1番右の列に何も入っていない、つまり「!なんか入っている」場合に限り、猫ちゃんの名前を出力します。
7行目のIF文にご注目をお願いします。 

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for(let i=2;i<=lastRow;i++){
    if(!ss.getRange(i,4).getValue()){
      console.log(ss.getRange(i,1).getValue());
    };    
  }
}

実行結果です。

これで、「ヘキサにゃん」と「とらきち」が出力されました(=^x^=)
ご精読ありがとにゃん(=^x^=)

参考記事:【初心者向けGAS】条件分岐をするif文の使い方の超基本

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

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

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

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

←前に戻るにゃん          次行くにゃっ→

GAS「ねこあつめ」Forループを使って猫たちの名前を取り出す「ねこあつめシリーズ:その3」

この記事では、GAS(Google Apps Script)でForループを使ってセルの値を取得する方法を掲載しています。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

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

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

まず、前回の復習を軽く行います。
このようなスプレッドシートで、セルA1からC3までの範囲を出力するコードを書きました。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValues(); //←ここをgetValue「s」と複数形に
  console.log(mikke);
}

今回の内容に入る前に、ねこあつめ画像で癒されます。

では、今回の内容に入ります。
スプレッドシートの「ねこあつめ」のおともだちに、新しいコ達を追加しました。

一番左にあるA列の最初の行はタイトルですが、その下は、

「2行目 ヘキサにゃん」
「3行目 みっけ」
「4行目 サビガー」
「5行目 とらきち」

となっています。
この2行目から5行目までの猫たちの名前をForループを使って取り出します。

最終行5行目は、今後新しいねこ仲間達を追加しても使えるように、最終行を、

lastRow=ss.getLastRow();

と書いて取得しています。
このスプレッドシートが5行なので「5」が求まります。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  console.log(lastRow);  //取得した行をログ表示
}

何かの処理をしたらすぐにログ出力をする癖を付けておくと、エラーに太刀打ち出来るねこさんに慣れるかもしれません。

では、いよいよループに入ります。

ループは

「初期値 ; どこまでおっきくするか ; 増分」

「初期値 ; どこまでちっちゃくするか ; 減り分」

などと書くので、この場合は、
「2;最後の行;1」
となり、
「2から始める:最後の行まで:1行ずつ増える」
と読み替えられれます。

この時行を、「2行目」、「3行目」、「4行目」、「5行目」と1行ずつ増やしていくのに使う変数に、慣習的に「i」などの変数を使います。

Aやbでもよくね、って思われる方もいらっしゃると思いますが、これは他の言語でも同じようにiなど使うので、これが出て来たら「ループなんだな」って押さえておくと宜しいかと思います。

では、コードを書いていきます。
(先程のlastRow=5のログは確認出来たので消しました。)

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループでねこちゃん達の名前を出力
  for(let i=2;i<=lastRow;i++){
    console.log(ss.getRange(i,1).getValue());
  }
}

実行します。

無事に、猫たちの名前が取り出せました(=^x^=)

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

参考記事:【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本

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

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

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

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

←前に戻るにゃん 次行くにゃん→

GAS「ねこあつめ」でセルを選択して出力する「ねこあつめシリーズ:その2」

この記事では、GAS(Google Apps Script)でセルの値を取得する方法を掲載しています。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

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

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

簡易的ですが、「ねこあつめ」のキャラクター紹介の紹介をスプレッドシートで作りました。


このシートのA3のセル(みっけ)を出力してみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A3').getValue();
  console.log(mikke);
}

1行目で、SpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
2行目で、mikkeにセル「A3」の内容を入れています。
3行目で、ログ出力しています。

では、実行してみます。

この「’A3’」の所を、(3,1)としても同じ結果が得られます。
(行,列)の書き方になっているのでご注意を!
あと、この場合は「’ ‘」のシングルクォーテーションは使わないです。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange(3,1).getValue();
  console.log(mikke);
}

セル(3,1)と書いていて、この書き方をするとこの記事以降の記事で使うループなどで便利です。

では、次に複数のセルを含む範囲で作ってみます。
この表のセルA1からC3まで取得してみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValue();
  console.log(mikke);
}

実行してみます。

「最初のセルのみ」しか読み込めませんでした。

今度は「セルA1:C3」の指定した範囲全てを読み込める様に致します。
4行目を「getValues」にしてみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValues(); //←ここをgetValue「s」と複数形に
  console.log(mikke);
}

実行すると・・・。

このように出力されました。

よく見ると、[[‘A1′,’B1′,’C1’],[‘A2′,’B2′,’C2’],[‘A3′,’B3′,’C3’]]と、
二次元配列になっています。

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

参考記事:【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法

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

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

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

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

←前に戻るにゃん          次行くにゃん♪→

GAS(Google Apps Script)「ねこあつめ」で文字出力と簡単な計算を作ってみた。「ねこあつめシリーズ:その1」

この記事を読む事によって、GASが本当に初めての方でも、文字出力と簡単な足し算の計算結果を表示させることが可能になります。
具体例として、「ねこあつめ」を例にしています。
これからGASの勉強を始める猫好きさん、ねこあつめアプリをお使いの方にはお楽しみ頂けると思います。

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

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

コードを書く準備として、Googleドライブからスプレッドシートを追加します。
スプレッドシートは「新規」を押すと選択できます。

コードを書くエディタは、スプレッドシートのメニュー「拡張機能」から、Apps Scriptを選びます。

すると、このようなエディタが出てくるので、ここにコードを書いていきます。


まずは、「ねこあつめ」と表示するコードを早速書いていきます。

function myFunction() {
  console.log('ねこあつめ');
}

[Ctrl]+[S]で保存した後、[Ctrl]+[R] (Macでは[Command]+[R])で実行します。

実行結果です。

では、変数を使って、ここから計算をしてみます。
ねこあつめのねこたちの「せんとうりょく」の値を使います。

茶トラ猫の「ちゃとらさん」に、私は「ヘキサにゃん」という名前を付けました。
ヘキサにゃんの「せんとうりょく」は150です。

しまミケ猫さんに「しまみん」と名前を付けました。
「しまみん」の「せんとうりょく」は40です。
このヘキサにゃん(茶トラくん)としまみん(シマ三毛ちゃん)の戦闘力を足すと150+40=190になります。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  console.log(chatora + shimamike);
}

実行結果です。

これをもう少し、日本語の体裁を整えて書きます。
文字列を囲むときは、シングルクォーテーションではなく、「`」(@のキーをシフトで押す)で囲い、数字を文字列の中に埋め込むには、${数字}と入力します。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  let goukei=chatora+shimamike;

  console.log(`茶とらくん「${chatora}」 +しまみけちゃん「${shimamike}」の「せんとうりょく」の合計は「${goukei}」です。`);
}

実行結果です。

最後に、メッセージボックスの表示をします。
コードを追記します。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  let goukei=chatora+shimamike;

  console.log(`茶とらくん「${chatora}」 +しまみけちゃん「${shimamike}」の「せんとうりょく」の合計は「${goukei}」です。`);

  Browser.msgBox('ねこあつめ');

}

下記の処理で、「このアプリは確認されていません」と表示されてしまった場合は、こちらから解決可能です。

実行して、スプレッドシートに切り替えると、下記のようなボックスが表示されます。

「OK」でボックスを閉じます。

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

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

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

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

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

                         次へ行くにゃん→