Google Apps Script入門
組み込み関数を使う

Google Apps Script(GAS)の入門解説です
公開日:2016-10-15 最終更新日:2021-03-06

第18回.組み込み関数を使う


プログラミング言語は多数ありますが、制御文や演算子は極端な違いはなく、
読むだけなら、それほど時間のかかかるものではありません。


しかし実際に書く時に困る理由の一つが、組み込み関数が思うように使えないことです。

制御文や演算子と言ったものは、数も多くなく、英単語の略と記号を数十個覚えれば、ほぼ網羅できてしまいます
※もちろん、奥深い部分の理解が相当に大変なことは、どの言語でも同じことです。

手っ取り早く、その言語を自在に使えるようになるには、
組み込み関数をしっかりと覚える事です。

何ができて、何が出来ないのか

ここを、把握することが重要です。
出来もしないことを延々調べてみたり、組み込み関数があるのに力技で同じことを書いてみたり・・・
まあ、このような経験自体は無駄になるものではありませんが、
そうそう、そんなことをしている訳にもいきませんし、そんな時間の余裕もないでしょう。

かといって、組み込み関数を全部覚えるのも困難です。
ゆうに100以上ありますので、全部をそうそう覚えられるものでもありません。
ひととおり、どんな関数があるかは見ておけば、必要になった時に思い出せるでしょう。
そして、半数ないし三分の一くらいの関数は、実際に書いて動作を確認しておくようにして下さい。
組み込み関数の一覧は、以下のリファレンスを参照してください。

関数プロパティ ・・・ 一般には組み込み関数、VBAではVBA関数に相当します。
数と日付 ・・・ 一般には組み込み関数、VBAではVBA関数に相当します。
Number
Math
Date
テキスト処理 ・・・ 一般には組み込み関数、VBAではVBA関数に相当します。
String
RegExp

ここでは、例題をもとに、簡単に使い方を解説します。



小数を整数に、切り上げ・切捨て・四捨五入

切り上げ:Math.ceil(x)
切捨てMath.floor(x))
四捨五入:Math.round(x))


使用例
var num = 234.56
Browser.msgBox(Math.ceil(num))
Browser.msgBox(Math.floor(num))
Browser.msgBox(Math.round(num))

結果
235
234
235
この順に表示されます。


日付を作成

リファレンスには、
Dateをコンストラクタとして呼び出すことによってのみインスタンス化できます。
と書かれています。
つまりは、new(コンストラクタ)でインスタンスを生成して使うという事です。
※コンストラクタやインスタンスといった用語を直ぐには理解しなくても構いまん。
ずっと先、このGAS入門の後で十分です。
まずは使えるようになることを、ここでは優先します。

今日の日付:new Date()
指定の日付:new Date("2016/10/10")


使用例
Browser.msgBox(new Date())
Browser.msgBox(new Date("2016/10/10"))

結果
Sat Oct 15 2016 17:21:36 GMT+0900 (JST)
Mon Oct 10 2016 00:00:00 GMT+0900 (JST)
この順に表示されます。


日付から、年・月・日を取り出す

年:getFullYear()
月:getMonth()+1)
・・・ getMonthの戻り値は、0~11になります。
日:getDate())


使用例
var date = new Date()
Browser.msgBox(date.getFullYear())
Browser.msgBox(date.getMonth()+1)
Browser.msgBox(date.getDate())

結果
2016
10
15
この順に表示されます。


日数後・月数後・年数後を求める

スプレッドシート上では単純に足し算で求められます>
これはExcelも同じです。1日を1として加減算できます。
しかし、Google Apps Scriptでは、そう言う訳にはいきません。

日数後:setDate(date.getDate() + 日数後の数値)
月数後:setMonth(date.getMonth() + 月数後の数値)
年数後:setFullYear(date.getFullYear() + 年数後の数値)

※数値は、正なら後の日付、負なら前の日付になります。

使用例
var date = new Date()
date.setDate(date.getDate() + 3)
Browser.msgBox(date.getFullYear()+"/"+(date.getMonth()+1)+"/"+date.getDate())
date.setMonth(date.getMonth() + 1)
Browser.msgBox(date.getFullYear()+"/"+(date.getMonth()+1)+"/"+date.getDate())
date.setFullYear(date.getFullYear() + 1)
Browser.msgBox(date.getFullYear()+"/"+(date.getMonth()+1)+"/"+date.getDate())

結果
2016/10/18
2016/11/18
2017/11/18
この順に表示されます。

