WEBマーケでGAS使ったら作業がなくなったはなし
GAS(ガス)って、ご存知でしょうか。
Google Apps Scriptです。Google が提供しているプログラミング言語のことです。わたしはつい最近知りました・・・。
実はいま、新しいボランティア先でWEBマーケティングのお仕事をやらせていただいてるのです。が、どうも作業色が強く…!せっかくなので、GASで自動集計できるようなスプレッドシートを作ってみました。
今回は、GASって簡単だったよ、めちゃくちゃ時短になったよって話です。WEBマーケティングの作業がしんどい人とか、楽したい人の参考になれば幸いです。
(我ながら、noteのテーマが散らかってるw)
もともとの作業の流れ
ボランティアの流れはこんな感じです。
毎週月曜日に、Google Analytics(WEB分析ツール)から直近1週間分のデータをダウンロードし、エクセルに貼り付け。ピボットテーブルを更新して、当月の累計実績と当月末の見込み値を算出して社員さんに報告(エクセル送付+打合せ)する、といった流れでした。
ちょっとアレかなと思った点。
作業としては単純なのですが、エクセルデータが15MB越えでして、これが毎週量産されてしまう。(いや上書きすればいいんですけどね💦)
月末、月初は週次で分けれないので2回同じ作業が必要。
1作業に30分はかかり、その後の本願であるマーケティング分析はエイヤーになりがち(これは本当にごめんなさい)
あ、わたしのボランティアの任期、たった三カ月だ。このままじゃ、マーケティングのマの字を知るまえに卒業してしまう💦危機感
そんな時、なんと世の中にはGAS(Google Apps Script)というものがあるらしい、と(これまた)Voicyの木下斉さんから入れ知恵を受け、せっかくなのでこのWEBマーケ作業でやってみることにしました。
やりたいことの分解
プログラムするにあたり、まずは既存エクセルを読み込んで自動化したいことを分解。
欲しいデータ:
PV(ページビュー、閲覧数)
CV(コンバージョン、会員登録数などの成果のこと)
※いずれもOrganic やPaid、Socialなどのチャネル別がほしい!
それぞれの時間単位:
毎週月曜~日曜の週次
当月分(1日~直近の日曜日まで)
月次
グーグルスプレッドシートで出したいアウトプット:
チャネル別×週次のピボットテーブル
月次実績のグラフ
当月の見込み値
でも、最初っからこんなにきれいに分解できてなくて。ググって、試して、やれることを確かめながら進めました。
ググれば何でも出てくる時代
ほんと、いい時代ですね。ググれば何でも出てくるんですもん。幸い、本を買って体系的に勉強などせずに、基本ネットのコピペで走らせることができました。ありがたい~。
「GAS GA 取得」とか「GAS グーグルスプレッドシート 」「GAS GSS 範囲指定」とか手当たり次第検索。このあたりのサイトにお世話になりました。
週次のPVを自動で落とす仕組み
さて、さっそくコードにいきます。全部書くときりがないので、週次のPVの流れだけ載せます・・。
まずは、毎週Googleアナリティクスからチャネル別のページビュー数を取得し↓
別のシート「data_PV」に転記する、って仕組みをつくりたい。↓
そして、この週次データが蓄積されたシートを基に、チャネル別×週次のピボットテーブルを作りたい。↓
コードはこちら。関数名は「getGoogleAnalyticsPV」にしました。データ取得とデータ転記を一つの関数に入れちゃったのでコードが長めですが、やってることは実は単純なんです。
//◆週次のPVをAPIから取得してdata_PVに貼り付け
function getGoogleAnalyticsPV() {
//コンテナバインドスクリプトに紐づくスプレッドシートのアクティブシートを取得
let sheet = SpreadsheetApp.openById("スプレッドシートのID");
let Sheet_PV = sheet.getSheetByName('PV');
//スプレッドシートからグーグルアナリティクスのビューIDと開始日、終了日を取得する
//セルを範囲で取得する
//getRange(row, column [, numrows [, numcolumns]])
//row [int] 指定する範囲の行番号。
//column [int] 指定する範囲の列番号。A列を1とする。
//numrows [int] (省略可)範囲の行数を指定する。デフォルト1。
//numcolumns [int] (省略可) 列数を指定する。デフォルト1。
let setting = Sheet_PV.getRange(2, 1, 1, 3).getDisplayValues();
//グーグルアナリティクスから取得する指標データを設定する
let metrics = "ga:pageviews,ga:sessions,ga:users";
//グーグルアナリティクスのディメンションで「デフォルトチャネルグループ」を設定する
let dimensions = "ga:channelGrouping";
//表示順はページビュー順にソートする
let sortType = "-ga:pageviews";
//Google Analytics APIリクエストして、グーグルアナリティクスのデータを取得する
//順番に取得する ⇒ let metrics = "ga:pageviews,ga:sessions,ga:users";
let gaData = Analytics.Data.Ga.get(
setting[0][0],
setting[0][1],
setting[0][2],
metrics,
{
'dimensions': dimensions,
'sort': sortType
}
).getRows();
//Google Analytics APIから取得した2次元配列のデータをスプレッドシートに書き込む
//4行目、1列目から書き出す
Sheet_PV.getRange(4, 1, gaData.length, gaData[0].length).setValues(gaData);
//週次のPVデータをコピー
var SS_CopyFrom =SpreadsheetApp.openById("スプレッドシートのID");
var Sheet_CopyFrom = SS_CopyFrom.getSheetByName('PV');
//元データの最終行、最終列を取得
var LastRow = Sheet_CopyFrom.getLastRow(); //最終行を取得
var LastColumn = Sheet_CopyFrom.getLastColumn(); //最終列を取得
//元データの取得した最終列、最終行までに入力された値を取得する。
var CopyValue = Sheet_CopyFrom.getRange(4,1,8,6).getValues();
//貼り付け先のスプレッドシートのIDを指定してシート名を指定する
var SS_CopyTo = SpreadsheetApp.openById("スプレッドシートのID");
var Sheet_CopyTo = SS_CopyTo.getSheetByName('data_PV');
const LastRow_To = Sheet_CopyTo.getLastRow();//最終行を取得
//コピーした値を貼り付ける。
Sheet_CopyTo.getRange(LastRow_To+1,1,8,6).setValues(CopyValue);
}
で、毎週月曜日の何時に、自動で実行されるように設定!
これを、週次だけじゃなくて月次、当月実績で作る。そしてそれぞれCVでも。すると、関数は計6個に…w
その他、見込みが出るシートなども作成して、社員さんにご提案したところ・・・幸いなことに許可をいただけました😭エクセルから卒業できる!ありがとうございます!
GAS、コピペでいいからやってみてほしい
やってみての感想。
GASは、ググれる人+コピペできる人ならやれます!さらに環境構築がいらず、webでできるのでとっつきやすいです!
もうね、生産性が格段に上がります。時間をかけたいものに集中できるってすばらしい。言語は何であれ、一回やってみると見える景色が変わってくるかもしれません。面倒くさいエクセル作業を抱えている方は、ぜひチャレンジしてみてはいかがでしょうか。
・・・とはいえ、プログラミングって、なんか近寄りがたさを感じますよね。きっと、わたしがGASにスッとチャレンジできたのは、Python(パイソン)をいじった経験があるからかもしれません。
関数とか、セルから値だけを取り出すこととか。コードの基本的な構成や、エラーの読み方など。ベース+経験があるから、別の言語でもなんとなくで乗り切れちゃったのかも。
だからこそ、スタートは何の言語であれ、まずは何かのプログラミングをやってみると、新しい世界が開きやすくなって好循環が生まれるなぁと感じた次第です。ぜひ、つまらん作業はパソコンに押し付けて楽しましょ~。
最後までお読みいただきありがとうございました。
おしまい