Quantcast
Channel: いつも隣にITのお仕事
Viewing all 2074 articles
Browse latest View live

【Outlook VBA】Replyメソッドでメールにワンクリックで返信する方法

$
0
0

返信メールアイキャッチ

皆様こんにちは、ノグチです。

Gmail に、スマートリプライってありますよね。

届いたメールに対して、ワンクリックで定型文をセットした返信メールを作成してくれる機能で、これは便利だなあ、と面倒臭がりの私は重宝しております。

そして思うのです。

これがOutlook でもできたらいいのに…と…

Gmailのスマートリプライは、AIでメールの内容から返信する内容を提案してくれますが、流石にそこまでは厳しそうです

が、ワンクリックで定型文を返信するだけなら、Outlook  VBAにだってできますよ!

ということで今回は、Outlook で、メールにワンクリックで定型文の返信をする方法をご紹介します。

Replyメソッドで返信メールのMailItemオブジェクトを取得する

メールを操作するためのMailItemオブジェクトや、プロパティについては以前の記事でご紹介していますので、こちらを併せてご覧ください。

【エクセルVBA】Outlookでメールを作成・送信する方法
エクセルシートに記入された件名や本文を、エクセルVBAによってOutlookのメールの件名と本文にセットしてメール送信する方法をご紹介しています。VBAでメールの送信ができれば、宛先に応じてメールの本文を変えつつ一斉に送信することもできますよ。

返信メールを操作する為には、元のメールの情報(件名や送信先など)を持った、返信メールのMailItemオブジェクトが必要です。

この返信メールのMailItemオブジェクトを取得してくれるのが、MailItemオブジェクトのReplyメソッド

記述方法はこちら。
MailItemオブジェクト.Reply

返信したいメールのMailItemオブジェクトのReplyメソッドを使うことで、返信元のメールの情報を持った返信メールのMailItemオブジェクトを返してくれます。

返信メールを操作するには、このReplyメソッドが返してくれたMailItemオブジェクトを操作することになります。

MailItemオブジェクトのプロパティで返信メールの中身をセット

Replyメソッドで取得したMailItemオブジェクトのプロパティには、元のメールの情報がセットされています。

例えば、Subjectプロパティには『Re:(元のメールの件名)』がセットされていますし、Toプロパティには返信先のアドレスが既にセットされています。

なので、定型文で返信するだけならBodyプロパティだけ更新すればよいでしょう。

今回は、「了解しました。」というメッセージで返信したいので、Replyメソッドで取得したMailItemオブジェクトのBodyプロパティに「了解しました。」をセットすることにします。

ここまでをコードにしてみると、こんな風になります。

Set objReply = objItem.Reply

With objReply
    .Body = "了解しました。"
    .Send
End With

ワンクリックでメールに返信する

コーディングする内容を整理する

では、Replyメソッドを使って、全体のコーディングをしていきましょう。

コードの中でやることは、主にこの4つです。

  1. 今開いているメールのMailItemオブジェクトを取得する
  2. Replyメソッドで返信メールのMailItemオブジェクトを取得する
  3. 返信メールのMailItemオブジェクトのプロパティに、返信文をセット
  4. Sendメソッドで返信メールを送信する

ワンクリックで返信メールを送信するコード

これらをコードにすると、こんなコードになります。

Sub Auto_Reply()
Dim objItem As Object
Dim objIns As Inspector
Dim objReply As MailItem

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得
Set objReply = objItem.Reply

With objReply
    .Body = "了解しました。"
    .Send
End With

End Sub

ActiveInspectorメソッドとCurrenItemメソッドで今開いているメールのMailItemメソッドを取得して、Replyメソッドで返信メールのMailItemオブジェクトを取得。

返信メールのMailItemオブジェクトのプロパティに、「了解しました。」の文字をセットして、メールを送信するコードです。

返信元メールの本文を残したい場合

上のコードではBodyプロパティに”了解しました。”をセットしています。

この場合、返信元のメール本文はコピーされてこず、Bodyプロパティにセットした”了解です。”だけがメール本文にセットされます。

返信元のメール本文もコピーしておきたい場合は、上のコードのBodyプロパティセット部分を、

.Body = "了解しました。" & .Body

としておけばOK。

また、ワンクリックで返信することを目的としているので、上のコードではいきなりSendメソッドで返信を送っていますが、返信メールを編集したい場合などはSendメソッドの部分をDiplayメソッドに書き換えておくとよいですね。

ワンクリックでメールに返信してみる

さて、こちらのメールを開きつつ…

返信元メール

上のコードを実行してから送信済みフォルダを見てみると…

返信メール

この通り、返信メールが送信されていますね。

もちろんメニューバーにマクロをセット

ワンクリックで返信する、を実現するために、プロシージャをメールのメニューバーにもセットしておきましょう。

プロシージャのメニューバーへのセット方法は前回の記事でご紹介していますので、そちらをご覧ください。

【Outlook VBA】今開いているメールからワンクリックで予定登録画面を開く方法
Outlook VBAで、ワンクリックで今開いているメールの内容を転記した予定登録画面を開く方法をご紹介しています。メールのメニューバーにマクロのプロシージャを表示しておく方法と併せて使えば、メニューのワンクリックで予定登録ができちゃいますよ。

ちなみに、プロシージャをメニューに追加する方法は前回お伝えしましたが、メニューにセットするとき、アイコンの指定と任意の名前をつけることができます。

まず、メールのオプションを開き、リボンのユーザー設定画面を開きます。

左側のリストダウンメニューからマクロを選択し、右側のメニューリストに新しいタブを追加。

その新しいタブにメニューに表示したいマクロを追加します。

ここまでは、前回ご紹介した方法と同じです。
右側のメニューリストに追加したプロシージャを選択して、画面右下にある「名前の変更」をクリックします。
outlookメールオプション
すると、アイコンが沢山並んだ画面が表示されますので、好きなアイコンを選択します。
名前の変更

そしてアイコン群の下にある表示名に、プロシージャにつけたい名前を入力して「OK」をクリック。

オプション画面を閉じて、メールのメニューバーを見てみると…

メニューセット

はい、指定したアイコンと名前で、プロシージャがセットされていますね。

あとはこのアイコンをクリックすれば上のコードが実行されて、返信メールが送信されますよ。

最後に

今回は、Outlook でメールにワンクリックで定型文の返信をする方法をご紹介しました。

AIを使えたらより良いのでしょうが、使わなくても決まりきった文章での返信ってありますよね。

そんなメールには、今回ご紹介した方法で返信の手間を削減してみてはいかがでしょうか。

それでは、最後までお読みいただき有難うございました!


App Makerでスプレッドシートをベースにモデルを作成する方法

$
0
0
box

photo credit: Kentish Plumber Grey Squirrels via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Makerをご存知ですか?

その最大の魅力はドラッグ&ドロップで、フォームやテーブルといったUIを作成できる点です。

また、そしてGASベースなのでそれを経由して様々なGoogleアプリケーションと連携できる点も大きな特徴です。

App Makerとは何か、またその超簡単なアプリケーション開発のイメージをお伝えします
Googleが提供するWebアプリケーション開発プラットフォーム「App Maker」。今回は、App Makerとは何か、またその超簡単なアプリケーション開発のイメージについてお話します。

しかし、残念ながらGoogleドライブ上に作成できるデータベース「Data Tables」が使用できなくなり、データベースの部分に関しては少しハードルが上がってしまいました。

そこを解消するのが、本シリーズ「スプレッドシートをApp Makerのデータベースとして使用してみよう!」です。

まず今回は、App Makerでスプレッドシートをベースにモデルを作成する方法をお伝えします。

データベースの箱を作るイメージですかね。

では、行ってみましょう!

お題:スプレッドシートをApp Makerのデータベースとして活用しよう

例えば、以下のようなスプレッドシートがあったとします。

スプレッドシートの従業員データ

スプレッドシートに従業員データをまとめたものですね(2人しかいませんが…)。

スプレッドシートの編集はちょっと自由すぎるけど、フォームは入力しかできなくて不便だし…みたいなニーズの間くらいのアプリケーションを作りたいということありますよね?

今までは、HTMLを駆使してWebアプリケーションを作る必要があったのですが、そのUIの部分をApp Makerに任せることができるようになったというわけです。

ということで、このスプレッドシートのデータをデータベースとして、App Maker上で閲覧、編集、追加ができるようにしていきたいと思います。

前準備として、以下の記事からはじまるシリーズを終えておくと良いと思います。

App Makerとは何か、またその超簡単なアプリケーション開発のイメージをお伝えします
Googleが提供するWebアプリケーション開発プラットフォーム「App Maker」。今回は、App Makerとは何か、またその超簡単なアプリケーション開発のイメージについてお話します。

また、GAS(とくにスプレッドシートを操作する部分)はある程度わかっていたほうが良いと思いますので、必要であれば以下のシリーズもどうぞ。

【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
超初心者向けにGoogle Apps Scriptのプログラミングの一通りの流れと書き方について学ぶシリーズです。今回は、その最初の一歩としてスプレッドシートからスクリプトエディタを開く手順をお伝えします。

新規のApp Makerアプリを作成する

はい、ではApp Makerで新規のアプリを作成して、その名称を「従業員データベース」などとしましょう。

新規のApp Makerアプリのアプリ名を変更

ちなみに、新規のApp Makerアプリは以下のG Suite Developer Hubの「+新規」から作成できるようになりました。

Apps Script – Google Apps Script

便利になりましたね。

Calculatedモデルを作成する

新規モデルを作成する

続いてモデルを作成していきます。いわゆるApp Makerのデータベース部分です。

左側のDATAの横にある「+」部分をクリックします。

App Makerで新規のモデルを作成する

作成するモデルの種類を選択する

「Create Model」というダイアログが立ち上がり、どの種類のモデルを作るか?と尋ねられるわけですが…

Googleさんのおすすめは「Google Cloud SQL」です。GCPに契約してちょ、ということですね。

ただ、今回はGASがちょっとできるという前提で、慣れ親しんだスプレッドシートを選びます。

その場合、選択肢は「Calculated」となります。

モデルの種類としてCalculatedを選択する

なになに…

Create a calculated model based on a server side script, which can also be used to connect to an external database using JDBC or a REST API.

ふむ…とりあえずJDBCとかREST APIを使って外部のデータベースと接続したりとか、サーバーサイドスクリプトを使った計算モデル、のようです。

「サーバーサイドスクリプト」というのが、いわゆるGASになりますので、それを使ってスプレッドシートから計算したものをデータベースとするというイメージでしょうか。

モデルの名前を設定しフィールドを作る

続いて、「Model name」つまり名前を求められますので、ここでは「EmployeeData」としておきましょう。

それで、小さい文字なのですが見えますかね?

Optionalのところに「IMPORT FIELDS」ボタンをはさんで

Create fields from Google Sheet or CSV. Data in the spreadsheet will not be imported. Only the column headings are imported as fields.

とあります。

つまり、スプレッドシートからデータを持ってこれるわけではないけど、フィールドを作るだけならできるというわけですね。

では、お願いしましょう。「IMPORT FIELDS」をクリック。

モデル名を入力し「IMPORT FIELDS」をクリック

ちなみに、フィールドというのは「列」のことです。

フィールドを定義するというのは、その列の見出しと、格納するデータ型を決めるということになります。

スプレッドシートからフィールドを作成する

続いて、「Create Model from a CSV file or Google Spreadsheet」というダイアログになります。

今回はスプレッドシートを使ってフィールドを作るので「Use a Google Spreadsheet」を選択肢、「SELECT A SPREADSHEET…」をクリックします。

スプレッドシートを選択する

「Choose a spreadsheet to use as template for a model」のダイアログが開きます。

「モデルのテンプレートとして使うスプレッドシートを選択してね」とのことですので、検索などを駆使しながら、前述のスプレッドシート「従業員データ」を選択し「Select」をクリックします。

スプレッドシートを選択する

「Select a sheet」の部分ですが、対象となるシートを選択します。

今回のスプレッドシートには「シート1」しかありませんので、そのままの状態で「NEXT」です。

対象となるシートを選択

次の画面では、選択したスプレッドシートから取り込むフィールドとそのデータ型を確認できます。

問題なければ「CREATE」をクリックします。

フィールドを確認してCREATEをクリック

これで、モデル「EmployeeData」が完成したわけですね。

モデルが作成された

まとめ

以上、App Makerでスプレッドシートをベースとしたモデルを作成する方法をお伝えしました。

ただ、現時点ではフィールドの定義しか作れていませんで、中身のデータはありません。

「Calculated」してあげる必要があります。

次回、その部分を進めていきますよ。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法

App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースとしたアプリケーションの作り方をシリーズでお伝えしております。

その栄えある第1回目だった前回の記事はこちら。

App Makerでスプレッドシートをベースにモデルを作成する方法
Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。今回は、シリーズ初回としてApp Makerでスプレッドシートをベースにモデルを作成する方法をお伝えします。

スプレッドシートをベースにモデルを作成するところまで進めました。

ですが、その作ったモデル(App Makerのデータベース部分)ですが、スプレッドシートをベースとはいえ、そのフィールド名とデータ型を参考に枠組みだけを作った感じなんです。

つまり、中身のデータはまだ存在していません。

そのデータは「クエリスクリプト」と呼ばれるスクリプトを書くことで、スプレッドシートから取得することができます。

ということで、今回はApp Makerでクエリスクリプトでスプレッドシートのデータを取得する方法です。

では、行ってみましょう!

前回のおさらい

前回は、新規のApp Makerアプリを作成して、App Makerのデータベース部分となるモデル「EmployeeData」を作成しました。

モデルが作成された

作成したといっても、まだフィールドとそのデータ型、つまり枠組み部分だけですけどね。

それで、その元となっているスプレッドシートがありまして、それがこちらです。

スプレッドシートの従業員データ

先ほどのフィールドとそのデータ型の定義は、このスプレッドシートからインポートしたものだったんですね。

いったん、フィールドをまとめておきましょう。

フィールド データ型 説明
Name String 従業員名
Email String メールアドレス
HireData Date 入社日
Active Boolean 在職かどうか

それで、今回は上記のスプレッドシートのデータを「クエリスクリプト」を使ってApp Makerのモデルへ取り込む方法をお伝えしていきますよ。

行番号を表すフォールドを追加する

と、その前に、ひとつフィールドを追加しておきましょう。

というのも、スプレッドシートをデータベース代わりにするのですが、そのレコードの行番号が何番目か?といった情報を、App Maker側でも持っていたほうが便利だからです。

では、進めていきましょう。

まず、右側の欄からDATA「EmployeeData」を選択、するとEmployeeDATAの「FIELDS」タブで、フィールド一覧を確認できるはずです。

そこで、オレンジ色の「ADD FIELD」ボタンをクリック!

追加するフィールドの型ですが、行番号を格納するフィールドなので「Number」となります。

App Makerのモデルにフィールドを追加する
追加したフィールドの名前をname欄に設定します。

ここは「Index」などとしておきましょう。

App Makerのフィールド名を設定する

