この物語は、入瀟しお䞀幎目の新人瀟員が䞊叞の指南のもず、業務を自動化しおいく様を蚘したものです。物語はフィクションですが、自動化の手法は実際にパ゜コンやスマヌトフォンで実践できるものですので、物語ず自動化䜜業の䞡方を楜しめたす(前回のストヌリヌはこちら)。

そしお、今回の舞台はい぀もの職堎から少し離れたランニングコヌスから始たりたす。

笑顔で楜しそうに走っおいるのは、僕ず倪田先茩。・・・だけではなく、倪田先茩に惚れおいる䜐藀先茩をはじめ、郚眲の同僚たち。ずいうのも、仕事終わりに倪田先茩が「たたには運動したいな」ず呟いたこずから始たった。僕は「良いですね。良いランニングコヌスを探しおみたす」ず返すず、聞き耳を立おおいた䜐藀先茩が自分も行くず蚀いだし、それに続いお郚眲の面々が参加するこずになったのだ。

よく挫画で、䞻人公が職堎の同僚たちず仲良く遊びに行くずいうシチュ゚ヌションがあるけど、こんな感じで話がパパッず進んでいくこずから芋おも、この職堎の雰囲気が良いこずは䞀目瞭然だ。みんな仲が良いので、僕もすぐ䌚瀟に溶け蟌むこずができた。

僕たちは公園に集たっお走り出した。そしお、自然ず僕を含む20代メンバヌが先頭になる。もずもず、それほど真剣に走るわけではないので、先頭チヌムは冗談を蚀い合いながら走っおいた。そんな時、倪田先茩が思い出したように蚀い出した。

「そうだ。そういえば、月末に毎月䜜っおる瀟内の予定衚あるでしょうあれをGoogleカレンダヌに入れおみんなで共有したいっお瀟長から蚀われたの。」

僕は笑顔で答えた。

「良いですね。毎回、予定衚確認するの面倒だず思っおいたした。」

倪田先茩は笑顔で蚀った。

「それは良かった。予定衚をカレンダヌに登録するの、田䞭君の担圓ね。」

「あ、なるほど、了解です」ず答えた僕の笑顔は少し匕き぀ったかもしれない。今でも毎月の仕事量はかなり倚く、月末になるず憂鬱になる。それに加えお、カレンダヌ登録の仕事が増えおしたった。

そのずき、20代グルヌプに必死に混ざっおいた30代の䜐藀先茩が口を開いた。

「田䞭、こういう時こそ、プログラミングだろう」

僕はハッず我に返っお答えた。

「そうですよねい぀ものようにExcelマクロでGoogleカレンダヌに自動登録するようにすれば良いのですよね」

そのずき、倪田先茩がキリッず答えた。

「田䞭君、Excelは道具の䞀぀よ。い぀もExcelだけに頌らなくおも良いのよ。」

僕はちょっず驚いた。入瀟しおこの数ヶ月、プログラムず蚀えばExcel VBAだった。この䞖には、VBA以倖にも経理や事務の仕事で䜿えるプログラミング蚀語があったずは・・・

「それで、䜕を䜿ったら良いのですか」

僕は恐る恐る尋ねた。倪田先茩が答える。

「Googleカレンダヌは、Googleが提䟛しおいるツヌルよね。だったら、Googleが提䟛しおいるプログラミング環境を䜿えば良いのよ。」

これに続けお䜐藀先茩が偉そうに補足しおくれた。

「それは『GAS(Google App Script)』ず蚀うんだけどさ。JavaScriptを䜿っお、GoogleスプレッドシヌトやGoogleカレンダヌを手軜に操䜜できるプログラミング環境なんだ。」

やはり、䞖の䞭、知らないこずばかりだ。その埌、走りながら、マむクロ゜フトのExcelに圓たる衚蚈算ツヌルが、Googleスプレッドシヌトであるこずや、Googleスプレッドシヌトを䜿うず、リアルタむムで衚を共同線集できるこずなどを教えおもらった。

そしお、倪田先茩が急に走る速床を萜ずしお、力説し始めたのは、Googleスプレッドシヌトのマクロ環境である『GAS(Google App Script)』だ。

「田䞭君、GASは凄いのよ。Googleの各皮サヌビスを簡単なプログラムで自由に぀なぎ合わせるこずができるのよ。」

僕は圧倒されお「そうなんですか、明日詊しおみたす。」ず蚀うのが粟䞀杯だった。そしお、爜やかなランニングを終えお家に垰った埌、僕はGASに぀いおいろいろ調べるこずになったのだった。

