いままでずっと、エクセルの話をしてきたのですが、ちょっと浮気をして、GoogleスプレッドシートやGoogle Apple Script(GAS)について、記載していこうかと思います。
はじめに、Googleスプレッドシートとは、ご存じGoogle社が提供している表計算ソフトになります。Gmailを持っている人であれば、使用することが可能です。Googleドライブの画面で、Googleスプレッドシートを作成することができます。
また、ExcelにはマクロであるVisual Basic Application(VBA)がありますが、GoogleスプレッドシートのマクロとしてGoogle Apple Script(GAS)が用意されています。Excelのマクロは、Visual Basic言語がベースであり、Googleスプレッドシートのマクロは、Java Script言語がベースとなっています。ベース言語に対して、アプリケーションを操作するための関数が追加で用意されている点は、双方あまり変わりません。
そして、どちらもマクロを動作させるためのボタンをシートに配置することは可能です。
大きく異なる点は、Excelマクロでフォームというと、UserFormを思い浮かべると思います。ExcelのUserFormは、簡単な操作でダイアログを作成して、マクロで制御させることが可能ですが、Googleが提供するフォームは、少し仕様が異なります。
Googleのフォームは、情報を集めるのに適しています。フォームの作成方法は簡単で、ラジオボタンやプルダウンリストなどを感覚的に配置することができ、人が入力しやすいフォームを完成させて、そのフォームのURLを配布します。例えば、アンケートや出欠席確認などに便利で、人がフォームを入力して、送信ボタンを押すと、自動で作成時に登録したGoogleスプレッドシートにデータが集められる機能が提供されています。このGoogleフォームは、プログラミング能力はまったく必要とされません。
このため、Googleフォームは、ExcelのUserFormのようにダイアログとして、マクロで制御することを目的には造られていません。Googleスプレッドシート上で、ダイアログを自作しようとした場合、htmlコードで作成することを求められます。( < input type=Text > や < input type=radio > 等) そのため、テキストボックスの配置をするためにコーディングしていく必要があり、Excelで作成するよりも、少しハードルが上がります。
その他の代替え案としては、シートをダイアログのように使用することは可能です。シートには、ボタンを配置してマクロを呼び出すことは可能で、また、データの入力規則を利用するとプルダウンリストの作成することもできます。
例えば、データベースのシートがあり、1レコードが1行で記載されていて、複数の項目列を持つ場合に、編集しやすいように、1データの内容をダイアログに取り出して、編集を加えて、データベースへ内容の更新をしていきたいと考えた場合、ダイアログを必ずしも使用しなくても、1レコードのデータを表示させるシートを作成して、そのシートに情報を表示させて、編集を行い、データベースへ書き込むような仕組みとすると、Htmlでダイアログをコーディングしなくても、作成することは可能です。
Excelではイベントをトリガとして、マクロを動作させることができますが、Googleスプレッドシートのマクロ(Google Apple Script[GAS])でもイベントをトリガとして、スクリプトを動作させることが可能です。
用意されているトリガは大きく分けて2種類あり、スプレッドシートの起動時、編集時、変更時、フォーム送信時などのトリガと、時間主導型があります。時間主導型は、実行する日付や時刻を設定したり、1時間毎や5分毎をトリガにマクロを動作させることができます。
この時間主導型は、Excelと異なり、PCを起動していなくても、サーバ上で自動にいつまでも動作させることができます。(ただし、一日に動作させられるマクロの処理量(時間)制限は存在します。)
Excelで、ウェブからデータを取得することを考えた場合、Excel2013から導入されたWEBSERVICE関数がありますが、取得可能なデータ量に制限があります。一方、Googleスプレッドシートには、IMPORTHTML関数やIMPORTXML関数があり、データ量に制限はありません。
しかし、Google検索バーからの検索結果を得ようとすると、Google検索バー側でGoogleスプレッドシートからの参照であることを、確認して制限される場合があります。現状は、取得できる場合とできない場合などがあり、不安定な動きとなります。
ウェブから情報収集する行為は、スクレイピングと呼ばれます。ExcelであってもGoogleスプレッドシートからであっても、一部サイトは、スクレイピング行為を禁止していますので、データを取得するサイトの規約は必ず確認してから、これらの関数は使用してください。
Googleスプレッドシートでは、関数から配列が返されると、複数のセルにデータが表示されます。これは、Excel 2019より対応されたスピル機能と同等の動作となります。
関数から配列が返されると、関数を記述したセルから下や右に向かって、複数のセルにデータが表示されます。(一次元配列が結果となる場合は下の行に、二次元配列が結果となる場合は、複数列と複数行がその関数によって使用されます。)
Googleスプレッドシートで作業を行う場合、必ずネットワークがつながっている必要があります。オフラインの環境で作業したい場合は、Chromeの拡張機能に「Google オフライン ドキュメント」をインストールして使用できますが、オンラインで使用することが推奨されている。
Excel Onlineには、通常のExcelと比べると、機能が削られています。そして、マクロの機能もサポート外であり、Excel Online上でマクロを動作させることはできません。
Googleスプレッドシートは、ウェブ上でマクロを作成し、動作確認するため、ウェブ上でマクロを動作させることができます。
Googleスプレッドシートでは、正規表現の検索や置換を標準搭載しています。エクセルマクロでは対応されていないので、アドインによる機能追加などの手順が必要です。
ExcelとGoogleスプレッドシートは、それぞれ得意とする点があるため、使い分けて使っていくことが良いのではないかと思います。広範囲に情報収集するためのツールとしては、Googleスプレッドシートが有効です。メモ帳代わりに外出先で、データを書き込むなら、GoogleスプレッドシートでもExcel Online(Excelアプリ & OneDrive)でも大差はありませんが、Googleスプレッドシートは、常にネットワークとつながっている環境が必要です。一方、Excelは、同期するときだけ、ネットワークが必要になるため、パケットの節約を考えるなら、Excelかもしれません。
収集した情報を、編集、分析、書類化していくには、データ量が多いのならExcelが有効です。Version管理(構成管理)が必要な書類であれば、ExcelとSubVersion(オープンソースのフリーソフト)を組み合わせて管理するのがおすすめです。現状、Googleスプレッドシートでは、更新履歴は表示されますが、Versionを前に戻すことが現状、対応されていません。もちろん、ファイル名を変えながら保存することは可能ですが、Googleドライブの容量を意識する必要があります。Googleスプレッドシートは、PC内でデータを保存することができないため、すべてのGoogleスプレッドシートをGoogleドライブに保存する必要がでてきます。開示するファイルと内部で管理するファイルを分けたい場合は、Excelで管理していくことが良いのかなと思います。
配布先に対して開示する方法として、最新の情報のみが共有されればよいという状況であれば、Googleスプレッドシートでも、Excel Onlineでも問題ありません。
マクロを動作させて、常に最新の情報を参照したい場合は、Googleスプレッドシートが有効です。
場面場面、状況、条件によって、どちらが向いているのかが、変わってくるので、それぞれの利点を把握しておき、適切な選択をしていく必要があると思います。