新たに追加したフィールド「Index」ですが、役割的に先頭に置いたほうが良いので、下図に示す部分をつかんでドラッグ…!

一番上に配置しましょう。

App Makerのフィールドを移動する

これで、モデルEmployeeDataのフィールド構成が以下のようになりました。

フィールド データ型 説明
Index Number 行番号
Name String 従業員名
Email String メールアドレス
HireData Date 入社日
Active Boolean 在職かどうか

スプレッドシートのデータを読み込むクエリスクリプト

では、今回の主題である「クエリスクリプト」を作成していきましょう。

DATA「EmployeeData」の「DATASOURCE」タブをクリックします。

すると「EmployeeData」という名前のデータソースがありますので、クリックして展開しましょう。

データソースは文字通り、「データの元」のことですね。

App Makerでクエリスクリプトを書く

クエリスクリプトを記述する

それで、Queryという欄に、データを取得するためのスクリプトを書いていきます。

それをクエリスクリプトといいます。

クエリスクリプトは、サーバーサイドのスクリプトです。つまりGASですね。

今回は以下のようなスクリプトを書きます。

var ss = SpreadsheetApp.openById('***** スプレッドシート「従業員データ」のID *****');
var sheet = ss.getSheets()[0];
var values = sheet.getDataRange().getValues();

var records = [];

for(var i = 1; i < values.length; i++){
  var record = app.models.EmployeeData.newRecord();
  record.Index = i;
  record.Name = values[i][0];
  record.Email = values[i][1];
  record.HireDate = values[i][2];
  record.Active = values[i][3];
  records.push(record);
}

return records;

1行目のopenByIdメソッドの引数ですが、皆さんのスプレッドシートのIDを指定するようにしてくださいね。

では、このスクリプトの動作を確認していくのですが、そのためのページとテーブルを用意しないといけませんね。

ページにテーブルをウィジェットとして配置して、そこに取得したデータを表示させるのです。

ページをリネームする

App Makerでは、ページにテーブルやフォームといった様々なウェジェットを配置してUIを作っていきます。

ですので、まずページが必要です。

左側の欄に既に「NewPage」という空のページがありますので、それを使いましょう。

わかりやすいページ名にリネームしていきますね。

「New Page」の三点リーダーアイコンをクリックするとメニューが表示されますので「Rename」をクリックします。

App Makerのページの三点リーダーメニュー

「Rename Page」というダイアログが表示されますので、今回は「TablePage」としましょうか。

それで「OK」をクリックです。

App Makerのページをリネームする
これでページのリネームは完了です。

テーブルウィジェットを配置する

続いて、このページ「TablePage」にテーブルウィジェットを配置していきます。

左上の「Widgetsアイコン」をクリックすると、色々なウィジェットが表示されます。

その中から「Table」ウィジェットを選択して、画面上にドラッグします。

App MakerのページにTableウィジェットをドラッグ

「Choose datasource」ダイアログが開きますので、ここは「EmployeeData」一択で、「NEXT」ですね。

App MakerのテーブルウィジェットのChoose datasource

続いて「Choose table columns」ダイアログです。

どのカラムを表示するかを決めるのですが、これは全選択のままで「NEXT」でOKですね。

App MakerのテーブルウィジェットのChoose table columns

最後に「More options」ダイアログなのですが、ここは変更できないのでそのまま「FINISH」です。

App MakerのテーブルウィジェットMore options

これでページにテーブルウィジェットを配置完了です。

プレビューをして確認する

では、プレビューをして確認してきましょう。

右上の「PREVIEW」ボタンをクリックします。

App Makerでプレビューをする

プレビューを許可する

初回のプレビューの際には許可のステップを踏む必要があります。

以下のような画面が表示されますので、「REVIEW PERMISSIONS」をクリックして進めていきます。

App Makerの「REVIEW PERMISSIONS」

続く画面でアカウントを選択します。

App Makerのアプリに許可をするアカウントを選択する

次の画面で「許可」をすればOKです。

App Makerのスコープを許可する

スプレッドシートのデータ取得を確認する

許可を終え、クエリスクリプトが正しく記述されていれば、以下のようにスプレッドシートのデータを取得して、テーブルウィジェットに反映することができているはずです。

App Makerのプレビューでスプレッドシートのデータ取得を確認する

まとめ

以上、App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法をお伝えしました。

  1. クエリスクリプトを作成
  2. ページをリネーム
  3. テーブルウィジェットの配置
  4. プレビュー

…とちょっと手順がありましたが、これでスプレッドシートのデータ取得はできました。

次回ですが、クエリスクリプトの中身について解説をしていきます。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法

App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説

$
0
0
records

photo credit: Jonas Hellebuyck Vinyl memories via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースとしたアプリケーションの作り方をお伝えしています。

前回の記事はこちら。

App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
App Makerでスプレッドシートをデータベースとしたアプリケーションの作り方をシリーズでお伝えしております。今回はApp Makerでクエリスクリプトでスプレッドシートのデータを取得する方法です。

モデルを作成して、クエリスクリプトを使ってスプレッドシートのデータを取得する方法をお伝えしました。

これで、スプレッドシートのデータをApp Makerに引っ張ってくることはできるようになったのですが、クエリスクリプト…全然解説していなかったので、何をしているかわかりません…汗

ということで、今回はApp Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説していきますよ。

では、行ってみましょう!

前回のおさらい

では、おさらいからです。

まず、データベースの大元になるスプレッドシートはこちらです。

スプレッドシートの従業員データ

それで、このスプレッドシートをベースにしたフィールド構成+行番号を表すIndexというフィールドを追加した、モデル(App Makerのデータベース)「EmployeeData」を作成しました。

フィールド構成はコチラです。

フィールド データ型 説明
Index Number 行番号
Name String 従業員名
Email String メールアドレス
HireData Date 入社日
Active Boolean 在職かどうか

それで、このモデルのデータソースにデータを取得する方法として、以下のクエリスクリプトを仕込んだのでした。

var ss = SpreadsheetApp.openById('***** スプレッドシート「従業員データ」のID *****');
var sheet = ss.getSheets()[0];
var values = sheet.getDataRange().getValues();

var records = [];

for(var i = 1; i < values.length; i++){
  var record = app.models.EmployeeData.newRecord();
  record.Index = i;
  record.Name = values[i][0];
  record.Email = values[i][1];
  record.HireDate = values[i][2];
  record.Active = values[i][3];
  records.push(record);
}

return records;

GASでスプレッドシートを触ったことがある方なら、前半はわかりますけど、後半はお初な感じの部分も多いですかね…?

ということで、今回はこのスクリプトについて解説していきます。

クエリスクリプトとは

まず、そもそもクエリスクリプトとは何かについてお伝えしておきましょう。

今回のシリーズでは、スプレッドシートをデータベースとしたいため、App Makerのモデルの種類としてCalculatedモデルを採用しました。

Calculatedモデルを使用している場合、サーバーサイドスクリプトを実行することでデータソースにレコードの集合を作成することができます。

そして、そのレコードの集合は、配列として生成してリターンする必要があります。

つまり、クエリスクリプトとは、レコードの集合を配列として生成してデータソースへ渡すサーバーサイドスクリプトのことをいいます。

サーバーサイドスクリプトはつまりGASなので、Spreadsheetサービスを使用してスプレッドシートにアクセスできる…つまり

  1. スプレッドシートの各行のデータからレコードを作成する
  2. レコードを配列化してreturnする

この処理を実現できれば、スプレッドシートのデータをApp Makerのデータソースとして引っ張ってこれるというわけです。

スプレッドシートからデータを取得するクエリスクリプト

では、それを踏まえて前述のクエリスクリプトを解説していきましょう。

スプレッドシートのデータを二次元配列に格納する

まず、1~3行目はおなじみの部分ですね。

var ss = SpreadsheetApp.openById('***** スプレッドシート「従業員データ」のID *****');
var sheet = ss.getSheets()[0];
var values = sheet.getDataRange().getValues();

openByIdメソッドで指定したIDのスプレッドシートを開いて、getSheetsメソッド→getDataRangeメソッド→getValuesメソッドにより、該当のスプレッドシートの1番目のシート上にある全てのデータを二次元配列で取得します。

その二次元配列がvaluesという変数に格納されますね。

レコードの配列をreturn

次に、変数recordsに注目しましょう。

var records = [];

for(var i = 1; i < values.length; i++){
  var record = ~;
    
  //recordについての色々な処理
  
  records.push(record);
}

return records;

空の配列を代入していますので、recordsは配列ということがわかります。

for文のループがありますが、スプレッドシートでいうとデータ行の各行について何らかの処理をします。

そのループの最後に、その配列recordsにあれこれしたrecordをプッシュしています。

これが、いわゆるデータソースのレコードのひとつひとつっぽいですね。

なので、スプレッドシートのデータ行の分だけレコードを作成して、配列recordsに追加されるわけですね。

そして、最終的に配列recordsをreturnしています。

つまり、この配列recordsがクエリスクリプトがリターンすべきレコードの配列ということです。

モデルに新しいレコードを追加する

では、forループ内の以下の部分に注目しましょう。

var record = app.models.EmployeeData.newRecord();

あんまり見たことない感じですね…

App Makerのアプリケーションを表すAppオブジェクト

まず「app」ですが、App Makerのアプリケーションを表すAppクラスのオブジェクトです。

app

このオブジェクトから、App Makerのアプリケーションにアクセスできます。

サーバーサイドスクリプトからアクセスできる…ということが画期的ですね。

Modelオブジェクトを取得する

次に、medelsというプロパティがあります。

このプロパティはApp Makerアプリケーションで定義されているすべてのモデルを含むオブジェクトを返します。

app.models

これで返されるオブジェクトは、モデル名をキーとすることで、個々のモデルを表すModelオブジェクトを取り出すことができます。

なので、ドット記法でモデル名「EmployeeData」を指定しているんですね。

モデルに新しいレコードを作成する

そして、最後そのModelオブジェクトに対して、newRecordメソッドです。

Modelオブジェクト.newRecord()

モデルに新しいレコードを作成して返します。

レコードはRecordオブジェクトとして操作をすることができます。

Recordオブジェクトの各フィールドを設定する

では、以下の部分を見ていきましょう。

record.Index = i;
record.Name = values[i][0];
record.Email = values[i][1];
record.HireDate = values[i][2];
record.Active = values[i][3];

newRecordメソッドで作成したRecordオブジェクトの操作をしていますね。

もうなんとなくお分かりと思いますが、Recordオブジェクトに続いてピリオド、そしてフィールド名で、そのレコードのフィールドにアクセスできます。

Recordオブジェクト.フィールド名

これで、スプレッドシートの各列の値を、レコードのフィールドにセットしていっているわけです。

まとめ

これで以上ですね。

App Makerでスプレッドシートからデータを取得するクエリスクリプトの解説をしてきました。

App Makerのオブジェクト構造について、モデル周りについては

  1. Appオブジェクト
  2. Modelオブジェクトのオブジェクト(モデル名をキーにして取り出せる)
  3. Recordオブジェクト

という形になっているのがわかりましたね。

次回ですが、フォームウィジェットを使ってUIで操作できるようにしていきたいと思います。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説

App Makerで新しいページとフォームウィジェットを配置する方法

$
0
0
form

photo credit: mlckeeperkeeper Scavenging via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方についてシリーズでお伝えしています。

前回の記事はこちら。

App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
App Makerでスプレッドシートをデータベースとしたアプリケーションの作り方をお伝えしています。今回はApp Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説していきます。

スプレッドシートのデータを取得するクエリスクリプトについて解説をしました。

さて、スプレッドシートをデータベースにするということは、スプレッドシートからデータを取得してくるだけでなく、App Makerからの操作でスプレッドシートのデータを更新できないとですよね。

その部分を何回かでつくっていきたいと思います。

まず手始めとしては、データを更新するためのUIになるフォームウィジェットについて紹介していきます。

ということで、今回はApp Makerで新しいページにフォームウィジェットを配置する方法です。

では、行ってみましょう!

前回までのおさらい

まず、App Makerのデータベースとして使用するスプレッドシートはこちらです。

スプレッドシートの従業員データ

このスプレッドシートからデータを取得できるように、App Makerには以下のフィールド構成のCalculatedモデルを用意しました。

フィールド データ型 説明
Index Number 行番号
Name String 従業員名
Email String メールアドレス
HireData Date 入社日
Active Boolean 在職かどうか

そのモデルのデータソースに以下のクエリスクリプトを記述して、スプレッドシートのデータからレコードを生成します。

var ss = SpreadsheetApp.openById('***** スプレッドシート「従業員データ」のID *****');
var sheet = ss.getSheets()[0];
var values = sheet.getDataRange().getValues();

var records = [];

for(var i = 1; i < values.length; i++){
  var record = app.models.EmployeeData.newRecord();
  record.Index = i;
  record.Name = values[i][0];
  record.Email = values[i][1];
  record.HireDate = values[i][2];
  record.Active = values[i][3];
  records.push(record);
}

return records;

さらに、そのデータソースをApp MakerのTablePageに配置したテーブルウィジェットで表示する、というところまで進めました。

今回は、別のページにフォームとボタンを配置していきます。

新たなページを追加する

現在、テーブルを配置しているページ「TablePage」がありますが、それとは別にフォームやボタンを配置してするための別のページ「EditPage」を新たに作ります。

そうなんです、App Makerではアプリケーション内に複数のページを持つことができます。

まず、左側の「PAGES」にカーソルを当てると「+」アイコンが表示されますので、クリックします。

App Makerでページを追加する

「Create Page, Page Fragment, or Popup」というダイアログが表示されます、作成するページの種類を選択するのですが、今回は通常のページなので「Page」を選択したまま「NEXT」です。

App Makerで作成するページの種類を選択

続く「Create Page」の画面では、ページ名を入力します。page nameを「EditPage」として「CREATE」です。

このpage nameはスクリプト内でも使いますので、記号なしのアルファベットがいいですね。

App Makerでページ名を入力して作成する

これで、ページ「EditPage」が完成です。

フォームウィジェットを配置する

作成したページ「EditPage」にフォームウィジェットを設置していきましょう。

「EditPage」を開いている状態で、Widgetsアイコンをクリックします。

ウィジェット一覧が表示されますので、「Form」ウィジェットを画面上にドラッグします。

App MakerでページにFormウィジェットを配置する

するとまず、「Choose datasorce」というダイアログが表示されます。

連携するデータソースを選ぶのですが、ここは「EmployeeData」一択なので、そのままで「NEXT」です。

App MakerでFormウィジェットと連携するデータソースを選択する

続く「Choose form type」の画面でフォームのタイプを選択するのですが、ここも「Edit」一択ですので、そのまま「NEXT」。

App MakerでFormウィジェットのタイプを選択する

さらに「Choose table column」の画面ですが、フォームに使用するフィールドを選択します。ここも、そのままで「FINISH」でOKです。

App MakerでFormウィジェットのフィールドを選択する

プレビューをしてフォームを確認する

これで、フォームウィジェットの配置が完了しましたので、プレビューをしてフォームの確認をしましょう。

右上の「PREVIEW」ボタンでしたね。

App Makerでプレビューをする