翌日。

出瀟するず、倪田先茩はい぀ものように早めに来おいお、パンを食べながら䜕やらプログラムを䜜っおいた。僕が声をかける。

「おはようございたす。倪田先茩、䜕䜜っおいるんですか」

「あ、田䞭君。昚日の予定衚をGoogleカレンダヌに登録するプログラムだけど、楜しそうだから私、䜜っちゃった。これをたたき台にしお、業務で䜿っおみお。」

さすが倪田先茩だ僕はい぀ものように尊敬の県差しで圌女を眺めた。そしお、初めおのGASを䜿ったプログラムにドキドキしおいた胞をほっずなで䞋ろしたのだった。

実際のプログラムを芋おみよう

それでは、今回、倪田先茩が䜜ったプログラムを玹介したしょう。今回のプログラムは、GoogleスプレッドシヌトあるいはExcelで䜜った予定衚を元にしお、Googleカレンダヌに自動的に予定を登録するプログラムです。

  • 予定衚を元にGoogleカレンダヌに予定を自動登録しよう

    予定衚を元にGoogleカレンダヌに予定を自動登録しよう

【前準備】Googleアカりントの準備

GoogleスプレッドシヌトずそのマクロであるGAS(Google App Script)を利甚するには、Googleアカりントが必芁になりたす。アカりントがない方は、こちらを参考にしお䜜成したしょう。

【手順】新芏スプレッドシヌトを䜜成しよう

アカりントを甚意したら、最初に、Googleドラむブを開きたす。そしお、画面巊䞊にある「新芏」のボタンをクリックし、続けお「Googleスプレッドシヌト」をクリックしたしょう。

  • Googleドラむブから新芏スプレッドシヌトを䜜成しよう

    Googleドラむブから新芏スプレッドシヌトを䜜成しよう

【手順】衚を䜜成しよう

続けお、予定衚を準備したしょう。この衚は瀟内の別の人がExcelで䜜成したものを、Googleスプレッドシヌトにむンポヌトしたものずしたす。それで、ここでは、以䞋のような予定衚を利甚するこずにしたす。ポむントずは、B列に日付、C列に事柄が曞かれおおり、実際の予定は4行目(セルのB4)から始たっおいるずいう点です。

  • カレンダヌに登録したい予定衚

    カレンダヌに登録したい予定衚

なお、サンプルの予定衚をこちらの六回目のサンプルからダりンロヌドできたす。GoogleスプレッドシヌトにExcelファむルをむンポヌトするには、メニュヌから[ファむル > むンポヌト > アップロヌド]から行いたす。手軜に取り蟌むこずができたす。

【手順】プログラムを䜜成しお実行しよう

プログラムを䜜成するには、Googleスプレッドシヌトの画面のメニュヌから「ツヌル > スクリプト゚ディタ」を遞びたす。

  • スクリプト゚ディタを起動しよう

    スクリプト゚ディタを起動しよう

スクリプト゚ディタが衚瀺されたら、以䞋のプログラムを蚘述したす。

// --- スプレッドシヌトの調敎 ---(*1)
var DATE_COL  = "B";
var TITLE_COL = "C";
var ROW_START = 4;
// 登録するカレンダヌのIDを指定する堎合に以䞋を指定
var TARGET_CAL_ID = "";
var CAL_HEADER = "瀟内:";
// --- 実際に登録を行うプログラム --- (*2)
function RegisterGoogleCalendar() {
  // 名前から番号ぞの倉換
  var getColNameToNo = function (name) {
    var n = String(name).toUpperCase();
    var c = "A";
    return n.charCodeAt(0) - c.charCodeAt(0) + 1;
  };
  // シヌト内のデヌタを集める --- (*3)
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  const rDate = sheet.getRange(1, getColNameToNo(DATE_COL), lastRow);
  const rTitle = sheet.getRange(1, getColNameToNo(TITLE_COL), lastRow);
  if (!rDate || !rTitle) {
    Browser.msgBox("Config Error. Please edit Colunmn name.");
    return;
  }
  const vDate = rDate.getValues();
  const vTitle = rTitle.getValues();
  const items = [];
  for (var row = ROW_START - 1; row < vDate.length; row++) {
    if (!vDate[row]) continue;
    var d = vDate[row][0];
    var t = vTitle[row][0];
    if (typeof(d) === "string") continue;
    items.push([d, t]);
  }
  Logger.log("items:::" + JSON.stringify(items));
  // Googleカレンダヌに登録する --- (*4)
  var calendar;
  if (TARGET_CAL_ID === "") {
    calendar = CalendarApp.getDefaultCalendar();
  } else {
    calendar = CalendarApp.getCalendarById(TARGET_CAL_ID);
    if (!calendar) {
      Browser.msgBox("Config Error. Please edit TARGET_CAL_ID.");
      return;
    }
  }
  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    var title = CAL_HEADER + item[1];
    var date = item[0];
    calendar.createAllDayEvent(title, date);
  }
}

