GAS「ねこあつめ」の行の範囲を取得する「ねこあつめシリーズ:その7」

この記事では、GAS(Google Apps Script)でデータがある範囲をgetA1Notationを使って取得します。また、Forループの復習で、スプレッドシートのセルに「済」が入っていない分の処理を致します。

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

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

まずは前回の復習をします。
whileループを使って、一つ一つ入力する様に制御致しました。
i=2(タイトル行を除いた最初の行)で、D2の所が「済」なっていたので、i=3にして、一つ下をチェックして・・・と最後までチェックして行きました。


最後の所が空欄になっていて、「なまえ(A列の所)」の「とらきち」を出力して、「済」にしました。

そのトレースのログです。

コードはこの様になりました。

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}】`)
    
    }

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

今回はD列の、この範囲を取得します。

また、D列に「済」が入っていない「とらきち」の名前も、範囲と共に出力して「済」にします。

(行,列,範囲)の引数(括弧の文字の計算に必要となる材料)は、(2行目の4列目〜最終行の行数から1つ引いた分)になっています。

2目・・・1行目はタイトルのため
4目・・・右端の列
最終行から1を引く・・・タイトルの行の分を引く

では、入力の「済」が空白の「とらきち」の名前をログ出力して、スプレッドシートの入力を「済」にして、上の図の赤枠の範囲を「getA1Notation」を使ってログ出力するコードを掲載します。

コードはこちらです。

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

  for (let i = 2; i <= lastRow; i++) {

    //もしもD列の「済」が空白だったらA列の「なまえ」を出力してD列を「済」にする
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      ss.getRange(i, 4).setValue('済');

      //もしも最終行以上になったらセル範囲を消去する
      if (i >= lastRow) {
        console.log(ss.getRange(2, 4, lastRow - 1).getA1Notation());
      }
      break;
    }
  }
}

実行結果です。

セルの範囲が取り出せました。
スプレッドシートを確認します。

これで、「とらきち」が出力され、セル範囲を取得し、最後の「済」が入りました。

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

参考記事: 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する 

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

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

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

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

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

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

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