![](http://bizboks.com/wp-content/themes/cocoon-master/images/b-man.png)
リモートになって、業務日報の記載が面倒だ。
カレンダーは、会議予約くらいしか使っていないよ。
何かと稼働時間の報告があるから、なんかいい方法ないかな。
リモートワークが始まり、業務日報を作成している会社が増えているそうです。(*1)
*1「日報制度や日々の業務報告を規則として導入しているか」という問に68.7%の回答がはい。(株式会社gamba調べ)
業務の報告として、稼働実績の報告が発生していませんか?実績の報告は、プロジェクト毎の活動時間報告など、いろんなところで発生しますよね。それに加えて、1日の業務日報を毎日提出するとなると、何とかしたいと思っていました。
私は解決策として、自分の活動実績を全部グーグルカレンダーに登録することにしています。
終業時にスプレッドシートに出力することで、報告ごとの集計が楽に行えています。
カレンダーや日報登録など、2重入力をしている方のヒントになれば幸いです。
本記事の内容
今回の仕組みについて説明します
今回のサンプルプログラム
GASを使用した効率化を進めてみませんか
今回の仕組みについて説明します
今回の仕組みは、カレンダーの予定をスプレッドシートに出力する単純な構造です。冒頭お話しした、いろいろな報告様式に加工することまではできません。
しかし、一日もしくは複数日の稼働実績をデータとして扱えるだけでも、報告時に楽になります。
実行手順は以下のようなものです。
1.スプレッドシートの検索条件を入力して、GASを実行する。(日付やキーワード)
2.スプレッドシートの出力シートにカレンダの1マスが1行の形式で出力される。
サンプルは以下のリンクを参照ください。
皆さんのマイドライブにコピーして動作の確認をお願いします。
/*******************************************************************************************
処理:起動時に、GASの実行メニューを追加する
*******************************************************************************************/
function onOpen(){
//メニュー一覧の作成
var myMenu=[
{name: "カレンダー出力", functionName: "outputCalendar"}
];
SpreadsheetApp.getActiveSpreadsheet().addMenu("GAS実行",myMenu); //メニューを追加
}
/*******************************************************************************************
処理:カレンダーの予定を抽出して、シートに出力する
*******************************************************************************************/
function outputCalendar() {
/*-----------------------------------------------------------------------------------------
初期処理
設定シートの取得、設定値の取得、出力設定の取得 (スプレッドシートの値をGASで使えるようにする)
------------------------------------------------------------------------------------------*/
// 設定シートの取得
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sheetParameter = spreadSheet.getSheetByName("検索条件");
// 設定値の取得
var iRowNo = 6; // 設定値の先頭行が6行目
var iColNo = 15; // 設定値の列Oは、15番目
const P_calendarId = sheetParameter.getRange(iRowNo, iColNo).getValue(); // カレンダーID
const P_startDate = new Date (sheetParameter.getRange(++iRowNo, iColNo).getValue()); // 取得開始日
const P_endDate = new Date (sheetParameter.getRange(++iRowNo, iColNo).getValue()); // 取得終了日
const P_reExclusion = new RegExp(sheetParameter.getRange(++iRowNo, iColNo).getValue()); // 除外ワード
// 出力設定の取得
const P_OutputStartDate = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 開始日時
const P_OutputEndDate = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 終了日時
const P_OutputTitle = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // タイトル
const P_OutputExplanation = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 説明
const P_OutputParticipant = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 参加者
const P_OutputPlace = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 場所
const P_OutputSheetname = sheetParameter.getRange(++iRowNo, iColNo).getValue(); // 出力シート名
const sheetOutput = spreadSheet.getSheetByName(P_OutputSheetname); // 出力シート
/*-----------------------------------------------------------------------------------------
抽出処理
カレンダーへのアクセス、出力条件指定 (カレンダーの予定をGASで使えるようにする)
------------------------------------------------------------------------------------------*/
//カレンダーのアクセス(getEvents)時に、開始日と終了日を設定して実行する。
var calendar = CalendarApp.getCalendarById(P_calendarId);
var events = calendar.getEvents(P_startDate, P_endDate);
/*-----------------------------------------------------------------------------------------
出力処理
タイトルの作成、カレンダーの予定をスプレッドシートへ転記
------------------------------------------------------------------------------------------*/
// シートの初期化
sheetOutput.clearContents();
// タイトルの作成
iRowNo = 1; // 出力値の先頭行が1行目
iColNo = 1; // 出力値の先頭列が1列目
if (P_OutputStartDate == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('開始時間'); // 開始日時
iColNo++;
}
if (P_OutputEndDate == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('終了日時'); // 終了日時
iColNo++;
}
if (P_OutputTitle == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('タイトル'); // タイトル
iColNo++;
}
if (P_OutputExplanation == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('説明'); // 説明
iColNo++;
}
if (P_OutputParticipant == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('参加者'); // 参加者
iColNo++;
}
if (P_OutputPlace == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue('場所'); // 場所
iColNo++;
}
// カレンダーの予定をスプレッドシートへ転記
iRowNo = 2; // 出力値の先頭行が2行目
for(let event of events){
if (P_reExclusion.test(event.getTitle())==false) continue; // 検索文字が含まれていたら次のイベントへ
iColNo = 1; // 出力値の先頭列が1列目
if (P_OutputStartDate == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getStartTime()); // 開始日時
iColNo++;
}
if (P_OutputEndDate == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getEndTime()); // 終了日時
iColNo++;
}
if (P_OutputTitle == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getTitle()); // タイトル
iColNo++;
}
if (P_OutputExplanation == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getDescription()); // 説明
iColNo++;
}
if (P_OutputParticipant == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getCreators()); // 参加者
iColNo++;
}
if (P_OutputPlace == '1') {
sheetOutput.getRange(iRowNo,iColNo).setValue(event.getLocation()); // 場所
iColNo++;
}
iRowNo++;
}
}
GASを使用した効率化を進めてみませんか
今回は単純なカレンダーの出力ですが、このような単純なことでも省力化を重ねていくことで、自分の時間を有意義なものに使用できるようになると思います。
まずは、GASの文法がわからなくても、ネットのサンプルを動かしてみて、業務の自動化を少しずつでも体験していきましょう。
今回は以上です。
コメント