すると、以下のようにページ「EditPage」にフォームが表示されていることが確認できます。

App Makerでフォームウィジェットを確認する

「<」や「>」ボタンで、レコードを移動できます。

でも、現時点では各フィールドの内容は閲覧するだけで、編集はできませんね。

まとめ

以上、App Makerで新しいページにフォームウィジェットを配置する方法についてお伝えしました。

App Makerのウィジェットのメインは前回まで紹介したテーブルと、今回紹介したフォームの2つになります。

その上に、ボックスやらボタンやら配置していく…ということになりますね。

次回は、レコードのクリックとボタン操作でページを移動するようにしていきたいと思います。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説

学んだら講師を目指そう!プログラミング講座開催のA to Z

$
0
0
teach

photo credit: classroomcamera DSC03567 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「ノンプログラマーのためのスキルアップ研究会」は、ノンプログラマーがプログラミングをはじめとするITスキルを学び合うコミュニティです。

さて、ここ最近ですが、コミュニティ内限定で開催するプログラミング講座という取り組みをはじめております。

以下が、第1期の講座と発表会のレポートです。

コミュニティ内で初心者向けプログラミング講座を開催してどうだったか
このたび、「ノンプロ研プログラミング初心者講座第一期」が無事終了しました。先日の定例会で受講者の皆さんにその成果をLT形式で発表をしていただきました。今回はその発表会を受けてのレポートをお送りします。

これまで、私タカハシが講師をしていたのですが、コミュニティ内にも十分な人望とスキルがある方がいっぱいいらっしゃいますので、ぜひお願いしたく…!

ということで、先日の定例会は「『教えて二度学ぶ!』 ノンプロ研講座開催のA to Z」をテーマにお送りしました。

本記事はそのレポートとなります。

ちなみに、いつものように定例会のツイートを以下Togetterでまとめておりますので、合わせてご覧ください。

ノンプロ研定例会Vol.18「『教えて二度学ぶ!』 ノンプロ研講座開催のA to Z」
ノンプロ研ではハンズオンや初心者講座など、実践的なプログラミング講座も開催してきました。ただ、現在開催しているほか- GAS×Slack連携講座- 初心者向けPython講座- 中級者向けGAS・..

では、行ってみましょう!

初心者講座第一期の成果報告

まずは、2019年2月から2019年4月にかけて開催した初心者講座GASコース・VBAコースの成果報告からお伝えします。

開催概要については、以下のページをご覧ください。

コミュニティ連携型!初心者向けプログラミング講座開講のお知らせ
コミュニティ「ノンプログラマーのためのスキルアップ研究会」と連携した、VBAおよびGoogle Apps Script初心者講座(全6回)を開催させていただくことになりましたのでお知らせします。

成果報告:定量編

まず、初心者講座の成果報告定量編ですが、以下表にまとめました。

GASコース VBAコース
受講者数 20名(うち大阪5名) 10名
コミュニティ継続率 90% 100%
スライド数 377ページ 389ページ
演習数 73問 84問

驚くべきは、コミュニティの継続率なのですが、9割以上の方が現在でも継続されているんですね。

これは大変素晴らしいことで、コミュニティの活動状態が良いことはもちろんなのですが、この講座がコミュニティに入るきっかけとして、すごく良い役割を果たしてくれているという印象があります。

成果報告:定性編

定性編です。皆さんのツイートなどで拝見したポジティブな意見として、以下のようなものがありました。

  • 一緒に学ぶ仲間ができた
  • 社内でも勉強会をしてます!
  • 解説・写経・宿題のバランスが良かった
  • ネットのコードが読めるようになった
  • 他の人の質問や回答が役に立った
  • TAさんありがとうございます!

ありがたいご意見が多く…感動しますね…!

TAさんというのは「ティーチング・アシスタント」で、当日の会場で受講者からの質問に対応いただいたり、Slackでフォローしたりといったアシスタントをしてくださる役割の方です。

成果報告:課題

ただ一方で課題もありまして、今回はGASコースとVBAコースを並行して実施してしまったので、両方共受講された方はかなりキツかったようです。

そして、両方共講師をした私も実にキツかった…

講座の各回の間はSlackで質疑応答やフォローなどをするのですが、個人的にはその部分も手薄になったなと感じています(TAさんがすごくフォローしてくださっていました)。

ということで、次回以降は、私はダブル講師をしないようにしないとな…

ただ、一方でコミュニティ内からは

  • GAS×Slack連携講座
  • 初心者向けPython講座
  • 中級者向けGAS・VBA講座

などなど、いろいろな講座を開催してほしいという声もありますし、また初心者講座も第二期、第三期…これももちろん継続的に行いたい。

と、このような悩みを解決すべく、コミュニティの皆さんにも講師をしていただこう!ということになりました。

あ、もちろん収支に応じて、副収入が得られます(大丈夫化?というくらい、けっこう奮発…!)。

講座のやることリストAtoZ

プログラミング講座を開催するダンドリとしては、おおまかに以下のような4パートに分かれます。

  1. 企画:講座の内容を決める
  2. 準備:講座の開催準備や告知をする
  3. 当日:講座を行う
  4. 事後:レポートや事後フォローを行う

当日のプレゼンや、そのためのスライドの準備などに目が行きがちですが、それ以外の事務的な作業も山ほど発生しますし、成功に導くためには企画が非常に重要です。

成功のポイントは企画

講座を成功させるために最も大事なポイントは…

講座成功のポイントは赤字にならないこと

そうなんです、「赤字」にしないことです。

いくらプログラミングのスキルが高くても、赤字だと継続的に取り組みを行えません。

幸い、ノンプロ研はコミュニティなので、内部でニーズのヒアリングができますし、外部に対しても「仮申込フォーム」を用意して、申し込みが一定数に達しそうかどうかを判断できます。

また、「教えることは二度学ぶこと」なので、講師自身も大きな学びがあります。

なので、慣れきっている分野について講師をするよりも、確実に固めたいと思っている分野とか少し隣の分野などに背伸びをして企画をするというのも、本人にとってのメリットが大きいです。

人前に話すので、相当シビアに準備がいりますからね…!

準備は作業量との勝負

いざ開催となったら、以下のように大量の準備作業が発生します。

  1. 会場確保→スケジュール決定
  2. 申し込みページ作成、告知
  3. 仮申込の皆さんへメールで連絡
  4. Slackで告知
  5. TAさんの手配
  6. 申し込み管理
  7. 事前課題の準備
  8. スライドの準備

スライドも2時間分なのでそれなりのボリュームなのですが、それだけではなくてたくさんの事務作業が発生します。

ノンプロ研内の講座であれば、1~6まではほぼ弊社(というかタカハシ)のほうで担当しますので、皆さんは7,8に集中できます。

(羨ましい…)

事前課題はちょっと鬼くらいで

初心者講座では、事前課題は2週間ほど前にかなりの量を投下しました。

すぐに着手しないと終わらないくらいのボリュームです。

これには、以下のような狙いがあります。

  • 自分でできることは自分で。講座でしかできないことにフォーカスする
  • 習慣化の覚悟を決めてもらう
  • 実行環境不備・不慣れのロスを減らす

プログラミングは講座を受講するだけではなく、皆さんが習慣的に学習時間をとって学ぶ必要がありますので、それを強く意識してもらいたいのです。

写経と宿題の役割

実際の講座では、解説→写経→確認というサイクルをワリとコンパクトに回しながら進めます。

写経を頻繁に入れることで、リズムが作れますし、眠くなったり・気が逸れたりすることを防げます。

また、プログラミングの理解のためには、写経だけではなくて

  • 整数を与えると偶数かどうかを判定して返す関数を作る
  • FizzBuzz問題

などといった、ロジックを考える演習へのトライも必要です。

ただ、この種の考える演習は、人によって回答時間が大きく差がでるので、全て「宿題」にしています。

なので、プライベートでの学習が辛いのですが、そこはSlackでコミュニティメンバーの支えを頼りにすることができます。

講師やろうよ!

私は独立してから「日本の『働く』の価値を上げる」というミッションを持って活動をしています。

コミュニティでの活動や、そこで開催した講座は、そういう意味では非常に手応えのあるものだったのですが、残念ながら一人でできることは本当に少ないわけで…

一方で、受講者として参加された方が、次はTAをやってみて、さらにTAで雰囲気をつかんだら講師にトライというような以下のような流れがあります。

講師を成長の流れ

これを、私以外のたくさんの人が辿れるようにして、また何回も辿れるようにしたら、ミッションの達成に近づくぞ!と思うわけです。

ということで、ぜひ皆さんの積極的な自薦・他薦をお待ちしております!

まとめ

以上、「ノンプロ研で一緒に講師をやろうよ!」という話でした。

あと、ちょっとした夢として、以下のようなものもあります。

  • 講座の開講を東京以外の全国で開催したい
  • イベントや講座が定期的に開催されるノンプロ研専用のスペースがほしい

こんな夢に、興味がある方はぜひともお力添えいただければと思います!

「ノンプログラマーのためのスキルアップ研究会」について

コミュニティ「ノンプログラマーのためのスキルアップ研究会」では、毎月の定例会や勉強会、Slackでのやり取りを通して、皆さんのプログラミング学習の質やモチベーションを高めるための活動をしています。 過去の活動については、以下のページをご覧ください。
コミュニティ「ノンプログラマーのためのスキルアップ研究会」の活動レポートまとめ
コミュニティ「ノンプログラマーのためのスキルアップ研究会」(略して「ノンプロ研」)。このページはその活動レポートまとめページです。コミュニティ活動の一気読みをされたい方、ぜひご活用くださいませ。
ぜひ、皆様のご参加をお待ちしております!
コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ #ノンプロ研
ノンプログラマーがVBA・GAS・Pythonなどのプログラミングを学ぶコミュニティ「ノンプログラマーのためのスキルアップ研究会」が絶賛活動中です!本ページはコミュニティの情報発信をしていく特集ページです。

まとめ

どうぞお楽しみに!

「ノンプログラマーのためのスキルアップ研究会」について

コミュニティ「ノンプログラマーのためのスキルアップ研究会」では、毎月の定例会や勉強会、Slackでのやり取りを通して、皆さんのプログラミング学習の質やモチベーションを高めるための活動をしています。 過去の活動については、以下のページをご覧ください。
コミュニティ「ノンプログラマーのためのスキルアップ研究会」の活動レポートまとめ
コミュニティ「ノンプログラマーのためのスキルアップ研究会」(略して「ノンプロ研」)。このページはその活動レポートまとめページです。コミュニティ活動の一気読みをされたい方、ぜひご活用くださいませ。
ぜひ、皆様のご参加をお待ちしております!
コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ #ノンプロ研
ノンプログラマーがVBA・GAS・Pythonなどのプログラミングを学ぶコミュニティ「ノンプログラマーのためのスキルアップ研究会」が絶賛活動中です!本ページはコミュニティの情報発信をしていく特集ページです。

【Outlook VBA】Moveメソッドでメールを指定のフォルダに移動させる方法

$
0
0

outlook,メールを移動する

皆様こんにちは、ノグチです。

前回の記事では、MailItemオブジェクトのReplyメソッドを使って、ワンクリックで定型文でのメール返信をする方法をご紹介しました。

【Outlook VBA】Replyメソッドでメールにワンクリックで返信する方法
Outlook VBAで、今開いているメールにワンクリックで定型文の返信メールを送信する方法をご紹介しています。特別な文章を書くまでもない、でも返信しないのは…という場合に、「了解しました。」などの定型文を送信できるようにしておけば、ワンクリックで返信できますよ。

メールは、読んだら即返信するのが理想とはいえ、今手が離せなかったり、調べてからでないと返信できないこともありますよね。

でも、返信するまで放置するのも忍びないので、取り敢えず「後で詳細メールします」といった返信をしておきつつ、そのまま忘れてしまう、ということもありがちです。

では、返信が必要なメールは一箇所に集めておいて、そこを見れば返信が必要なメールがあることが分かるようにしておくのはどうでしょう?

ということで今回は、メールを指定のフォルダに移動させる方法をご紹介します!

Moveメソッドでメールを指定フォルダに移動させる

Moveメソッドの記述方法

メールを指定のフォルダに移動してくれるのが、MailItemオブジェクトのMove メソッドです。

記述方法はこちら。

MailItemオブジェクト.Move (移動先フォルダのFolderオブジェクト)

単純ですね。

パラメーターは、移動先にしたい受信フォルダのFolderオブジェクトを指定します。

“フォルダー名”のように指定してもエラーになりますので、ご注意を!

メールの移動先フォルダを準備する

今開いているメールをMoveメソッドで「要返信」というフォルダに格納してみましょう。

まずは受信フォルダのサブフォルダに、「要返信」フォルダを作っておきます。

そして、このフォルダのFolderオブジェクトを取得しておきましょう。

Sub Get_Folder()
Dim myNameSpace As NameSpace
Dim myInbox As Folder

Set myNameSpace = GetNamespace("MAPI")

Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")

End Sub

FolderオブジェクトやNameSpaceオブジェクトについては、こちらの記事でご紹介していますので、併せてご覧ください。

【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
GetNameSpaceメソッドでOutlookのデータフォルダにアクセスする方法をご紹介しています。このメソッドでOutlookのNameSpaceオブジェクトを取得すれば、メール、連絡先、予定表などのデータフォルダにアクセスして、更にその中のデータを読込んだり、エクセルシートに書き出したりすることができますよ。

今開いているメールのMailItemオブジェクトを取得する

お次は、移動させるメールのMailItemオブジェクトを取得します。

今開いているメールのMailItemオブジェクトを取得するには、ApplicationオブジェクトのActiveInspectorメソッドと、CrrentItemプロパティを使うのでしたね。

【Outlook VBA】CurrentItemプロパティで今開いているメールのMailItemオブジェクトを取得する方法
Outlook VBAで、今開いているメールの添付ファイルをワンクリックで任意のフォルダに保存する方法を5ステップにわけて、連載記事でご紹介しています。今回は、InspectorオブジェクトのCurrentItemプロパティによるMailItemオブジェクトの取得についての説明です。
コードはこうなります。
Sub Get_Mail()
Dim objMail As Object
Dim objIns As Inspector

Set objIns = Application.ActiveInspector
Set objMail = objIns.CurrentItem   '今開いているメールオブジェクトを取得

End Sub

Moveメソッドでメールを指定フォルダに移動させる

最後に、今回の主役、Moveメソッドを入れましょう。

上ふたつのコードを組み合わせ、最後にMoveメソッドを入れてあげれば完成です。

Sub Move_Mail()
Dim objItem As Object
Dim objIns As Inspector
Dim myNameSpace As NameSpace
Dim myInbox As Folder

Set myNameSpace = GetNamespace("MAPI")

Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得

objItem.Move myInbox

End Sub
では早速、こちらのメールを開いて上のコードを実行してみましょう。
outlook,返信元メール

そして、先ほど作成した「要返信」フォルダを覗いてみると…

outlook、フォルダ,移動

この通り、メールが「要返信」フォルダへ移動されていますね。

