Google Apps Script入門 | 第18回.組み込み関数を使う | Google Apps Script(GAS)の入門解説です



最終更新日:2016-10-15

第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として加減算できます。
しかし、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入門」の記事

第19回.いろいろな繰り返し処理
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更

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

メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)
セルのコピー&各種ペースト|Google Apps Script入門(11月22日)
Twitter Bot 作成|Google Apps Script応用(11月6日)
Excel流の最終行の取得|Google Apps Script応用(11月6日)
方眼紙Excelが楽に入力できるVBA|ExcelマクロVBAサンプル集(11月5日)
「ポケモンを確実に見つける方法」をExcelで数学してみた|エクセル雑感(11月4日)
スプレッドシート(ブック)の作成・名前変更|Google Apps Script入門(11月4日)
シートの挿入・削除・名前変更|Google Apps Script入門(11月3日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.CSVの読み込み方法|ExcelマクロVBAサンプル集
8.変数とデータ型(Dim)|ExcelマクロVBA入門
9.セル・行・列の削除・挿入(Delete,Insert)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 組み込み関数を使う

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


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



    ↑ PAGE TOP