こんにちは、blueです。
・Excelでアンケート依頼をした後、記載できていない人にリマインドメールを送りたい
といったことはないでしょうか?
今回は日程調整アンケートでのリマインドメールの自動化について説明します。
Office ScriptsとPower Automateを使えば、Excelに記載できていない人だけにメールを送ることが可能になります。
Excelでアンケート確認をされているような会社にとっては有効な方法となりますのでぜひ勉強していってください。
Office Scriptsを一から学んでみたい方は以下の書籍がお勧めです。TypeScriptの基本からPower Automateへの連携まで、OfficeScriptsを扱う為必要なすべての内容が書かれています。
Office Scriptsって何?という基本から知りたい方は以下の書籍がお勧めです。技術書ながら非常に読みやすい構成となっているので、本を読むのが苦手な人もストレスなく勉強できるかと思います。
今回のフロー
今回のフローは以下となります。
- Power Automateで定時にOffice Scriptsを実行させる
- Office ScriptsはExcel内から記載していない人をリストにし送付する
- Power AutomateからOutlookを使って送信を行う
図にすると以下になります。
必要なものはOffice Scriptsが入ったExcel OnlineとPower Automateになります。
次からその作成手順について説明します
作成手順
今回の作成手順は以下になります。
- 日程調整アンケートのExcelファイルを作成する
- 記載していない人だけの情報を取得するマクロを作成する
- Power Automateを使ってOffice Scriptsを実行し、取得した値をもとにメール送付を行う
今回はOffice Scriptsでのマクロの作成までについての説明をします。
Excelファイル作成
まずはExcelファイルについて説明します。
今回は「忘年会日程調整アンケート」として以下の様なファイルを作成しています。
ファイルが欲しい方はこちらをどうぞ
記載している内容は以下の4つです
- 名前
- メールアドレス
- 出席候補日時
- 返答済み
返答済みについては記載されていれば「○」、記載されていなければ「×」を出力する以下の関数をいれています。
=IF(COUNTA(D3:J3),"○","×")
これにより返答済みが「×」に対しての人のみ情報を取得するようにしています。
このファイルを今回はSharePointドキュメントライブラリに保管し、Office Scriptsを利用できる環境にします。
Office Scriptsの環境構築方法についての記事はこちら
Office Scriptsの全コード
まずはOffice Scriptsの全コードについて記載します。
function main(workbook: ExcelScript.Workbook): string[] {
let NoReplyPerson:string[]=[];
let tRow:number=1;
let i:number=0;
let sheet=workbook.getWorksheet("Sheet1");
while (sheet.getCell(tRow,1).getValue() !=""){
if(sheet.getCell(tRow,10).getValue() =="×"){
NoReplyPerson[i] = sheet.getCell(tRow, 2).getValue().toString();
tRow++;
i++;
}else{
tRow++;
}
}
console.log(NoReplyPerson)
return NoReplyPerson
}
詳しい内容について一つずつ説明します。
各コードの説明
function main(workbook: ExcelScript.Workbook): string[] {
function main関数はコードエディターを立ち上げたときに自動で作成されるコードです(コードエディターの立ち上げ方はこちら)。
:string[]はこの関数に対する戻り値の型です。今回は返答していない方のメールアドレスを配列として取得する為に記載しています。
注意点としてこれらの型はすべて小文字にしてください(意味合いが異なります。詳しくはこちら)
let NoReplyPerson:string[]=[];
let tRow:number=2;
let i:number=0;
let sheet=workbook.getWorksheet("Sheet1");
各変数をletキーワードで宣言しています。Office Scriptsでは宣言と同時に=で簡単に初期値を代入することができます(letキーワードについてはこちら)。
getWorksheetメソッドでWorksheetオブジェクトを取得しています(Worksheetオブジェクトについてはこちら)
while (sheet.getCell(tRow,1).getValue() !=""){
tRow++
}
while構文でB列の繰り返し処理を行っています(while構文についてはこちら)。
getCell(行番号,列番号)は範囲の左上のセルを基準にしてセルを取得するメソッドです(getCellメソッドについてはこちら)。
この場合tRow=2なのでA1セルを基準としたB3セルを取得することとなります。
「!=」は~でないを表すNot演算子です(Not演算子についてはこちら)。B列のセルが””(空白)になるまで処理を繰り返します。
「++」は1増やすインクリメント演算子です(インクリメント演算子についてはこちら)。ここではtRowを1増やして次の行にスライドしています。
if(sheet.getCell(tRow,10).getValue() =="×"){
NoReplyPerson[i] = sheet.getCell(tRow, 2).getValue().toString();
tRow++;
i++;
}else{
tRow++;
}
}
if構文で条件分岐を行っています(if構文についてはこちら)
getCellの10列目は11列目=K列を表しています。このセルの値が「×」の時に「NoReplyPerson~」の処理を行います。
一方「○」の場合はelse以下として1行増やす「tRow++」処理を行います。
NoReplyPerson[i]~はC列のメールアドレスを配列として取得するコードです。getValueメソッドで取得した値をi番目の配列として取得しています。
なおtoStringメソッドは文字列に変換する為に使います。
Office Scriptsでは取得する値も明確に型を指定する必要があります。VBAのように自動的に文字列や数値に変換してくれるわけではないので注意が必要です。
console.log(NoReplyPerson)
return NoReplyPerson
console.logメソッドはVBAのDebug.Printと似たようなもので以下の様にコードエディター上に出力してくれます。思い通りの取得ができているか確認する際に便利です。
またreturnメソッドによって 関数内のNoReplyPersonの配列を戻り値としています。
関数の戻り値は最初の行でstring[]と指定しているのでstring型の配列である必要があります。
結果として以下のlogが得られていれば成功です。
今回のまとめ
今回はリマインドメールの自動化についてOffice Scriptsでのマクロの作成について説明しました。
VBAとOffice Scriptsはプログラミング言語が異なる為、書き方は大きく異なります。
ただ、VBAの基礎があれば理解は早いので安心してください。
より早く理解する為に以下の書籍もおすすめします。
Office Scriptsを一から学んでみたい方は以下の書籍がお勧めです。TypeScriptの基本からPower Automateへの連携まで、OfficeScriptsを扱う為必要なすべての内容が書かれています。
Office Scriptsって何?という基本から知りたい方は以下の書籍がお勧めです。技術書ながら非常に読みやすい構成となっているので、本を読むのが苦手な人もストレスなく勉強できるかと思います。
コメント