ワンクリックで定型文の返信を送りつつメールを指定フォルダに移動する

メールを受け取ったとき、予定を調整したり、確認しないとそのメールに対して明確な返信ができないな…なんていうときに、とりあえず「確認して連絡します。」というメールを送ったりすること、ありますよね。

そういう場合、上のコードと前回のワンクリックで定型文で返信する方法を組み合わせて、とりあえずの返信をしつつ、返信が必要なフォルダに移動させておけば便利です。

Moveメソッドを前回の記事でご紹介したコードに加えれば、ワンクリックでメールに返信しつつ、メールを「要返信」というフォルダに移動させることができますよ。

前回の記事でご紹介したReplyメソッドを上のコードに差し込みます。

返信メールの文面は、「予定を確認後連絡します。」としておきましょう。

するとこんなコードになります。

Sub Reply_and_Move_Mail()
Dim objItem As Object
Dim objIns As Inspector
Dim myNameSpace As NameSpace
Dim myInbox As Folder
Dim objReoly As Object

Set myNameSpace = GetNamespace("MAPI")

Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得
Set objReply = objItem.Reply

With objReply
    .Body = "予定を確認後連絡します。" & .Body
    .Send
End With

objItem.Move myInbox

End Sub
これで、メールに返信しつつ、返信元メールを「要返信」フォルダに移動させることができますよ。

メールに返信したら「要返信」フォルダから移動させるのを忘れずに

返信が必要なメールを「要返信」フォルダに移動させる方法をご紹介していますが、移動させたあとにメールの返信をした場合は、返信元メールを受信ボックスなり、他のフォルダに移しておくようにしましょう。

そのままにしておくと、結局どれが要返信メールなのかわからなくなってしまいますからね。

「要返信」フォルダから他のフォルダへメールを移動させる場合にも、Moveメソッドを使えばワンクリックでメールが移動できますよ。

最後に

今回は、Moveメソッドを使ってメールを指定フォルダへ移動させる方法をご紹介しました。

Outlookの機能である自動振り分けでは振り分けられなかったり、自分がメールの内容を忘れないように、一旦別のフォルダに移したい…なんていうときに使えますよ。

それでは最後までお読みいただきありがとうございました!

App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法

$
0
0
click

photo credit: lacygentlywaftingcurtains Is This Thing Working? *Click* (83/365) via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerで新しいページとフォームウィジェットを配置する方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方についてシリーズでお伝えしています。今回はApp Makerで新しいページとフォームウィジェットを配置する方法をお伝えします。

App Makerで新しいページとフォームウィジェットを設置する方法をお伝えしました。

今回は、App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法です。

では、行ってみましょう!

前回までのおさらい

では、前回までのおさらいから…

データの元となるスプレッドシートはこちらです。

スプレッドシートの従業員データ

App MakerのデータベースつまりモデルをCalculatedモデルで作成して、クエリスクリプトを介してスプレッドシートのデータを取得するようにしております。

App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
App Makerでスプレッドシートをデータベースとしたアプリケーションの作り方をシリーズでお伝えしております。今回はApp Makerでクエリスクリプトでスプレッドシートのデータを取得する方法です。

それを、ページTablePage上のテーブルウィジェットで表示できるように設定しております。

App Makerのプレビューでスプレッドシートのデータ取得を確認する

そして、前回。

もう一つ別のページであるEditPageを作成して、そこにフォームウィジェットを配置しました。

App Makerで新しいページとフォームウィジェットを配置する方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方についてシリーズでお伝えしています。今回はApp Makerで新しいページとフォームウィジェットを配置する方法をお伝えします。

以下がそのイメージです。

App Makerでフォームウィジェットを確認する

今回は、TablePageのテーブル行をクリックしたら、EditPageに遷移するようにonClickイベントを仕込んでいきたいと思います。

これは…ノンコーディグで簡単に設置できちゃうんです。

テーブル行を選択する

まず、ページTablePageを開いて、テーブル行をクリックして選択します。

すると、テーブル行に水色の枠がつきますね。

また、上部に「Panel: TablePage>Panel: Table1>List: Table1Body>Panel: Table1Row」という表示ありますね。

ここで、今選択している要素が「Table1Row」という名前だということがわかります。

App Makerのテーブル行を選択

すると、右側の「Property Editor」という部分に、「Table1Row」の設定内容が表示されるはずです。

プロパティエディターでイベントを設定する

プロパティエディターとは

このプロパティエディターですが、現在選択されている要素の様々な「プロパティ」を設定することができます。

プロパティエディター内の「Panel」「Performance Settings」「Layout」などをクリックすると、展開して開いたり、閉じたりすることができます。

これらは、いくつかのプロパティをまとめたグループということで、プロパティグループといいます。

onClickイベントを設定する

その中から「Events」を展開します。このグループには、この要素に対する様々なイベントが起きたときの動作を設定するものです。

「onClick」という種類のイベントがありますが、これが「クリックされたとき」の動作を設定するものです。

つまり、onClickイベントの動作としてフォームを表示するように設定すれば良いわけですね。

onClickイベントの「None」という部分をクリックします。

すると、プルダウンリストが表示されますので「Navigate to Page…」→「EditPage」とたどっていきます。

App MakerでonClickイベントを設定する

実はこれで設定完了です。

onClickイベントの動作確認をする

では、TablePageをPREVIEWをして、onClickイベントの動作確認をしていきましょう。

プレビュー画面でいずれかのテーブル行をクリックすると…

App Makerでテーブル行をクリック

EditPageに遷移します。

App MakerでEditPageに遷移した

表示されているレコードも、クリックしたテーブル行のレコードであることに注目してください。

まとめ

以上、App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法をお伝えしました。

このように、ウィジェット上のある要素をクリックしたら…というイベントの動作も簡単に設定可能です。

しかも、今回の内容であればプロパティエディターで設定するだけで、ノンコーディングでしたね…。

次回は、ボタンウィジェットを設置してそのクリックイベントを設定していきます。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法

App Makerでボタンウィジェットを設置してクリックで動作させる方法

$
0
0

buttons

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法をお伝えしていきます。

テーブル行をクリックしたときのonClickイベントで動作させる方法をお伝えしました。

今回は、onClickイベントつながりで…ボタンを使います!

App Makerでボタンウィジェットを設置してクリックで動作させる方法をお伝えします。

では、行ってみましょう!

前回までのおさらい

さて、シリーズ全体としては、以下のようなスプレッドシートをデータベースとするApp Makerのアプリケーションを作っていきたいと考えています。

スプレッドシートの従業員データ

これらのデータを取得して、App MakerのページTablePage上のテーブルウィジェットに反映するようにしているんですね。

そして、前回はそのテーブルの行をクリックすると…

App Makerでテーブル行をクリック

EditPageという別ページのフォームウィジェットが表示されるように、イベントによる動作を仕込んだのでした。

App MakerでEditPageに遷移した

ただ、TablePageからEditPageに遷移するのはいいのですが、逆にEditPageからTablePageに戻る方法がないんですね…

ということで、今回はその遷移をボタンを配置してできるようにしていこう!というものになります。

ボタンウィジェットを設置する

それでは、ボタンウィジェットを配置していきましょう。

ボタンを配置するのはEditPageなので、App MakerでEditPageを開きます。

左上の「Widgetsアイコン」をクリックして、Buttonウィジェットをフォーム上にドラッグしましょう。

App MakerでButtonウィジェットをドラッグ

ボタンにonClickイベントを設定する

ドラッグをしたら、その配置したボタンについてプロパティエディターの「Button」グループの各設定について、以下のように設定をしていきます。

  • name: ButtonBack
  • text: Back
  • onClick: Navigate to TablePage

App Makerでボタンのプロパティを設定する

これで、ボタンの表示が「BACK」になり、onClickイベントつまりクリックした際に、Table Pageに遷移するようになったはずです。

こちらもノンコーディングで設定できましたね。

ちなみに、Buttonウィジェットの場合は、ButtonグループもonClickイベントがありますし、前回のTableRowと同様にEventsグループ内にもonClickイベントがあります。

どちらを設定しても良いみたいです。

ボタンのonClickイベントの動作を確認する

では、ボタンウィジェットのonClickイベントの動作確認をしていきましょう。

EditPageをPREVIEWします。

「BACK」ボタンがありますのでクリック…!

App Makerでボタンをクリックする

すると、以下のようにTablePageに無事に遷移します。

App Makerでページを遷移した

これで、TablePageとEditPageとの行き来ができるようになりましたね。

まとめ

以上、App Makerでボタンウィジェットを設置してクリックで動作させる方法をお伝えしました。

ウィジェットの設置方法と、プロパティエディターの設定方法がわかれば問題ないですね。

時間は、ボタンクリックでJavaScriptを動作させる方法をお伝えしていきます。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法

【Outlook VBA】QuitイベントでOutlook終了時にメッセージを表示する

$
0
0
outlook,quit,eyecatch

皆様こんにちは、ノグチです。

前回の記事で、返信が必要なメールを「要返信」というフォルダに移動させる方法をご紹介しました。

【Outlook VBA】Moveメソッドでメールを指定のフォルダに移動させる方法
Outlook VBAで、Moveメソッドを使った今開いているメールをワンクリックで指定のフォルダへ移動する方法をご紹介しています。移動させたいメールを、移動先のフォルダへドラッグ&ドロップ…なんてしなくても、この方法ならワンクリックで移動させることができますよ。

しかし、返信が必要なメールをフォルダに移動させたは良いけれど、移動させたっきりではそのまま返信を忘れてしまうかもしれませんよね。

一日のお仕事が終わってPCを閉じた途端に、「しまった!あのメール返信してない!」と思い出すこともあるかもしれませんし、最悪翌朝Outlookを立ち上げた時に思い出したりするかもしれません。

せめて、Outlookを終了するときに「まだ返信していないメールがあるよ」というメッセージが表示されれば、返信忘れを防げるかもしれないのに…

ということで今回は、Quitイベントで、Outlook終了時に特定のフォルダにメールがあったら、メッセージを表示する方法をご紹介します!

Outlook終了時に実行されるQuitイベント

これまで、Outlookのイベントもいくつか紹介してきましたね。

今回ご紹介するのは、Quitイベントです。

Quitイベントは、その名の通り、Outlookが終了するときに実行されるイベントです。

Outlook終了時に何か処理をさせたい場合、このQuitイベントのイベントプロシージャにコードを差し込んでいきます。

イベントをVBEでコーディングする方法は、こちらの記事でご紹介していますので併せてご覧ください。

【Outlook VBA】イベントApplication_Startupで起動時に今日の予定を表示する方法
Outlook の起動時イベントApplication_Startupに処理を書き込むことで、Outlookを立ち上げた時に今日の予定を取得してメッセージを表示する方法をご紹介しています。これなら、毎日の予定がOutlook起動時に把握できますよ。

QuitイベントでOutlook終了時にメッセージを表示する

では早速、QuitイベントでOutlook終了時にメッセージを表示してみましょう。

コードはとっても単純。

Private Sub Application_Quit()
    MsgBox "Outlookを終了します。"
End Sub

Quitのイベントプロシージャに、MsgBox関数を差し込んだだけです。

このコードを保存して、Outlookを終了させてみると…

quit,メッセージ

この通り、メッセージが表示されますね。

Outlook終了時に要返信フォルダにメールがあったらメッセージを表示する

では、このQuitイベントで、特定のフォルダにメールがあったらメッセージを表示してみましょう。

フォルダは、前回記事でご紹介した、「要返信」のフォルダにします。

コードはこちら。

Private Sub Application_Quit()
Dim objItem As Object
Dim objIns As Inspector
Dim myNameSpace As NameSpace
Dim myInbox As Folder

Set myNameSpace = GetNamespace("MAPI")
Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")

If myInbox.Items.Count > 0 Then
    MsgBox "要返信フォルダにメールが残っています。"
End If

End Sub

GetNameSpaceメソッドでNameSpaceオブジェクトを取得し、GetDefaultFolderメソッドとFoldersオブジェクトのItemメソッドで「要返信」フォルダのFolderオブジェクトを取得。

「要返信」フォルダ内にメールがあったら、メッセージを表示する、というコードです。

早速実行してみましょう。

このように、要返信フォルダにメールを入れておいて、

要返信,フォルダ
コードを実行してみると…
メッセージ,Quit,メール残り
この通り、メッセージが表示されました!

Outlook終了をキャンセルすることはできない

Quitイベントですが、残念なことがひとつ。

それは、イベントの引数にCancelが無いので、イベント自体、すなわちOutlookの終了という処理をキャンセルすることができないところです。

もし引数にCancelがあれば、「要返信フォルダにメールが残っています。Outlookを終了してもよろしいですか?」というメッセージを「はい」「いいえ」ボタンと共に表示して、「いいえ」が選択されたらOutlookを終了させない…ということができますが、こればっかりはどうしようもありません。

メッセージが表示されたら、大人しくOutlookをもう一度起動して、「要返信」フォルダを覗くことにしましょう。

最後に

今回は、OutlookのQuitイベントで、Outlook終了時に特定のフォルダにメールがあったらメッセージを表示する方法をご紹介しました。

要確認だったり、返信が必要なメールを特定のフォルダに集めておいて、今回ご紹介したQuitイベントでフォルダ内にメールが残っていないか?をチェックするようにすれば、確認漏れや返信忘れも防げますね。

それでは最後までお読みいただき、ありがとうございました!

連載目次:【Outlook VBA】メールをワンクリックで操作しよう

基本機能に加えてVBAを使えばもっと便利になるOutlook。

メールの返信、フォルダ移動だってワンクリックでできますよ。

便利なOutlookを、更に手間なく使ってみましょう!

  1. 【Outlook VBA】Replyメソッドでメールにワンクリックで返信する方法
  2. 【Outlook VBA】Moveメソッドでメールを指定のフォルダに移動させる方法

ファミリー向けプログラミング研究会「ファミプロ」のKickOffイベントを開催しました

$
0
0

bocco

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「ノンプログラマーのためのスキルアップ研究会」は、ノンプログラマーがプログラミングをはじめとするITスキルを学び合うコミュニティです。

さて、そんなノンプロ研。

本来は「働く大人向け」のコミュニティなのですが、子どもたちも含めた「家族向けプログラミング」の活動(通称「ファミプロ」)をしていこうとなりまして、今回そのキックオフイベントを開催しました。

ということで、ノンプロ研ファミリー向けプログラミング研究会「ファミプロ」のKickOffイベントレポートです。

ちなみに当日の様子は以下、Togetterのツイートまとめもご覧くださいませ。

ノンプロ研ファミリー向けプログラミング研究会KickOff
ノンプログラマーがプログラミングを学ぶコミュニティ、通称「ノンプロ研」。子どもたちも交えて家族向けにプログラミングを学ぶイベントを開催して行こう!ということで、キックオフイベントを開催しました。

では、行ってみましょう!

ファミプロKickOffイベントとは?

ファミリー向けプログラミング研究会、通称「ファミプロ」は、コミュニティ「ノンプロ研」のメンバーのご家族も参加できるプログラミングを学ぶ会です。

