ExcelでGoogle Analyticsを利用する

#はじめに
Google Analytics Advent Calender 15日目の記事です

この記事は以下の様な方々に捧げます

* Web以外のデータをGoogle Analyticsの様に計測してみたい
* WebのデータとWeb以外のデータをつなぎあわせたい
* ExcelでGoogle Analyticsを使ってみたい
* Google Analytics × IoTで何かしらやってみたい

Measurement Protocolに関しては、[7日目](http://qiita.com/1987yama3/items/648f08045d875650b4ad)とか[14日目](http://qiita.com/ryo_hisano/items/4faaa7f80966a0c3b6ea)でも紹介されているので、ぜひ読んでみてください。むしろ、この記事よりも役立つことをみなさんお書きになっているので、そっちを読んだほうが有益です（笑）

##概要

ExcelのマクロであるVBAを使って、GAにアクセスデータを飛ばしてみたいと思います。

##Measurement Protocol とは

Measurement Protocolとは、ひとことで言うとGoogle Analytics（以下、GA）の計測方法です。Measurement Protocol自体が、Web以外のモノを計測する方法・・・というわけではなく、そもそものWebのGAもMeasurement Protocolを使っています。

そのWebも使っているGAの計測方法を、君たちお好きに使っていいよ！というのがMeasurement Protocolなわけです。

Measurement Protocolの仕様に則っていれば様々なデータが計測できるので、オンライン・オフライン問わずGAにデータを飛ばすことが可能になります。

##仕組み

公式のリファレンスは[こちら](https://developers.google.com/analytics/devguides/collection/protocol/v1/reference?hl=ja)

他のQiita記事でも触れられていますが、Measurement ProtocolはHTTPによるビーコンアクセスです。つまり、GAはビーコン画像（1x1の透明なGIF画像）を読むことで計測データを飛ばしています。そのビーコン画像のURLに様々なパラメーターを渡すことにより、ブラウザやデバイスなどの情報も計測できるようになっています。

もっと具体的にいうと以下のURLを読み込むと計測されます。


```:HTTP版
http://www.google-analytics.com/collect
```

```:HTTPS版
https://ssl.google-analytics.com/collect
```

今回は、このURLを利用して、ExcelからGAの計測を実現してみます。

#使用例

今回は、以下の様なコードを使って検証しました。
Excelファイルの中にボタンを仕込んでおいて、それを押すと以下の処理が呼ばれてデータが飛ぶような仕組みになっているというイメージです。

例えば業務等でExcelファイルをフォーマットとして、
アンケートや申請書を社内で使用することがあると思います。
で作った場合に、プルダウンで選んだ項目をページ（イベントでも良い）として飛ばしたり、入力した項目を集計するために飛ばしたりして、社内の情報を集約するというのも一つの手段かと思います。（ただその場合、集計を取るすべてのファイルにマクロを仕込むはめにはなってしまいますが・・・）

```vbnet:Excelで計測テスト用コード

'=============================================================
' postGA  GAへデータの送信を行なう
' 
' パラメーター
' cliendId : クライアントの識別（ブラウザで言うCookie ID）
' pagePath : どの階層のページか
' uid : ユーザーID（ユーザーコントロールで使用する）
' reffer : どこからきたのか。リファラー。（任意）
'=============================================================
Public Function postGA(ByVal cliendId As String, ByVal pagePath As String, ByVal uid As String, Optional ByVal reffer As String = "")

    Dim result As String

    '-----------------
    'リクエスト生成
    '-----------------
    'URL（必要に応じて変更）
    Dim url As String
    url = "http://www.google-analytics.com/collect"
    
    If reffer <> "" Then
        reffer = "&dr=" & UrlEncodeUtf8(reffer)
    End If

    'パラメータ（必要に応じて動的に生成）
    Dim paramStr As Variant
    'UA番号はご自身のものに変更してください
    paramStr = "&v=1&tid=UA-XXXXXXXX-Y" & reffer & "&cid=" & cliendId & "&uid=" & uid & "&t=pageview&dp=%2F" & pagePath
    

    '--------------
    'POST実行
    '--------------
    Dim xmlhttp As MSXML2.xmlhttp
    Set xmlhttp = New MSXML2.xmlhttp

    '方式をPOSTに設定
    Call xmlhttp.Open("POST", url, False)   
    Call xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    'パラメータセットし、URLを叩く
    Call xmlhttp.send(paramStr)  

    '--------------
    '応答取得
    '--------------
    Dim retCd As String
    'ステータスコード取得
    retCd = xmlhttp.Status  

    If retCd <> 200 Then
          result = "error:" & retCd
    Else
        '200番なら、結果HTML取得
        result = StrConv(xmlhttp.responsebody, vbUnicode, 1041)      
    End If
    
    '結果を返す
    postGA = result
    
End Function



Public Function UrlEncodeUtf8(ByVal strSource As String) As String
    Dim objSC As Object
    Set objSC = CreateObject("ScriptControl")
    objSC.Language = "Jscript"
    UrlEncodeUtf8 = objSC.CodeObject.encodeURIComponent(strSource)
    Set objSC = Nothing
End Function
```

###実際の画面
Excelで使うとこんな感じになります。
（画像クリックでYoutubeに飛びます）

[![GAの画面](http://img.youtube.com/vi/kEAomtPzb6Y/0.jpg)](http://www.youtube.com/watch?v=kEAomtPzb6Y)

#最後に

今回はExcelでもMeasurement Protocolが使えるよ！ということを紹介するのが主になった記事なので、実際の業務ではあまり「ExcelマクロでGA計測！」なんてことは無いかもしれません。HTTPアクセスさえちゃんとできれば、GAのMeasurement Protocolはどこからでもアクセスすることができるので是非使ってみてください。

#余談

どちらかというと、昨今目覚ましいIoTデバイスなどに組み込んで、センサー値をGAに飛ばすなどのほうが面白いかもしれません。