<ねこフォーム4>ねこあつめフォームに「メールアドレス」を追加する

この記事では、GAS(Google Apps Script)を使って、 Googleフォームに入力したメールアドレスが、「@」が含まれていてメールアドレスとして正しいのかを判定する、入力テキストアイテムを作成して行きます。
お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームにメールアドレスの入力欄とバリデーションを追加する方法

です。

前回の復習ですが、

このようなフォームの原型を作成して、

この「目」のマークを押して、

フォームのプレビューを表示させました。
お名前は、入力必須の*がついています。

前回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //←テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

}

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

さて今回は、「おなまえ」と「あそんだグッズ」に加えて、「めあど」のテキストアイテムを追加します。

Mailアドレスの入力項目を追加するには、「それがメールであるか」を検証する必要が出てくるのが、「おなまえ」や「あそんだグッズ」よりも若干複雑になります。

追加するコードは下記の2行です。

//←メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

このコードで必要なことは、最初の行で、createTextValidation()で、「検証する」という動作を作ります。また、requireTextIsEmail()で、それがE-mailのアドレスであるのか判定します。build()では「E-mailのアドレスであるのか検証するオブジェクトを」作成します。

次の行では、今までの「おなまえ」や「あそんだグッズ」と同じようにテキストアイテムを設定して、1行目で作ったオブジェクトの検証をします。

この2行の理解を深めるIT用語について掲載しました。
ITパスポート基本情報技術者試験でお世話になった「「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」のリンクを貼りましたので、不安な用語がございましたら、チェックして見て下さい。

オブジェクト

メソッド

バリデーション

ビルド

では、先ほどの2行を追加したコードで、動作を確認します。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //←メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

}

フォームの原型です。

また、「目のマーク」からフォームのプレビューを開きます。

「めあど」の部分を詳しく見てみます。
架空のアドレス「neko22@cat.jp」と入力しました。

このままで送信を押せますが、「@」を取って送信ボタンを押してみます。

「@」を入れて送信した所、無事に送れました。
ご精読ありがとうございました。

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

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

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

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

←前に戻るにゃっ!           次行くにゃん(=^x^=)→

<ねこフォーム3>GASで作成したフォームに「ねこあつめ」の「おなまえ」と「あそんだグッズ」を追加する

この記事では、GAS(Google Apps Script)を使って、フォームを作成して行きます。
お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームに記述式の質問を追加する方法

です。

前回のおさらいをします。

このフォームを、

ドライブの指定されたフォルダ「ねこねこフォーム作成練習」に保存するコードと実行結果です。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);
}

今回のは、下記のねこあつめの「なまえ(きっどさん)」と、「あそんだグッズ」をフォームで入力する、テキストアイテムを追加して行きます。

「おなまえ」は入力必須、「グッズ」は任意にします。

「add」は色々なプログラミング言語で「追加」の意味で使われていたのを学びました。

前回のコードに追加するコードは下記2行です。

//テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

簡単にコードの説明を書きますと、addTextItem()でテキスト入力が出来る所を作れて、setTitleで「おなまえ」など、入力する所に名前を付けることが出来ます。
また、setRequired(true)を追記すると、入力必須になります。

上記のコードを追記した、今回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //←テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

}

このコードを実行すると、まずこの様なフォームの雛形が出来ます。

このプレビューを見てみます。
右上の所の「目のマーク」を押します。

「おなまえ」のところ、「*」付いていますね。


フォームが作成されたので、下記のように入力して送信します。

送信して、先ほどの画面に戻ると、

このように、回答が1件集まったことの通知が来ています。
この画面の右側上を見ると、

スプレッドシートのマークが表示されますので、押してみます。

新しいスプレッドシートを選択して、「作成」ボタンを押します。

先ほどのデータがスプレッドシートに蓄積されました。
ご精読ありがとうございました。

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

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

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

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

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム2>GASで作成したフォームを指定のフォルダに格納する

この記事では、GAS(Google Apps Script)を使って、フォームを作って行きます。
今回は、作成したフォームを指定のフォルダに格納するプロパティストアについて見て行きます。お世話になった記事は、いつも隣にITのお仕事さんの、

GASで作成したGoogleフォームを指定のフォルダに移動する方法

です。

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

このようなスプレッドシートを元に、

このようにフォームを作成しました。
そのコードがこちらです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

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

では、今回の内容に入ります。

今ではフォームを作成すると、自動でマイドライブの配下に置かれてしまいましたが、今回から、フォームを作成すると、自動的に指定のフォルダに格納できる処理を下記の手順で行います。

1.Googleフォルダ内に格納するフォルダを用意

2.フォルダIDを調べる

3.フォルダIDをキーと紐付けるコード書いて実行する

4.フォーム作成のコードを実行する

では、順に見ていきます。

1.Googleフォルダ内に格納するフォルダを用意
新規作成または、勉強に使えそうなフォルダを用意します。
「ねこねこフォーム作成練習」と言うフォルダを作りました。

2.フォルダIDを調べる
上の画像のフォルダのアドレスで、モザイクかかっているところがIDです。
このIDを次の工程でキーと紐付けます

3.フォルダIDをキーと紐付けるコード書いて実行する
フォーム作成の前に行います。
GASで新たにファイルを作成して、紐づけをするスクリプトのコードを書きます。
32桁の「XXXXXX…XXXXX」のところにフォルダIDを貼り付けて実行します。