今回の参加メンバーの内訳はこちら!

  • ノンプロ研メンバー:7名
  • 配偶者・パートナー:3名
  • 子どもたち:7名

ということで、合計17名が参加いただきました。子どもたちは、3歳から大学生まで。

Zoom経由でリモートでも、2つのご家族がご参加いただきましたよ!

そして、気になるタイムスケジュールはこちら。

時間 タイトル
14:00 ファミプロってな~に?なんではじめるの?(タカハシ)
14:20 コンピュータお母ちゃんのプログラミング教育(宮脇さん)
14:40 きのした家の取り組み-家庭に役立つ技術-(きのぴぃさん)
休憩
14:50 親子もくもく会(Scratch&プログラミング玩具)
16:00 成果発表会

前半はプレゼンによるお話で、後半はScratchやプログラミングのオモチャを使って、家族でプログラミングを学ぶ「親子もくもく会」という日程です。

子どもたちが騒がずに前半のプレゼンを乗り切れるのか、後半はトラブルなくちゃんとプログラミングできるのか…ドキドキすぎる!

ファミプロ:プレゼンの部

前半はプレゼンの部です。

キックオフなので、きちんと「ファミプロ」の趣旨を伝えたいと思ったですが、子どもたちが飽きずに聴いてくれるものか…画像(特にいらすとや)や聴衆(特に子どもたち)への質問をたくさんするなど、いつも以上に意識しました。

「ファミプロってな~に?なんではじめるの?」

まず、私のプレゼン「ファミプロってな~に?なんではじめるの?」です。

文脈としては、2020年以降に義務教育でのプログラミング学習が必修になるという流れがあります。

子どもたちの時代はITは当然で、プログラミングやAIといった高度な技術を使いこなしていくスキルがもはや必須となる可能性は高いですよね。

とはいえ、実際に今の学校の環境でいうと

  • プログラミングに割ける時間は限られている
  • 学校の先生は必ずしもプログラミングの知識や経験が深いわけではない
  • PCやWifiなどの学習環境が必ずしも整っているわけではない

という実情もあり、完全に学校にお任せ…というわけにはなかなかいかないかな…と。

一方で、ノンプロ研。以下のような様子が見受けられるんですね。

  • 仕事でプログラミングを使っている(または使おうと学んでいる)
  • 学び合うことで、リーズナブルにお互いが学べる
  • お子さんがいる世代も多数

ノンプロ研に、子どもたちも入れちゃえばいいんじゃね?

ということで、家族向けプログラミングの企画をスタートしたのでした。

仕事はもちろんですが、勉強でも、家庭でもプログラミングを活用していきましょうね。

「コンピュータお母ちゃんのプログラミング教育」

お次は、「コンピュータお母ちゃんのプログラミング教育」

みやわきさん(@NaFjp )は、なんと香川県にお住まいで、今回も飛行機で駆けつけてくださいました。

現在11歳のムスメさんですが、9歳からノートPCをプレゼント。

その後、各地で開催されるプログラミングのイベントの参加や、プログラミングスクールの受講を積極的にされて、今ではScratchやマインクラフトをバリバリ…!

地方にいると移動の負担も多いのですが、なぜそこまで積極的に通わせているんでしょうか?

プログラミングスクールは、やはり首都圏に集まっています。

そこで印象に残った言葉で「将来、スクールに通った子どもたちと戦わなければいけない」というのがありました。

ほんとですよね。

ノンプロ研がこのあたりうまくサポートしていければと思います。

『ITを利用して「楽しく」「簡単に」「便利に」くらそう〜こどもをささえる技術〜』

最後のお話は、おなじみのきのぴぃさん(@kinopy_techhack)から。

もともと、きのぴぃさんは、仕事向け…というよりは、家庭向けでLineBotとか、Boccoとか使われていたので、「家庭向け」で話してください!とお願いした次第です。

きのぴぃいさん、おくさま、8歳と4歳の男の子がいらっしゃるのですが、こんなふうに家庭内でITを活用されています。

  • iPhoneを持たせていている(MDMで管理)
  • GPSで子どもたちがどこにいるか把握
  • Bocco(コミュニケーションロボット)でコミュニケーション
  • Slackで連絡・相談

…とまあ、こんなふうに使い倒しています。

IT、家庭内でもすごく役立つんですね~!

「YouTube見すぎる問題どうしてる?」とか「セキュリティはどう教える?」とか、どのご家庭でも悩む問題もありますしね。

そんな、情報交換もコミュニティ内でできればいいですよね。

親子もくもくタイム

さて、後半は親子もくもくタイムです。

3歳,4歳くらいの小さいお子さんには、以下の3つのプログラミング・知育玩具を用意しまして、好きに遊んでいただきました。

8歳、9歳のお子さんは、お父さんと一緒にPCでScrachにチャレンジです。

Scratch - Imagine, Program, Share
Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations.

皆さん、Scratchは今日がはじめてだったようで、チュートリアルを中心に熱心に取り組まれていましたよ。

もうね、超微笑ましい…

大学生は、本格的にGoogle Apps Scriptにチャレンジ。@etauさんのマンツーマンで、かなりみっちり教えてもらったみたいです。

さて、1時間ほどもくもく(全く「もくもく」はしていませんが…)した後、大人も子供も全員が前に出て一言ずつ発表会

大きい子達はもちろん、小さい子達も、ちゃんと発表ができていました。感動しますわ。

こういう発表の機会も、子どもたちには貴重な経験になりますよね。

まとめ

以上、ノンプロ研ファミリー向けプログラミング研究会「ファミプロ」のKickOffイベントレポートでした。

正直、どうなるかわからなかったのですが、なんとかイベントとして形になり、成果もあったものと思います。

今後の「ファミプロ」の活動については、まだ具体的にはなっていませんが、メンバーとも話をしながら、ぜひ進めていきたいと思います。

「ノンプログラマーのためのスキルアップ研究会」について

コミュニティ「ノンプログラマーのためのスキルアップ研究会」では、毎月の定例会や勉強会、Slackでのやり取りを通して、皆さんのプログラミング学習の質やモチベーションを高めるための活動をしています。 過去の活動については、以下のページをご覧ください。
コミュニティ「ノンプログラマーのためのスキルアップ研究会」の活動レポートまとめ
コミュニティ「ノンプログラマーのためのスキルアップ研究会」(略して「ノンプロ研」)。このページはその活動レポートまとめページです。コミュニティ活動の一気読みをされたい方、ぜひご活用くださいませ。
ぜひ、皆様のご参加をお待ちしております!
コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ #ノンプロ研
ノンプログラマーがVBA・GAS・Pythonなどのプログラミングを学ぶコミュニティ「ノンプログラマーのためのスキルアップ研究会」が絶賛活動中です!本ページはコミュニティの情報発信をしていく特集ページです。

App Makerでボタンクリックで独自のスクリプトを動作させる方法

$
0
0
button

photo credit: dejankrsmanovic Old Elevator Button via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerでボタンウィジェットを設置してクリックで動作させる方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerでボタンウィジェットを設置してonClickイベントでクリック動作させる方法をお伝えします。

フォームウィジェットにボタンを設置して、クリックによる動作をさせる方法をお伝えしました。

さて、そのボタンクリックによる動作ですが、独自のスクリプトを仕込むことができるんです。

ですから、あらかじめ用意されたこと以外のことも実現可能です。

ということで、今回はApp Makerでボタンクリックで独自のスクリプトを動作させる方法をお伝えします。

では、行ってみましょう!

前回までのおさらい

まずは前回までのおさらいです。

App Makerで従業員データを扱うアプリケーションを作っております。

元のデータを、以下のスプレッドシートにして、App Makerと連携させたい…というのが、概ねの最終目標ですね。

スプレッドシートの従業員データ

前回は、以下のようにフォームウィジェットに「BACK」ボタンウィジェットを配置して、クリックをしたら、別ページに遷移するという部分を解説しました。

App Makerでボタンをクリックする

「BACK」ボタンについて、右側のプロパティエディターでonClickイベントについて、「Navigate to TablePage」という設定をすればよかったのです。

さて、このボタンクリックによる動作なのですが、独自で作成したスクリプトを呼び出すこともできるんですね。

今回はその方法を解説していきますよ!

クライアントスクリプトを作成する

新規クライアントスクリプトを追加する

では、まずボタンクリックにより動作をするスクリプトを作成していきます。

App Makerの左側「SCRIPTS」のところにカーソルを当てると「+」アイコンが出てきますので、クリックしましょう。

App Makerで新しいスクリプトを追加する

ちなみにですが、App Makerでなにか作るときは

  • DATA: データベース
  • PAGES: ページ(ページ上にウィジェットを配置する)
  • SCRIPTS: スクリプト

このいずれかになりますね。

スクリプトの種類とは

それで、「Create Script」というダイアログが開きます。

スクリプトの種類を尋ねられますが、以下のとおり。

  • Client: ブラウザ上で動作する(ボタンクリックや、UIによるイベントで動作させる)
  • Server: サーバー上で動作する(GASを使ってスプレッドシートなどを操作する)

今回は、ボタンクリックで動作させたいので、クライアント側のスクリプトです。

ですから「Client」を選んで「CREATE」をクリックします。

App Makerでクライアントスクリプトを作成する

アラートを表示するサンプルスクリプト

すると、以下のように画面に切り替わります。

「NewScript」という名前のスクリプトで、その種類は「Client」で、サンプルスクリプトが入力されていますね。

App Makerのクライアント側のサンプルスクリプト

スクリプトは以下のとおりです。

function sayHello(message){
   alert("Hello, " + app.user.username + "!");  
}

alertメソッドは、ブラウザを操作して警告メッセージを表示する命令ですね。

alert(メッセージ)

それで、その内容ですが、ここからはApp Makerのクラスです。

まずはAppクラスのuserプロパティです。これは、App Makerアプリケーションの現在のユーザーを表します。

app.users

戻り値はUserオブジェクトというオブジェクトです。

そしてさらに、usernameプロパティですね。

Userオブジェクト.username

これは、Userオブジェクトが表すユーザーのログイン名です。

つまり、スクリプトとしては、「Hello, ログイン名!」となるはず、ということですね。

クライアントスクリプトをリネームする

スクリプトはサンプルをそのまま採用するとしましょう。

それで、スクリプトの名前を変更しておきます。

鉛筆アイコンをクリックしてタイトルを編集します。

App Makerのスクリプト名を編集する

「Rename Script」というダイアログが出ますので、例えばスクリプト名を「ClientScript」などとして「OK」します。

App Makerでスクリプトをリネームする

これでリネーム完了です。

ボタンクリックでスクリプトを動作させる

では、このスクリプトを動作させるためのボタンを準備していきましょう。

まず、フォームウィジェットに新たなButtonウィジェットをドラッグして配置します。

App MakerでButtonウィジェットの設置と設定

プロパティエディターで以下のように設定します。

  • name: ButtonHello
  • text: Hello
  • onClick: Custom Action

onClickイベントで「Custom Action」を選択すると、以下のように「Custom Action」にスクリプトを入力できます。

App MakerでButtonウィジェットにスクリプトを入力する

ここでは、以下のように先ほど作成したスクリプトの関数名を入力して「DONE」です。

sayHello();

ボタンによる自作スクリプトの動作確認

では、プレビューをして動作確認をしてみましょう。

「PREVIEW」をクリックして、フォームの「HELLO」ボタンをクリックします。

App Makerでボタンをクリック

すると、以下のように警告メッセージが表示されます。

App Makerでアラートが表示された

その内容は

Hello, takahashi!

となっていますね!

ちゃんとログイン名が使われているようですね。

まとめ

以上、App Makerでボタンクリックで独自のスクリプトを動作させる方法をお伝えしました。

ボタンで動作するクライアント側のスクリプトの作り方と仕込み方を理解いただけたかなと思います。

次回は、サーバー側のスクリプトについて見ていきましょう。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
  6. App Makerでボタンウィジェットを設置してクリックで動作させる方法

【Outlook VBA】Unreadプロパティでメールを未読に戻す方法

$
0
0

outlook,mailitem,unread

皆様こんにちは、ノグチです。

前回の記事では、特定のフォルダにメールがあったらOutlook終了時にメッセージを表示する方法をご紹介しました。

【Outlook VBA】QuitイベントでOutlook終了時にメッセージを表示する
Outlook終了時に実行されるイベント、Quitイベントで、Outlook終了時にメッセージを表示させる方法をご紹介しています。返信が必要なメールは専用のフォルダに入れておいて、このイベントを使えば、返信していないメールがあることを知らせることができますよ。

しかし返信しないといけないメールだったり、重要な内容のメールを格納しておくフォルダならば、Outlook終了時ではなく、パッと見でフォルダにメールが何件あるか見られるようにしておきたい…

そういえば受信フォルダは、未読メール件数を表示してくれますよね。

ということで今回は、フォルダ内のメール件数を表示できるように、受信フォルダ内の既読メールを未読メールにする方法をご紹介します。

Unreadプロパティで既読メールを未読メールにする

メールの既読・未読をセットするには、MailItemオブジェクトのUnreadプロパティを使います。

UnreadプロパティにTrueをセットするとメールを未読メールに、Falseを指定すると既読メールにすることができます。

記述方法はコチラ。

MailItemオブジェクト.Unread
では試しに、このUnreadプロパティを使って、今開いているメールを未読メールにしてみましょう。

コードはこちらです。

Sub Mail_Unread()
Dim objItem As Object
Dim objIns As Inspector
Dim myNameSpace As NameSpace
Dim myInbox As Folder


Set myNameSpace = GetNamespace("MAPI")


Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")


Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得


With objItem
    .UnRead = False
End With


End Sub

outlook,メール,未読

このメールを開きつつ、上のコードを実行してみると…

outlook,既読メール,フォルダ

この通り、既読メールが未読メールになっていますね。

フォルダ内のメールを全て既読にする

受信フォルダを右クリックすると、「全て開封済みにする」という、フォルダ内のメールを全て既読メールにする機能がありますよね。

それをVBAでやってみましょう。

こちらの「重要」フォルダ内には、未読メールが5件あります。

outlook,unread,folder

この5件のメールを、VBAで既読メールにしてみましょう。

コードはこちらです。

Sub Mail_Unread_InFolder()
Dim objItem As Object
Dim myNameSpace As NameSpace
Dim myInbox As Folder

Set myNameSpace = GetNamespace("MAPI")

Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("重要メール")

For Each objItem In myInbox.Itemss
    objItem.UnRead = False
Next objItem

End Sub

まず「重要メール」フォルダのFolderオブジェクトを取得して、Itemメソッドでフォルダ内にあるメールのMailItemオブジェクトを取得。

そして各メールのMailItemオブジェクトのUnreadプロパティにFalseをセットしていくコードです。

こちらを実行して、フォルダの中を覗いてみると…

outlook,既読メール

この通り、メールが全て既読になっていますね。

要返信メールをフォルダに移動して未読メールにするコード

折角なので、前々回までの記事でご紹介した、後で返信が必要なメールを「要返信」フォルダへ移動させるコードに、今回ご紹介しているUnreadプロパティを加えて、既読メールを未読メールにしつつ、「要返信」フォルダへ移動させてみましょう。