date.setDate(date.getDate() + 3)
このあたりが、結果を変数に代入しないの???
といった疑問が出るかもしれません。
Dateオブジェクトのメソッドを実行して、Dateオブジェクトが持つ値を変更しているのです。
VBAのRangeオブジェクトのメソッドと同じようなものだと考えて下さい。


大文字小文字の変換

大文字変換:toUpperCase()
小文字変換:toLowerCase()


使用例
var str = "Google Apps Script"
Browser.msgBox(str.toUpperCase())
Browser.msgBox(str.toLowerCase())

結果
GOOGLE APPS SCRIPT
google apps script
この順に表示されます。

※Excelでは、シートでもVBAでも、簡単に全角半角変換が出来ますが・・・
スプレッドシート、Google Apps Scriptでは、簡単には出来ません
文字コードをシフトさせるようなスクリプトを書く必要があります。
このあたりは、今後、応用編にて掲載していきます。


文字列を置換する

文字列の置換:replace(pattern, replacement[, flags])

pattern:文字列またはRegExpオブジェクトです。
replacement:第一引数でマッチした箇所を置き換える文字列
flags:この引数を利用する代わりに、patternにフラグを伴ったRegExpオブジェクトを利用する方法が一般的です。
g :グローバルマッチ
i :大文字と小文字の違いを無視する
m :複数行を越えたマッチ

使用例
var str = "Google Aps Script"
Browser.msgBox(str.replace("Aps","Apps"))

結果
Google Apps Script
と表示されます。

replace
patternに文字列で指定した場合は、最初の1つしか置換されません。
そこで、全てを置換する場合は、flagsを指定するかRegExpオブジェクトを利用します。

※RegExpオブジェクトについては、今後、応用編等で掲載していきます。


文字列から一部を取り出す

substr(start[, length])
指定された位置から指定された文字数の文字を返します。
先頭が0から始まります。
lengthを省略すると、文字列の最後までが返されます。

substring(indexStart[, indexEnd])
indexStartの位置から、indexEnd未満の位置までの文字列が返されます。
先頭が0から始まります。
indexEndを省略すると、文字列の最後までが返されます。


使用例
var str = "Google Apps script"
Browser.msgBox(str.substr(7, 4))
Browser.msgBox(str.substring(7, 12))

結果
Apps
Apps
この順に表示されます。



組み込み関数を使う事自体は、そんなに難しいものではありません。
しかし、ある課題に直面した時、
組み込み関数をどのように組み合わせれば実現できるか・・・
これは、パズルを解くようなもので、いかに知っている知識を総動員するかになります。



文字列系の練習問題

A列のお題に従って、B列のデータを処理し、C列に出力するスクリプトを書いてください。

A B C
1 お題 元データ 結果
2 括弧()内の文字のみ取り出す Google Apps Script(GAS)入門 GAS
3 最後の半角空白以降を取り出す Google Apps Script Script
4 ピリオド(.)の数を数える 192.168.101.255 3


練習問題の回答

function sample18() {
  var ash = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ash.getActiveSheet();
  var str;
  
  //括弧()内の文字のみ取り出す
  str = sheet.getRange(2, 2).getValue();
  str = str.substring(str.indexOf("(")+1,str.indexOf(")"));
  sheet.getRange(2, 3).setValue(str);
  
  //最後の半角空白以降を取り出す
  str = sheet.getRange(3, 2).getValue();
  str = str.substr(str.lastIndexOf(" ")+1);
  sheet.getRange(3, 3).setValue(str);
  
  //ピリオド(.)の数を数える
  str = sheet.getRange(4, 2).getValue();
  var cnt = str.length - str.replace(".","","g").length;
  /* または、
  var cnt = str.length - str.replace(/\./g,"").length;
  */
  sheet.getRange(4, 3).setValue(cnt);
}

ここは、特に解説しません。
自力で読み解く練習をしてください。
replace(/\./g,"")は、正規表現を使っていますので、引数をクォーテーションで囲みません。
RegExpオブジェクトや正規表現については、いずれ応用編に掲載します。


組み込み関数の最後に

実は、組み込み関数を片っ端から覚えていくと、
その過程で、その言語のほぼすべてを学習することになってしまいます。

簡単に説明したこのページでさえ、
コンストラクタ、インスタンス、RegExpオブジェクト
といったものが出てきています。

組み込み関数は、一朝一夕でマスターできるものではありません。
必要に応じて、一つずつ、使える関数を増やしていきましょう。




同じテーマ「Google Apps Script入門」の記事

第15回.複数のスプレッドシートを扱う
第16回.Google Apps Scriptの文法
第17回.JavaScript リファレンス
第18回.組み込み関数を使う
第19回.いろいろな繰り返し処理
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