//プロパティストアにフォルダIDを格納する
function setScriptProperty(){
  PropertiesService.getScriptProperties().setProperty('FOLDER_ID','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
}

このように何もログに表示されませんが、FOLDER_IDにX X X X X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXが格納されたことを、下記のプログラムを実行することで確認出来ます。

//プロパティストアにフォルダIDが格納されたことを確認する
function getScriptProperty(){
  const folderid=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
  console.log(folderid);
}

実行結果です。これで無事にプロパティストアにフォルダIDが格納されたことを確認出来ました。実際のIDはモザイクにしています。

4.フォーム作成のコードを実行する
以上の準備が整ったところで下記のコードを実行します。

その前にもう一度前回のコードを表示します。
この、13行目の下に下記4行を追記します。

前回のコード

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

追記するコード

//←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

今回の追記したコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);
}

実行結果です。

無事に格納されているので、これで安心して勉強を進められます。

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

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

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

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

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

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム1>GASで「ねこあつめ親睦会」のフォームを作ってみる

この記事では、GAS(Google Apps Script)を使って、最も簡単な方法でフォームを作って行きます。お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームを作成する最も簡単なスクリプト

です。

そもそもGoogleでフォームが作れるってこと、今日今さっき知ったのですが、大丈夫でしょうか・・・。
不安もありつつ上の記事を見ながら作ってみます。

スプレッドシートのメニューバー「拡張機能」から「Apps Script」を選んで、「ねこあつめのフォームだにゃ(=^x^=)mm」というフォームを作っていきます。

とてもシンプルなコードです。

function myFunction() {
  FormApp.create('ねこあつめのフォームだにゃ(=^x^=)mm');
}

[Command]+[S]で保存して、[Command]+[R]で実行してみます。
(Windowsの方は[control]で。)

実行後、Googleドライブに切り替えてみます。

これをクリックして、

お〜〜〜!!
出来てた!!

では次に、フォームに説明文を加えます。

コードです。

function myFunction() {
  const form=FormApp.create('ねこあつめのフォームだにゃ(=^x^=)mm');
  form.setDescription('説明すると、ねこあつめ大好きなお友達の集まりだにゃ');
}

実行結果です。

うん。良い感じ♪♪♪♪

では、スプレッドシートに入力した内容を元に、フォームを作成していきます。
このように作成し、シート名は「イベント概要」にします。

セルA1を[0][0]とすると、タイトル「ねこあつめ親睦会」は[0][1]、「集まれ!!・・・」以降の説明文は[1][1]になります。

コードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

実行結果です。

ほのぼのって感じ(=^x^=)

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

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

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

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

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

次行くにゃん(=^x^=)→

GAS で「Chatworks」を使ってみる。「ねこあつめシリーズその10」

この記事では、実際にGAS(Google Apps Script)でChatworkにメッセージを送信してみます。
ライブラリにChatworkを追加して、メッセージを送信するコードをGASで実行して、Chatoworkでメッセージを表示させるようにします。
お世話になった記事は

【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法

【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例

です。

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

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

上記の外部リンクを参考にして、ライブラリにスクリプトIDを入れてChatworksに登録して、GASでコードを書いてメッセージを送ってみました。

コードはこちらです。

function testMessage(){
  const cw=ChatWorkClient.factory({token:'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
  const body='テストメッセージにゃん(=^x^=)mm。。。!';
  cw.sendMessageToMyChat(body);  
}

token:’XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’の所に、実際のAPIトークンを入力します。

実行してみます。

お〜〜〜〜!!!

送れています(感動)

3行目のbodyの所に出力するメッセージを色々変えて、調子に乗って送ってみました。

次回からは今までスプレッドシートで作ってきたねこあつめを使ったチャットボットを作って行きます!!

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

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

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

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

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

←前に戻るにゃん         次行くにゃん(=^x^=)→

GAS Web APIその前に(API、HTTP通信、リクエストメソッド、Web API、UrlFetchサービス)「ねこあつめシリーズ:その9」

この記事では、GAS(Google Apps Script)でChatworkを使うための前提知識を学習します。次回の記事でChatworkに実際にメッセージを送るので、この記事ではその予備知識の習得に役立つリンクを貼りました。

お世話になった記事は 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識 です。

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

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

今回は、次回の記事でChatworkを実際に使う前に覚えておいた方が理解が深まる用語のリンクを紹介します。

GoogleのサービスではないChatworkを使うのに必要となるAPI。
ITパスポート基本情報技術者試験の時にお世話になったサイト、
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
のリンクを掲載します。

API

HTTP通信

(HTTP)リクエストメソッド

Web API

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

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

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

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

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

←前に戻るにゃん        次行くにゃん(=^x^=)→

GAS「ねこあつめ」の右端の列をクリアする「ねこあつめシリーズ:その8」

この記事では、GAS(Google Apps Script)を使って指定のセル範囲をクリアする方法が学べます。

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

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


簡単に前回の復習をします。
下のスプレッドシートの図の「済」になっていない所を出力、スプレッドシートのD列を「済」にして、赤枠の範囲をログ出力します。

そのコードとログ出力結果、スプレッドシートです。

function myFunction() {
  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;
    }
  }
}

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

さて、今回もこの様なスプレッドシートを用意します。
このスプレッドシートには、「ねこあつめ」の「おともだち」の情報が載っています。
右端の列は、一番下の「とらきち」のところだけ「済」が空欄になっています。

この状態で下記のコードを実行して、未入力の「とらきち」をログ出力した後、スプレッドシートの全ての「済」を消去します。

コードはこちらになります。

function myFunction() {
  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) {
        ss.getRange(2, 4, lastRow - 1).clearContent();
      }
      break;
    }
  }
}

実行すると「とらきち」が出力され、

スプレッドシートのセルがクリアされました。

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

参考記事: 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法 

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

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

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

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

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

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

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