コードはこちら。

Sub Reply_and_Move_Mail()
Dim objItem As Object
Dim objIns As Inspector
Dim myNameSpace As NameSpace
Dim myInbox As Folder
Dim objReply As Object

Set myNameSpace = GetNamespace("MAPI")

Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox).Folders.Item("要返信")

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得
Set objReply = objItem.Reply

With objReply
    .Body = "予定を確認後連絡します。" & .Body
    .Send
End With

With objItem
    .Move myInbox
    .UnRead = True
End With

End Sub
最後のMoveメソッドで「要返信」フォルダに移動させる手前にUnreadプロパティで未読メールにしています。
 
このコードを実行すれば、「要返信」フォルダに格納されたメールが未読メールになって、フォルダ名の隣にフォルダに何件メールがあるか一目瞭然ですね!

最後に

今回は、MailItemオブジェクトのUnreadプロパティで、既読メールを未読メールにする方法をご紹介しました。

Unreadプロパティは単体ではあまり用途が無いように思えますが、今回のように他のメソッドやイベントと組み合わせると、便利な使い道がありそうですね。

それでは、最後までお読み頂きありがとうございました!

連載目次:【Outlook VBA】メールをワンクリックで操作しよう

基本機能に加えてVBAを使えばもっと便利になるOutlook。

メールの返信、フォルダ移動だってワンクリックでできますよ。

便利なOutlookを、更に手間なく使ってみましょう!

  1. 【Outlook VBA】Replyメソッドでメールにワンクリックで返信する方法
  2. 【Outlook VBA】Moveメソッドでメールを指定のフォルダに移動させる方法

【はじめてのfreeeAPI】GAS×freeeAPIで経理業務を自動化する最初の一歩!

$
0
0

GAS・freeeAPI連携サムネイル

こんにちは!ITライターのもり(@moripro3)です!

会社の経営者・経理担当のみなさん、クラウド会計freeeをご存知ですか?

クラウド会計ソフトfreeeとは、個別のパソコンにソフトウェアをインストールしなくても、インターネットが使用できる環境ならどこでも使用可能な「クラウド型の会計ソフト」です。

  • 全国の金融機関やクレジットカードと提携されており、銀行明細等の同期が可能
  • G Suite,Salesforce,Slackなど数多くの連携サービスがある(freeeアプリストアで検索可能)
  • スマホアプリもあるため、外出先でもスマートフォンから使用可能
  • 帳簿付け以外にも、請求書の発行や経費精算、各種レポート閲覧などの機能が搭載されている

ユーザにとって多くの便利な機能が提供されているfreeeのなかでも、経理業務の効率化に大いに役立つのが「freee API」であり、GASでの操作が可能です!

連載「はじめてのfreee API」シリーズでは、GASの初心者を対象として、下記をゴールにします。

  • GAS × freee APIで何ができるのかを学ぶ
  • freee APIを操作して、freeeからデータを取得してみる

連載シリーズ初回のこの記事では、

  • freee APIとは何か?
  • GAS × freee APIで何ができるのか?

を、とことん易しく解説していきますよ。それではみていきましょう!

(この記事はfreee株式会社さまとのコラボ企画です。シリーズを通して、皆さんの働くの価値を上げられるよう皆さまをサポートしていきます!)

freee APIとは

freee APIとは、GASなどのプログラミング言語でfreeeを操作する仕組みです。

「外部のプログラム」から「freeeの機能」を操作する出入口のようなイメージです。

GASとfreeeAPIの連携イメージ

GASを使ってfreeeが用意している「出入口(API)」にアクセスすることで、freeeの画面を操作しなくても、直接データのやり取りが可能になります。

人間がマウスやキーボードを使って画面を操作するのではなく、プログラムによってfreeeを操作できる仕組み、と理解しておきましょう。

freee APIでできること

この項では「freee APIを使うと何ができるのか?」を紹介します。

GASでfreee APIを操作することの2大メリットがこちら!

  • freeeの画面での手作業を自動化できる
  • freeeのデータを外部アプリケーションと連携できる

それぞれ、詳しくみていきましょう。

画面での手作業を自動化できる

経理業務で会計ソフトを使用してるみなさん、ソフトへのデータ登録・ソフトからのデータ出力はどうやっていますか?

手作業で画面をポチポチ操作したり、または、多くの会計ソフトでは、CSVファイルのダウンロード・アップロード機能があります。

CSVファイルを使えば一括登録・出力できるけれど、わざわざCSVファイルを経由するのって面倒くさい・・・。スプレッドシートのデータをガサーっと直接登録できたら便利だと思いませんか?

GASでfreee APIを操作すると、CSVファイルを経由せず、スプレッドシートのデータをfreeeに直接登録したり・freeeのデータをスプレッドシートに直接書き出せるのです!

GASを使用してスプレッドシートとfreeeを連携する

引用:【freee API】GASを用いてGoogleスプレッドシートと連携する

ほんの一例ですが、たとえば、freeeの画面上で行うこのような作業が自動化できます。

  • 試算表の出力
  • 取引の登録・出力
  • 振替伝票の登録・出力
  • 請求書の作成・出力 など他多数

例えば、以下の例を詳しくみていきましょう。

  • 指定期間の未決済取引の一覧をスプレッドシートに出力する

まず、freeeの画面で期間を指定して検索した結果がこちらです。

freeeの取引一覧画面

通常、この検索結果をスプレッドシートに反映させるには、CSVダウンロードの機能を使いますが、GASでfreee APIを操作することで、直接スプレッドシートに書き出すことができるのです!

freeeAPIを使って取引明細を取得する

データの出力だけでなく、登録もできます。取引を一括登録したい場合、スプレッドシートに元データを作成しておけば、GASで直接、一括登録することも可能です。

外部アプリケーションと連携できる

freee ⇔ スプレッドシートでデータのやり取りをするだけでは終わりません!

freee APIを操作することで、freeeのデータを、外部アプリケーションと連携できます。

ChatworkなどでもAPIが公開されているので、それらと組み合わせることで、freeeと外部アプリケーションを連携させることが可能です。

このようなイメージです。

freeeと外部アプリケーションの連携イメージ

GAS × Chatwork APIについては、過去に当ブログで紹介しています。

Google Apps ScriptでチャットワークAPIを活用するための最初の一歩
チャットワークAPIを駆使すると、様々な操作を行うことができるようになります。今回はチャットワークAPIの概要とGoogle Apps Scriptでの簡単な使い方についてお伝えします。

さらに、GASはGmail・Googleフォーム・Googleカレンダーなども操作できるので、freeeのデータを他のGoogleサービスと連携することもできます。

たとえば、このような処理です。

  • 新規の取引が登録されたら、支払期日をGoogleカレンダーに登録する
  • 支払期日が1週間以内の取引を日次取得し、その内容をGmailに送信する

GASの時限式トリガーも組み合わせれば、「毎日指定の時刻にfreeeからデータを取得→加工→レポートをメール送信」といった、一連のルーチン作業を完全自動化することも可能になります。

【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
初心者向けGoogle Apps Scriptのシリーズとして、名言Botの作成の方法をお伝えしています。今回は、時限式のイベントトリガーを設置して決まった時刻にチャットワークにBot送信する方法です。

会計ソフトを使った経理業務の、ポチポチ手作業で悩まされている方にとって、「GAS × freee API」は夢にあふれた最強の組み合わせですね!

APIとは

さて、ここまでで「freee API」という単語をたくさん紹介してきましたが、「API(エーピーアイ)って何?」と感じている方もいるはず。

APIの概念はノンプログラマーにとっては難しいので、きっちり理解できなくても問題ありません。ご安心ください!

興味のある方は、少しだけでも頭に入れておくことで、今後freee APIを使いこなすうえで視野が広がりますよ。

APIとは、「Application Programming Interface」の略であり、「インターフェース」の一種です。

「何か」と「何か」をつなぐための「出入口」のようなイメージで、この出入口を通じて、データのやり取りを行います。

API(インターフェース)のイメージ

このAPIはすべてのWebサービスに存在するものではなく、また、一般ユーザに非公開の場合もありますが、freeeは会計ソフトの中で唯一、APIを無料で一般公開しています。

ユーザの業務効率化を徹底サポートしてくれるfreeeならではですね!

まとめ

連載「はじめてのfreee API」の第1回目として、freee APIとは何か?GASでfreee APIを操作すると何ができるのか?を紹介しました。

  • GAS × freee APIは、経理業務を効率化する最強の組み合わせ!APIを無料で一般公開してる会計ソフトはfreeeのみ
  • GASでfreee APIを操作することで、CSVファイルを経由しなくても、直接スプレッドシートのデータをやりとりできる
  • freeeのデータを、他のGoogleサービスや外部アプリケーションとも連携できる

CSVファイルをダウンロードし、スプレッドシートに貼り付け、手作業であれこれ加工・・・という面倒なルーチン作業をしている方は、ぜひこのシリーズで「GAS × freee API」を学んで自動化にチャレンジしてみましょう!

次回は、freee APIを使用するための設定方法を紹介していきます!

どうぞお楽しみに!

App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerでボタンクリックで独自のスクリプトを動作させる方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回はApp Makerでクライアント側のスクリプトを作成し、ボタンクリックで動作させる方法をお伝えします。

ボタンをクリックしてクライアント側スクリプトを動作させる方法をお伝えしました。

さて、クライアント側を動作させることができたとしても、例えばスプレッドシートなどは「サーバー側」のスクリプト(つまりGASですが)を動作させて操作させる必要がありますよね。

ということで、クライアント側からサーバー側のスクリプトを呼び出す、という手順が必要になるわけです。

今回は、そのへんを進めていきますよ。

App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法です。

では、行ってみましょう!

前回までのおさらい

シリーズを通して実現したいことと、前回までの内容をおさらいしておきましょう。

App Makerで実現したいことは、以下のようなスプレッドシートをデータベースとしたアプリケーションを作りたいということです。

スプレッドシートの従業員データ

さて、前回ですが以下のようなフォーム上に「HELLO」というボタンを設置しました。

App Makerでボタンをクリック

クリックすると、以下のようにアラートが表示される、という処理を作成しました。

App Makerでアラートが表示された

この「ボタンを押すというイベントに応じてアラートを表示する」というのは、ブラウザ側で動くクライアントスクリプトで動作しています。

実際にApp Makerでスプレッドシートを操作するには、サーバースクリプト(つまりGAS)を動作させる必要があるんですね。

今回は、クライアントスクリプトからサーバースクリプトを動かす方法を見ていきましょう。

サーバースクリプトを作成する

まず、呼び出すサーバースクリプトを作成しておきましょう。

サーバースクリプトの新規作成もApp Maker上でできちゃいまして、その手順はクライアントスクリプトとほぼ同じです。

App Makerで「SCRIPTS」の「+」ボタンをクリックします。

App Makerでスクリプトを追加する

「Create Script」のダイアログが開きますが、今度はここで「Server」を選択して「CREATE」をクリックです。

App MakerでServer Scripteを作成する

すると、サーバースクリプト「NewScript」が作成され、サンプルとして以下のコードが挿入されています。

function serverSayHello() {
  return "Hello, " + Session.getActiveUser().getEmail() + "!";
}

スクリプト名をクリックして、リネームしておきましょう。

App Makerのサーバースクリプト

「Rename Script」のダイアログで、名前を変更します。ここでは「ServerScript」などとしておきましょう。

それで、「OK」をクリックです。

App Makerでサーバースクリプト名を変更する

サーバースクリプトのサンプル解説

さて、前述のサンプルのサーバースクリプトですが、簡単に解説をしておきましょう。

スクリプトとしては、「Hello, Hoge@example.co.jp!」という文字列を返すというものです。

まず、Sessionオブジェクトですが、これはユーザーのEmailアドレスや言語設定などのセッション情報にアクセスするためのオブジェクトです。

getActiveUserメソッドは、現在アクセスしているユーザーを表すUserオブジェクトを返すメソッドです。

Session.getActiveUser()

そして、UserオブジェクトからそのEmailアドレスを取り出すのが、getEmailメソッドです。

Userオブジェクト.getEmail()

そんなに難しくないですよね。

クライアントスクリプトからサーバースクリプトを呼び出す

では、作成したサーバースクリプトを呼び出すように、クライアントスクリプトを変更していきましょう。

App MakerのSCRIPTSに作成済みの「ClienetScript」をクリックすると、以前作成したスクリプトを編集できます。

以前は以下のようなスクリプトを作成していまして、このスクリプトを例の「HELLO」ボタンのクリックで動作するように設定していたんですね。

function sayHello(message){
   alert("Hello, " + app.user.username + "!");  
}

それを以下のように変更します。

function alertMessage(message){
   alert(message);  
}

function sayHello() {
  google.script.run.withSuccessHandler(alertMessage).serverSayHello();
}

alertMessageと、sayHelloと2つの関数がありますね。

まず、関数alertMessageは引数として受け取ったmessageをアラート表示するという単純なものです。こっちはいいっすね。

もう一つの関数sayHelloのほうは少し解説が必要ですね。

google.script.run…サーバー側のスクリプトを呼び出す

App Makerには、クライアント側JavaScriptからサーバースクリプトの関数を呼び出すための命令として、google.script.runというオブジェクトが用意されています。

以下のように記述することで、サーバースクリプトの関数を呼び出せます。

google.script.run.サーバー関数名(引数1, 引数2,…)

なので、以下のようにすれば、先ほど定義したサーバースクリプトの関数serverSayHelloを呼び出せますね。

google.script.run.serverSayHello();

サーバースクリプトの関数が正常に実行できたらクライアント関数を実行する

あと、もう一つ気になる点として「withSuccessHandler」とはなんぞや?と思われますよね。

withSuccessHandlerメソッドは、サーバースクリプトの関数呼び出しが正常に完了して処理が戻ってきたときに実行するクライアントスクリプトの関数名を指定することができます。

google.script.run.withSuccessHandler(クライアント関数名).サーバー関数名(引数1, 引数2,…)

withSuccessHandlerメソッドの戻り値もgoogle.script.runオブジェクトなので、このメソッドを間に挟めるんです。

そして、サーバー関数の戻り値があれば、それをクライアント関数に渡すというステキ機能も搭載しています。

今回の例でいうと、サーバースクリプトの関数serverSayHelloを呼び出して、無事に完了して戻ってきたら、その戻り値を引数としてクライアントスクリプトの関数alertMessageを呼び出すというわけです。

サーバースクリプトの呼び出しの実行確認

では、動作を確認してみましょう。

右上の「PREVIEW」ボタンをクリックして、プレビューします。

「HELLO」ボタンをクリックすると、アラートダイアログが表示されますね。

App Makerでサーバースクリプトを呼び出す

そして、その内容は以下のように(偽メアドですが)なっていて、サーバー側で動作しているサーバースクリプトのSessionオブジェクトなどがちゃんと動作していることがわかります。

Hello, hoge@example.co.jp!

まとめ

以上、App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法をお伝えしました。