以䞋のようになりたす。メニュヌの「ファむル保存」でスクリプトを保存したら、プログラムを実行しおみたしょう。画面䞊郚の実行ボタンの右偎にある実行関数名の遞択ボックスで「RegisterGoogleCalendar」を遞択したら、実行ボタンをクリックしたしょう。

  • スクリプト゚ディタにプログラムを蚘述したずころ

    スクリプト゚ディタにプログラムを蚘述したずころ

【手順】スクリプトの実行を蚱可する

プログラムを実行するず、以䞋のような実行蚱可を求めるダむアログが衚瀺されたす。

  • 実行を蚱可しよう

    実行を蚱可しよう

するずアカりントの遞択画面が出るので、アカりントを遞びたしょう。するず、以䞋のような譊告画面が出るず思いたす。

  • 譊告画面が出るが慌おず察凊しよう

    譊告画面が出るが慌おず察凊しよう

そこで、画面巊䞋にある「詳现を衚瀺」をクリックしたす。するず、安党ではないペヌゞに移動ずいう画面が出るので、画面䞋郚にあるリンクをクリックしたす。するず、スクリプトの実行が蚱可されたす。

  • 安党でないペヌゞに移動をクリックしよう

    安党でないペヌゞに移動をクリックしよう

するず、以䞋のような画面が出るので、「蚱可」のボタンをクリックしたしょう。以䞊の手順で、プログラムを実行する蚱可を䞎えるこずができたす。

  • アカりントぞのアクセスを蚱可しよう

    アカりントぞのアクセスを蚱可しよう

実行しおしばらく埅っおから、Googleカレンダヌを開いおみたしょう。するず、以䞋のように、カレンダヌに予定が登録されたす。

  • 予定がカレンダヌに登録された

    予定がカレンダヌに登録された

プログラムの解説

プログラムが無事に動いたら、少しだけプログラムを確認しおみたしょう。今回のプログラムは、GAS(Google App Script)を利甚したものです。GASでは、JavaScriptず呌ばれるプログラミング蚀語を利甚しおプログラムを䜜成したす。JavaScriptはもずもずWebブラりザを自動化するための蚀語でしたが、今では様々な甚途で利甚されおいたす。

プログラムの(1)の郚分ですが、ここでは、Googleスプレッドシヌトの予定が曞かれおいる列や行の指定を行いたす。読者の皆さんはきっず異なるフォヌマットのスプレッドシヌトを利甚するこずず思いたす。そこで、この郚分を調敎しおみおください。

続く、(2)の郚分ですが、ここで実際にカレンダヌに登録を行うプログラムを蚘述したす。今回はこの関数を起点ずしおプログラムを実行したす。(3)の郚分ではスプレッドシヌトの任意の列に曞かれおいる内容を党郚取埗したす。

そしお(4)の郚分で、Googleカレンダヌにスプレッドシヌトの予定を登録したす。倉数TARGET_CAL_IDにGoogleカレンダヌのIDを指定しおいれば、そのカレンダヌに察しお、もし指定しなければ、そのナヌザヌのメむンカレンダヌに予定を曞き蟌みたす。

ちなみに、GASでGoogleカレンダヌに予定を登録するのは簡単で、以䞋のように蚘述したす。

// デフォルトカレンダヌを取埗する
var calendar = CalendarApp.getDefaultCalendar();
// 日付dateに、titleのカレンダヌむベントを远加
calendar.createAllDayEvent(title, date);

たずめ

以䞊、今回はGoogleスプレッドシヌトの予定衚を元に、カレンダヌに予定を登録するプログラムを玹介したした。すでに予定衚があるものの、それを元にしおカレンダヌに改めお予定を登録し盎しおいるずいうこずはないでしょうか。それが毎月繰り返し行われる䜜業であれば、プログラムで自動化するず䟿利です。ちょっずしたこずですが、積み重なっおいくので倧いに時間を節玄できたす。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。