google.script.runはApp Makerだけでなく、GASでHTMLを使って作成するWebアプリケーションでも同じ仕組みですよね。助かります。

次回は、サーバースクリプトを呼び出してスプレッドシートを操作していきますよ。

App Makerのボタンクリックでスプレッドシートにアクセスする方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerのボタンクリックでクライアントからサーバーを呼び出してスプレッドシートにアクセスする方法です。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
  6. App Makerでボタンウィジェットを設置してクリックで動作させる方法
  7. App Makerでボタンクリックで独自のスクリプトを動作させる方法
  8. App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法
  9. App Makerのボタンクリックでスプレッドシートにアクセスする方法
  10. App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える

App Makerのボタンクリックでスプレッドシートにアクセスする方法

$
0
0
write

photo credit: domit Proud mum moment… via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerでボタンクリックで動作するクライアントスクリプトからサーバースクリプトを呼び出す方法です。

クライアントスクリプトからサーバースクリプトを呼び出す方法をお伝えしました。

App Makerでいうサーバースクリプトというのは、すなわちGASのことですから、例えばスプレッドシートを操作することもできちゃうんですよね。

ということで、今回は、App Makerのボタンクリックでスプレッドシートにアクセスする方法をお伝えします。

では、行ってみましょう!

前回までのおさらい

このシリーズ全体で目標としていることは、以下のようなスプレッドシートをデータベースとしたApp Makerのアプリケーションを作るということです。

スプレッドシートの従業員データ

これまでで、上記データをApp Makerで読み込んでテーブルウィジェットやフォームウィジェットで表示することは実現できています。

あとは、App Makerのボタン等の操作でスプレッドシートを操作できれば、双方向のデータのやり取りができるというわけですね。

前回は、App Makerのフォームウィジェット上のボタンクリックで、クライアントスクリプトを起動し、そしてそこからサーバースクリプトを呼び出す方法をお伝えしました。

呼び出すサーバースクリプトがこちらです。

function serverSayHello() {
  return "Hello, " + Session.getActiveUser().getEmail() + "!";
}

そして、クライアントスクリプトがこちら。

function alertMessage(message){
   alert(message);  
}

function sayHello() {
  google.script.run.withSuccessHandler(alertMessage).serverSayHello();
}

ボタン操作で起動するのは関数sayHelloで、サーバースクリプトの関数serverSayHelloを呼び出すというものです。

呼び出しが成功すると、withSuccessHandlerメソッドで関数alertMessageを呼び出して、アラートメッセージを表示します。

今回は、この流れをスプレッドシートを操作するように変更していきます。

App Makerからスプレッドシートを操作する

では、サーバースクリプトをスプレッドシートを操作するように変更していきましょう。

クライアントスクリプトはそのままにしておいて、サーバースクリプトを以下のように変更しましょう。

function serverSayHello() {
  var message = "Hello, " + Session.getActiveUser().getEmail() + "!";
  var id = '*****スプレッドシートのID*****';
  SpreadsheetApp.openById(id).getSheets()[0].getRange('E1').setValue(message);
  return message;
}

現在のユーザーのEmailアドレスを含む文字列は変数messageに代入をしておきます。

そして、変数idには皆さんのスプレッドシートのIDを設定しておいてくださいね。

その上で4行目ですが、以下のような一連の処理になっております。

  1. SpreadsheetAppオブジェクトのopenByIdメソッドでスプレッドシートIDがidのスプレッドシートを開く
  2. そのスプレッドシートのシートの一番左側のシートをgetSheetsメソッドの配列にインデックス0を指定して取得する
  3. そのシートのE1セルを取得する
  4. そのセルに変数messageの値を設定する

最後に、変数messageを戻り値としてreturnします。

リターンした内容は、クライアント側で受け取ってアラートダイアログに表示するんでしたね。

スプレッドシート操作の動作確認

App MakerでPREVIEWをして、「HELLO」ボタンをクリックして、スプレッドシートの操作について動作確認しましょう。

App Maker側では、以下のようにアラートメッセージが表示されます。

App Makerでサーバースクリプトからのデータをアラート表示

Hello, hoge@example.co.jp!

スプレッドシートを開くと、以下のようにE1セルに変数messageの内容が書き込まれているはずです。

App Makerでスプレッドシートに値を書き込む

クライアントスクリプトから引数を渡す

では、さらに理解を深めるために、スプレッドシートに書き込む情報の中に、クライアントスクリプトから渡した引数のデータを含めてみましょうか。

まず、サーバースクリプトを以下のように変更します。

function serverSayHello(message) {
  var id = '*****スプレッドシートのID*****';
  SpreadsheetApp.openById(id).getSheets()[0].getRange('E1').setValue(message);
  return message;
}

変数messageの生成をサーバースクリプトで行わずに、引数をmessageとして受け取れるようにしました。

一方でクライアントスクリプトを以下のように変更します。

function alertMessage(message){
   alert(message);  
}

function sayHello() {
  var message = "Hello, " + app.user.username + "!";
  google.script.run.withSuccessHandler(alertMessage).serverSayHello(message);
}

関数sayHelloで変数messageを生成して、それをサーバースクリプトの関数serverSayHelloに渡すというわけですね。

クライアントスクリプトから引数を渡す動作確認

では、クライアントスクリプトから引数が渡せているか動作確認をしていきましょう。

PREVIEWして「HELLO」ボタンをクリックすると、アラートダイアログが表示されます。

App Makerでアラートを表示する

Hello, takahashi!

これは、クライアントスクリプトで生成されたメッセージですよね。

スプレッドシートを確認すると…

App Makerから引数を渡してスプレッドシートに書き込む

同じテキストがE1セルに書き込まれていることを確認できますね。

まとめ

以上、App Makerのボタンクリックでスプレッドシートにアクセスする方法をお伝えしました。

クライアントスクリプトとサーバースクリプトの相互連携さえ慣れてしまえば、スプレッドシートの操作はサーバースクリプトにただのGASを書けばいいだけなので、そんなに難しくはありませんね。

ここを自在に使いこなすことで、スプレッドシートをデータベースにしたApp Makerアプリケーションの実現が近づくということになります。

さて、次回以降、実際にフォームウィジェットからスプレッドシートのデータを更新できるようにしていきましょう。

App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerでフォーム上のLabelウィジェットをTextBoxウィジェットに差し替える方法です。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
  6. App Makerでボタンウィジェットを設置してクリックで動作させる方法
  7. App Makerでボタンクリックで独自のスクリプトを動作させる方法
  8. App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法
  9. App Makerのボタンクリックでスプレッドシートにアクセスする方法
  10. App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える

【Outlook VBA】会議で自分以外の参加者にも予定を送る方法

$
0
0

eyecatch,会議,outlook

皆様こんにちは、ノグチです。

以前の記事で、Outlook VBAで予定を登録する方法をご紹介しました。

【はじめてのOutlook VBA】Outlookの予定を登録する方法
Outlook VBAでコーディングするためのVBEの準備と、VBAで予定を登録する方法をご紹介しています。1件の予定登録の手間は大したことがなくても、複数登録する必要が出てくると面倒臭い...本稿では複数の予定をOutlookにまとめて登録するための第一歩として、単体の予定をVBAで登録する方法をご紹介します。

記事では自分だけの予定を登録していましたが、同じ予定に参加して欲しい人にも予定が送れたら便利ですよね。

ということで今回は、Outook VBAで、予定に自分以外の参加者を追加する方法をご紹介します!

参加者を追加できる会議を作る

冒頭で、「予定に自分以外の参加者を追加する方法」、と言いましたが、実はOutlookの予定には自分以外の参加者を追加することはできません。

予定に自分以外の参加者を追加したい場合は、予定ではなく、会議を使います。

会議は、項目は予定とよく似ていますが、自分以外の参加者に、参加して欲しい予定への招待を送信することができるのです。

名前は会議ですが、もちろん会議以外の予定に使うことができますよ。

MeetingStatusプロパティで予定を会議にする

会議に情報をセットするためには、まずAppointItemオブジェクトのMeetingStatusプロパティを使います。

このMeetingStatusプロパティに定数olMeetingを指定することで、会議を操作することができますよ。

記述方法はこちら。

AppointmentItemオブジェクト.MeetingStatus = olMeeting

参加者を操作するRecipientsオブジェクトを取得する

会議を操作できるようになったところで、お次は参加者を追加しましょう。

会議の参加者を操作するためには、Recipientsオブジェクトを取得する必要があります。

Recipientsオブジェクトは、AppointItemオブジェクトのRecipientsプロパティで取得できますよ。

記述方法もシンプルです。

AppointItemオブジェクト.Recipients

Addメソッドで参加者を追加する

さあ、Recipientsオブジェクトを取得できれば、会議に参加者を追加することができるようになります。

会議に参加者を追加するには、RecipientsオブジェクトのAddメソッドで参加者のメールアドレスや名前を指定します。

こんな感じで。

Recipients.Add 参加者の名前またはメールアドレス

ここで言う名前とは、Outlookの連絡先に登録されている名前です。

登録されていない名前を指定しても意味がありませんので注意が必要です。

複数の参加者を追加したい場合

複数の参加者を追加したい場合は、各参加者毎にAddメソッドで指定していきます。

こんな感じで。

With objApItem
    .MeetingStatus = olMeeting
    .Recipients.Add "参加者1"
    .Recipients.Add "参加者2"
End With

会議を登録するコード

では早速、上でご紹介したMeetingStatusプロパティとRecipientsオブジェクトのAddメソッドで会議を作ってみましょう。

会議のプロパティは、予定とほぼ同じです。

というよりも、会議も予定も同じAppointmentItemオブジェクトなのでプロパティも同じ。

ただMeetingStatusプロパティの有無によって予定なのか会議なのかが決まります

以前ご紹介した予定登録のコードに、MeetingStatusプロパティとRecipientsプロパティ、Addメソッドを追加して…

するとこんなコードになります。

Sub SendAppointment()
Dim objApItem As Outlook.AppointmentItem

Set objApItem = Application.CreateItem(olAppointmentItem)
    With objApItem
        .MeetingStatus = olMeeting
        .Recipients.Add "参加者@mail.com"
        .Subject = "△△会議"
        .Location = "XXX会議室"
        .Start = #6/25/2019 2:00:00 PM#
        .End = #6/25/2019 4:00:00 PM#
        .Body = "○○プロジェクト会議"
        .Send
    End With

End Sub

2019年6月25日の午後2時から4時までの会議の参加者に会議招待を送るコードです。

上のコードでは、参加者をメールアドレスで指定しました。

上のコードを実行すると、こんな会議が参加者へ送信されます。

outlook,vba,会議依頼

そして会議への招待を受け取った人には、こんな風に会議が届きます。
outlook,vba,会議,参加者

会議への招待を受け取った人は、予定を承諾するなり、別の日程を返信するなりすればOKです。

会議の送信はSendメソッドで

上のコードの一番最後、予定ではSaveメソッドで予定が登録されましたが、会議を参加予定者に送る場合は、Sendメソッドを使います。

予定と同じようにSaveメソッドを使うと、会議は自分の予定表には登録されますが、参加者には送信されませんのでご注意を。

最後に

今回は、Outlookの会議で自分以外の参加者に予定を送信する方法をご紹介しました。

以前ご紹介した、エクセルのワークシート上の一覧から予定を登録する方法を組み合わせれば、例えば各社員の面談や健康診断といった、複数の予定も登録できますよ。

それでは最後までお読みいただきありがとうございました!

App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える

$
0
0
bring-box

photo credit: kenwalton Untitled via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App Makerのボタンクリックでスプレッドシートにアクセスする方法
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerのボタンクリックでクライアントからサーバーを呼び出してスプレッドシートにアクセスする方法です。

App Makerからスプレッドシートを操作する方法についてお伝えしました。

スプレッドシートを操作することができるということは、App Makerからスプレッドシートのデータベースのデータを更新できるということですよね。

今回は、まずフィールドウィジェットの各項目について編集ができるようにTextBoxウィジェットに差し替えていきましょう。

ということで、App Makerでフォーム上のLabelウィジェットをTextBoxウィジェットに差し替える方法です。

では、行ってみましょう。

前回までのおさらい

スプレッドシートに作成してあるデータベースはこちらです。

スプレッドシートの従業員データ

これまでのシリーズでこれらのデータをApp Makerに反映させることができています。

ただ、App Makeのフォームウィジェットを見ると…

App Makerでアラートを表示する

ほら、各フィールドは表示するだけで、入力はできない雰囲気がします。

これは、各フィールドの値を表示するウィジェットが表示専用のLabelウィジェットだからですね。

これを、入力も可能なTextBoxウィジェットに差し替えていきたいと思います。

更新用のボタンウィジェットを配置する

その前に、フォームのデータをスプレッドシートに更新するトリガーとなる「UPDATE」ボタンを配置しておきましょう。

EditPageのフォームについて、別のボタンをドラッグして設置します。

プロパティエディターでプロパティを以下のように変更します。

  • name: ButtonUpdate
  • text: Update

App MakerでフォームのUPDATEボタンを追加する
これで、OKです。

このボタンをクリックすると、現在のフォームのデータをスプレッドシートに反映するというスクリプトを仕込んでいけばいいわけですね。

この部分は次回お伝えしていきます。

LabelウィジェットをTextBoxウィジェットに差し替える

さて、繰り返しになりますが、フォームウィジェット上の「Labelウィジェット」は値を表示する機能しか持ちません。

ですから、入力が可能な「TextBoxウィジェット」に差し替えていきます。

まず、ひとつやってみましょう。

Labelウィジェットを削除する

Labelウィジェット「@Name」を選択して Delete キーで削除をします。

App Makerでフィールドウィジェットを削除する

TextBoxウィジェットを配置する

削除した位置に、TextBoxウィジェットをドラッグして配置します。

App MakerでTextBoxウィジェットを追加する

TextBoxウィジェットのプロパティ設定

配置したTextBoxを選択した状態で、プロパティエディタにて以下のように設定します。

  • name: TextBoxName
  • value: 「binding」→「Name」を選択

App MakerでTextBoxウィジェットのプロパティを設定

valueの値は以下のように表示されるはずです。

@datasource.item.Name

これはデータソースの「item」つまり現在のアイテムの「Name」フィールドと、このTextBoxウィジェットが持つ値がバインディング、つまり連動している状態であることを表します。

他のフィールドについてTextBoxウィジェットに差し替える

同様に、他のLabelウィジェトについても、TextBoxウィジェットに置き換えていきます。

結果的に以下の表のような設定値になればOKです。

フィールド name value
Name TextBoxName @datasource.item.Name
Email TextBoxEmail @datasource.item.Email
HireDate TextBoxHireDate @datasource.item.HireDate
Active TextBoxActive @datasource.item.Active

画面はこうなります。

App MakerでLabelウィジェットをTextBoxウィジェットに差し替えた

インデックスを表すフィールドとそのプロパティ

ちなみに、「Index」はスプレッドシートの行数が「正」となりますので、フォームから書き換えはできないわけですから、TextBoxウィジェトにはせずに、LabelウィジェットのままでOKです。

Labelウィジェットのnameプロパティだけ「FieldIndex」に変更して上げましょう。

App MakerでLabelウィジェットのnameプロパティを変更する

まとめ

以上、App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える方法をお伝えしました。

今回はここまでとして、次回はフォームに設置した「UPDATE」ボタンクリックによる動作を作成していきます。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
  6. App Makerでボタンウィジェットを設置してクリックで動作させる方法
  7. App Makerでボタンクリックで独自のスクリプトを動作させる方法
  8. App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法
  9. App Makerのボタンクリックでスプレッドシートにアクセスする方法
  10. App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える

App Makerでフォーム上のデータを取得してサーバースクリプトに渡す方法

$
0
0

send

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。

前回の記事はこちらです。

App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える
App Makerでスプレッドシートをデータベースにしたアプリの作り方をお伝えしています。今回は、App Makerでフォーム上のLabelウィジェットをTextBoxウィジェットに差し替える方法です。

App Makerのフォーム上のLabelウィジェットをTextBoxウィジェットに差し替える手順をお伝えしました。

なんでそんなことをしたのかというと、フォームからデータを入力して、元のスプレッドシートのデータも更新したいからなんですね。

ということで、今回はその続きの部分を進めていきます。

App Makerでフォーム上のデータを取得してサーバースクリプトに渡す方法です。

では、行ってみましょう!

前回までのおさらい

現在作成しているApp Makerのアプリケーションは、以下のようなスプレッドシートをデータベースとすべく進めています。

スプレッドシートの従業員データ

スプレッドシートからApp Makerへデータを反映させるのは実装済みですので、今はApp Makerからデータを更新する仕組みを作っているところです。

前回は、フォームで更新可能なフィールドを入力して更新できるように、Labelウィジェットから、TextBoxウィジェットに差し替えました。

また、更新のトリガーとなる「UPDATE」ボタンを追加しました。

その時点のフォームが以下ですね。

App MakerでLabelウィジェットをTextBoxウィジェットに差し替えた

今回は、この「UPDATE」ボタンにスクリプトを仕込んで、テキストボックスに入力している内容にスプレッドシートも更新するようにしていきます。

スプレッドシートのレコードを書き換えるサーバースクリプト

まず、スプレッドシートのレコードを書き換えるサーバースクリプトから見ていきましょう。

こちらのsetRecordという関数です。

function setRecord(row, values) {

  var id = '*****スプレッドシートのID*****';
  var sheet = SpreadsheetApp.openById(id).getSheets()[0];
    
  sheet.getRange(row, 1, 1, values.length).setValues([values]);
}

仮引数は以下のような役割です。

  • row: 更新する行数
  • values: 更新する行データを表す一次元配列

rowで与えられた行数のレコードを、valuesで与えられた一次元配列に書き換えるというものですね。

そんなに難しくないですよね…?

フォームの内容をサーバースクリプトにわたす

続いて、現在のフォームの入力内容から、行数rowと一次元配列valuesを生成してサーバースクリプトに渡すクライアントスクリプトです。

こちらの関数updateRecordです。

function updateRecord() {
  var row = Number(app.pages.EditPage.descendants.FieldIndex.text) + 1;
  var values = [];
  values.push(app.pages.EditPage.descendants.TextBoxName.value);
  values.push(app.pages.EditPage.descendants.TextBoxEmail.value);
  values.push(app.pages.EditPage.descendants.TextBoxHireDate.value);
  values.push(app.pages.EditPage.descendants.TextBoxActive.value);
 
  google.script.run.setValues(row, values);
}

ちょっと見慣れないものがいっぱい出てきますね。

見ていきましょう。

ページをオブジェクトとして取得する

まず、Appオブジェクトのpagesプロパティです。

これは文字通り、アプリケーションのページの集合を取得します。

app.pages

pagesプロパティは、PropertyMapというApp Maker特有の集合を表すオブジェクトを返します。

これは、その集合内の要素を以下のようにそれぞれのオブジェクト名(nameプロパティの値)を使って呼び出せるというタイプのオブジェクトです。

PropertyMapオブジェクト.オブジェクト名

したがって、以下はEditPageをオブジェクトとして取得することになりますね。

app.pages.EditPage

ちなみに、ページはPanelウィジェットというオブジェクトです。

ページ上のウィジェットをコレクションとして取得する

続く部分ですが、ページに配置されているウィジェットをPropertyMapオブジェクトとして取得します。

それが、descendantsプロパティです。

Panelウィジェット.descendants

これでページ上のすべてのウィジェットをコレクションとして取得します。

descendantsは「子孫」という意味がありますよね。

これで取得できるのはPropertyMapですので、オブジェクト名で指定できます。

ですから、以下はLabelウィジェットFieldIndexを表します。

app.pages.EditPage.descendants.FieldIndex

Labelウィジェットのテキスト

あとは、Labelウィジェットのテキストですね。

それを表すのがtextプロパティです、

Labelウィジェット.text

つまり、以下でLabelウィジェットFieldIndexのテキストを取得できるというわけです。

app.pages.EditPage.descendants.FieldIndex.text

取得できるインデックスは文字列ですので、Number関数で数値化しつつ、スプレッドシートの見出しを考慮してプラス1をしています。

TextBoxウィジェットの値

TextBoxウィジェットの値を取得する部分もこれでほとんどわかりますね。

あとはvalueプロパティで値を取得するのみですね。

TextBoxウィジェット.value

これを、各TextBoxウィジェット分について配列にプッシュして、レコードを表す配列を生成していきます。

まとめ

以上、App Makerでフォーム上のデータを取得してサーバースクリプトに渡す方法をお伝えしました。

PropertyMapオブジェクトによるコレクションの扱いとか、descendantsプロパティとか、App Maker特有の概念もあるので、よくつかんでおくと良いですよね。

あとは、今回作成したクライアントスクリプトの関数updateRecordをボタンに仕込めば動くはず…

次回は、その部分を進めていきます。

どうぞお楽しみに!

連載目次:App Makerでスプレッドシートをデータベースとして使う

Googleが提供する社内アプリケーションを簡単に構築できるプラットフォームApp Maker。このシリーズでは、スプレッドシートをデータベースとして簡単なアプリケーションを作る方法をお伝えします。
  1. App Makerでスプレッドシートをベースにモデルを作成する方法
  2. App Makerでクエリスクリプトでスプレッドシートのデータを取得する方法
  3. App Makerでスプレッドシートからデータを取得するクエリスクリプトを丁寧に解説
  4. App Makerで新しいページとフォームウィジェットを配置する方法
  5. App Makerでテーブル行をクリックしたらフォームを表示するイベントを設定する方法
  6. App Makerでボタンウィジェットを設置してクリックで動作させる方法
  7. App Makerでボタンクリックで独自のスクリプトを動作させる方法
  8. App Makerでクライアントスクリプトからサーバースクリプトを呼び出す方法
  9. App Makerのボタンクリックでスプレッドシートにアクセスする方法
  10. App MakerでフォームウィジェットでLabelウィジェットをTextBoxウィジェットに差し替える

コミュニティ向け月額決済サービスまとめとSTORES.jpに決めた理由

$
0
0

STORES.jpのノンプロ研ページ

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

今回は、弊社が運営しておりますコミュニティ「ノンプログラマーのためのスキルアップ研究会」(通称ノンプロ研)の決済サービスの話です。

これまで、メインで使用していた決済代行サービスpaymo bizですが、2020/3/31でサービス終了とのお知らせがありました。

【重要】サービス終了に関するお知らせ
決済代行サービス paymo biz は、2020/3/31をもちましてサービスの提供を終了いたします。 長期にわたりご愛顧いただいたお客様には、心より感謝申し上げます。   尚、2019/6/4より、現在提供している各機能を順次停止いたします。 サービス終了に関するスケジュールやよくあるご質問につきましては、下記をご...

そこで、代替となる決済代行サービスですが、検討した結果「STORES.jp」に決定しました。

現在移行をスタートしたところです。

こちらです!

ノンプログラマーのためのスキルアップ研究会
本店では、ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ「ノンプログラマーのためのスキルアップ研究会」のお申し込みをはじめとしてサービスを提供させていただきます。 コミュニティについての詳細は以下のページもご覧ください。 ○コミュニティ「ノンプログラマーのためのスキルアップ研究会」につい...

今回の記事では、コミュニティなどの月額決済サービスでどのような選択肢があるのか、どうしてSTORES.jpに決めたのかについてお伝えしていきますね。

月額決済ができるサービスまとめ

では、早速ですが、今回調べた決済サービスについてまとめましたのでご覧いただければと思います。

コミュニティの運営用なので、条件としては「月額決済が可能」を条件としています。

サービス名 対応カード 月額プラン 手数料 メモ
paymo biz VISA/Master 無料 2.95% ※サービス終了
Stripe VISA/Maser/American Express/Discover/JCB/Diners 無料 3.60% UIをWPプラグインなどで独自で作成
Shopify VISA/Master/American Express 月額$29~$299 3.25%~3.9%
カード種類と月額プランによる
定額にはアプリを使用
ただし海外製でドキュメントが英語
Square VISA/Maser/American Express/Discover/JCB/Diners 無料 3.25%~3.95%
カード種類による
定期請求書という形式
要請求書作成作業
会費ペイ VISA/Maser/American Express/JCB/Diners 無料 3.5%
2019/6に0%キャンペーン実施中
PayPal VISA/Maser/American Express/JCB/Diners 無料 2.9%~3.6%+40円
月間売上高による
ユーザーにPayPalアカウント必要
STORES.jp VISA/Master/American Express 無料
スタンダードプラン1980円/月
5%→スタンダードプラン3.6%
BASE VISA/Master/American Express/BASE 無料 6.6%+40円
ペライチ決済 VISA/Master 1000円/月 3.5%
CAMPFIRE VISA/Maser/American Express/Discover/JCB/Diners 無料 10% 単品販売が「支援」に

けっこうたくさんありますね。

コミュニティ向け決済サービス選定のポイント

いろいろと試行錯誤しながら検討したのですが、最終的に主な選定のポイントは以下に挙げる5つでした。

  1. 信頼性
  2. 決済のしやすさ
  3. 運用のしやすさ
  4. 講座などの単品販売ができるか
  5. 料率

ひとつひとつコメントしていきますね。

信頼性~サービスが終了したりしないか

paymo biz…いいサービスだったのですよ。

使用しはじめたときは、決済手数料も無料の大盤振る舞い。初期は本当に助かりました。

ですが、今回のサービス終了…。

本来、必要でない移行の手間が弊社にはもちろん、メンバーの皆さんにも移行の手続きを強いなくてはいけなくなってしまいました。

場合によっては、今回を機に「移行作業せずに退会しようかな」というメンバーもいらっしゃるかも知れません。

経営判断としてはサービス終了はわからなくもないのですが、正直かなり迷惑ですね…

なので、今回は「信頼性」をかなり重視しました。

それでいうと、実績的にStripe、Shopify、Square、PayPal、CAMPFIREあたりは大丈夫そうな気がします。

あと、STORES.jpとBASEですが、既にECショップがそれぞれ60~70万店あるとのことなので、おそらく大丈夫だろうと判断しました。

その他の日系ベンチャー系はちょっと敬遠した感じですかね。SPIKEも終了しましたしね。

決済のしやすさ

決済のしやすさは当然重要ですよね。

例えば、PayPalは海外では強力なわけですが、決済にPayPalアカウントが必要になるので、日本人で持ってない方には少しハードルになるかな…と。

あと、StripeとShopify。

こちらもスタンダードな決済サービスなのですが、海外製ならではの問題があります。

ドキュメントが英語なのはまあ良いのですが、UIの日本語化も難しそうだったり、手間がかかりそうというのがあって断念しました。

UIが微妙に英語とかだと、「大丈夫かな」と思ったりしちゃいますよね。

そういう部分でも、日本発のサービスを使うメリットはあると気づきました。

運用のしやすさ

ひとり会社の弊社でいうと運用のしやすさの重要なポイントです。

例えば、Squareは現在JCBカードを強く希望するメンバー限定で使用しているのですが、初回に「請求書を作る」という運用作業が入ってしまいます。

それさえ作れば、毎月自動で定期請求書を送付してくれるのですが、運用的にはできればこの手間を省きたい…ということで、いったん候補から除外しました。

Square以外のサービスは、基本的にユーザーが購入をされたら、以降は自動決済になると思われます。

講座などの単品販売ができるか

今回は、コミュニティの月額決済の移行なのですが、実は単発の講座などの販売もしているので、それも同じサービスにいい感じに乗せられると良いです。

オンラインサロンでいうとCAMPFIREが超スタンダードなのですが、単品に関しては販売しづらいので、皆さんPeatixなどの他のサービスと組み合わせているそうです。

でも、できれば月額も単品も、同じサービス、同じページにまとめたいですよね。

現在募集中の初心者向けVBA講座のアイテムも公開していますよ。

初心者向けプログラミング講座【VBAコース第2期】
VBAによる簡単な実務向けのツールを作れるレベルまでのスキル習得を目指します。コミュニティにもご参加いただくことで、継続して学ぶ環境と仲間を得られるというのが最大の特長です。 受講にはノンプロ研の入会(有料)が別途必要になります。以下、URLから申し込みいたただけます。 ■開催概要 ・スケジュール:毎週2時間×...

しかも、STORES.jpではダウンロードコンテンツや電子チケットなどの販売もできますので、いろいろな展開ができそうですよね。

料率

当然、料率も安い方が良いわけです。

これまでのいろいろなポイントを踏まえると、STORES.jpかBASEということになります。

それで、検討している段階だったのですが、超タイムリーに以下のお知らせが来ました。

STORES.jpの料金プランが変更になると。

簡単に言うと

  • 無料プランで、これまで有料向けだったたくさんの機能が使えるようになる
  • 月額1980円のスタンダードプランに登録すれば、決済手数料が3.6%になる

ということです。

これで、STORES.jpの勝負ありとなりました。

移行完了後に「ノンプロ研」は価格改定をします

今回、決済サービスの移行を機に、価格改定をすることにしました。

現在4500円+税なのですが、8月以降に入会される場合は5000円+税となります。

いわゆる値上げです。

理由は複合的なのですが

  • うっかり移行手続き忘れの抑制をしたい
  • 増額分をSlack有料版導入の原資にしたい
  • 値上げの駆け込みあるのか試してみたい

といったところです。

あと1ヶ月半くらい移行期間があるので、どのような反応があるのか楽しみですが…後ほどご報告しますね。

まとめ

以上、コミュニティ向け決済サービスまとめとSTORES.jpに決めた理由についてお伝えしました。

信頼感…大事ですね。

それで、ちょっと思ったのですが、このようなビジネスを進める上で大事なサービスについて、どこかが「サービス終了」をしちゃうと、似たようなところは敬遠しちゃいますね。

さて、コミュニティの決済サービスの切り替えなんて、ドキドキすぎて2度とやりたくありませんが、学びもありましたし、この「実験」がどのような結果になるのかも興味があります。

また、本件に関連して、役に立つ発見や情報があればお伝えしていきますね。

どうぞお楽しみに!

Viewing all 2074 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>