ADVERTISEMENT

【Googleスプレッドシート】SalesforceのレコードをSheetsに同期!営業データの集計

【Googleスプレッドシート】SalesforceのレコードをSheetsに同期!営業データの集計
🛡️ 超解決

営業チームでSalesforceを使っていると、データをGoogleスプレッドシートに取り出して集計したい場面がよくあります。Salesforceの標準機能だけでは集計やグラフ作成が不便なこともあり、スプレッドシートの柔軟な計算機能や共同編集が役立ちます。この記事では、Salesforceのレコードをスプレッドシートに同期する具体的な方法を2つ紹介します。どちらの方法も、特別なツールを導入せずに実現できます。

【要点】Salesforceデータをスプレッドシートに同期する2つの方法

  • IMPORTRANGE関数でレポートを直接参照: SalesforceのレポートURLをIMPORTRANGEに指定することで、レポート結果をスプレッドシートにリアルタイムで表示します。
  • Apps ScriptでREST APIを定期実行: Apps Scriptを使ってSalesforceのAPIを呼び出し、任意のタイミングでレコードを同期できます。
  • QUERY関数で取得データを集計: 同期したデータをQUERY関数でフィルタリング・集計し、営業ダッシュボードに活用します。

ADVERTISEMENT

Salesforceデータをスプレッドシートに取り込む仕組み

Salesforceのデータをスプレッドシートに同期するには、大きく分けて2つの方法があります。1つはSalesforceのレポート機能を使い、エクスポートされたデータをIMPORTRANGE関数で参照する方法です。もう1つは、SalesforceのREST APIをApps Scriptから直接呼び出し、レコードを取得する方法です。前者は設定が簡単で、レポートを更新すればスプレッドシートにも反映されます。後者はより柔軟にデータを取得でき、自動実行スケジュールを組むことも可能です。

方法1: IMPORTRANGEでSalesforceレポートを参照する手順

この方法では、SalesforceのレポートをCSVでエクスポートし、そのURLをスプレッドシートに貼り付けます。ただし、直接IMPORTRANGEでSalesforceのレポートURLを参照できるわけではありません。実際には、レポートを「詳細レポート」として保存し、その結果をCSVとしてエクスポートしたリンクを利用します。ただし、SalesforceのレポートURLは認証が必要なため、直接IMPORTRANGEで開くことはできません。そこで、一度CSVをGoogleドライブにアップロードし、IMPORTRANGEでそのCSVを参照するという回避策を取ります。以下に手順を示します。

  1. Salesforceでレポートを作成・エクスポートする
    Salesforceの「レポート」タブから目的のデータを表示するレポートを作成します。レポートを実行したら、「エクスポートの詳細」ボタンから「CSV形式」でダウンロードします。
  2. CSVファイルをGoogleドライブにアップロードする
    ダウンロードしたCSVファイルをGoogleドライブの任意のフォルダにアップロードします。ファイル名は英語または数字にすると後で扱いやすくなります。
  3. スプレッドシートでIMPORTRANGEを設定する
    同期先のスプレッドシートを開き、セルに次のように入力します。
    =IMPORTRANGE("https://docs.google.com/spreadsheets/d/XXXXXXXXXX/edit?usp=sharing", "シート1!A:Z")
    ここでURLは先ほどアップロードしたCSVファイルをGoogleスプレッドシートとして開いたときのURLに置き換えます。CSVファイルをスプレッドシートで開くには、GoogleドライブでCSVファイルを右クリックし「アプリで開く」→「Googleスプレッドシート」を選択します。
  4. アクセスを許可する
    初めてIMPORTRANGEを使うと、セルに「#REF!」エラーが表示されます。そのセルにカーソルを合わせ、「アクセスを許可」ボタンをクリックして同じファイルへのアクセスを承認します。

方法2: Apps ScriptでSalesforce APIから同期する手順

Apps Scriptを使うと、SalesforceのREST APIを呼び出してデータを直接取得できます。この方法では、Salesforceの接続アプリを作成し、OAuth2.0認証を設定する必要があります。以下に手順を説明します。

  1. Salesforceで接続アプリを作成する
    Salesforceの設定から「アプリケーション」→「アプリケーションマネージャ」に進み、「新規接続アプリケーション」を作成します。OAuth設定で「アクセス権限スコープ」を追加し、「フルアクセス(full)」を含めます。作成後に「コンシューマ鍵」と「コンシューマ秘密鍵」をメモします。
  2. Apps Scriptプロジェクトを作成する
    スプレッドシートの「拡張機能」→「Apps Script」を開きます。プロジェクト名を「SalesforceSync」などに設定します。
  3. OAuth2ライブラリを追加する
    Apps Scriptの「ライブラリ」から「OAuth2 for Apps Script」(スクリプトID: 1B7FSrk5Zi6L1rSstXMoXtPvQ3jVq7Vt3M4j2w1YI)を追加します。バージョンは最新を選択します。
  4. スクリプトコードを記述する
    以下のコードをスクリプトエディタに貼り付けます。実際の値は各自の環境に合わせて変更します。
    var CLIENT_ID = 'あなたのコンシューマ鍵';
    var CLIENT_SECRET = 'あなたのコンシューマ秘密鍵';
    var INSTANCE_URL = 'https://yourInstance.salesforce.com';
    
    function getSalesforceService() {
      return OAuth2.createService('salesforce')
        .setAuthorizationBaseUrl(INSTANCE_URL + '/services/oauth2/authorize')
        .setTokenUrl(INSTANCE_URL + '/services/oauth2/token')
        .setClientId(CLIENT_ID)
        .setClientSecret(CLIENT_SECRET)
        .setCallbackFunction('authCallback')
        .setPropertyStore(PropertiesService.getUserProperties())
        .setScope('api refresh_token');
    }
    
    function authCallback(request) {
      var service = getSalesforceService();
      var authorized = service.handleCallback(request);
      if (authorized) {
        return HtmlService.createHtmlOutput('認証に成功しました!閉じてください。');
      } else {
        return HtmlService.createHtmlOutput('認証に失敗しました。');
      }
    }
    
    function syncRecords() {
      var service = getSalesforceService();
      if (!service.hasAccess()) {
        var authorizationUrl = service.getAuthorizationUrl();
        Logger.log('次のURLにアクセスして認証してください: ' + authorizationUrl);
        return;
      }
      var url = INSTANCE_URL + '/services/data/v56.0/query?q=SELECT+Id,Name,Amount,CloseDate+FROM+Opportunity';
      var response = UrlFetchApp.fetch(url, {
        headers: {
          Authorization: 'Bearer ' + service.getAccessToken()
        }
      });
      var result = JSON.parse(response.getContentText());
      var records = result.records;
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var data = [['Id', 'Name', 'Amount', 'CloseDate']];
      records.forEach(function(record) {
        data.push([record.Id, record.Name, record.Amount, record.CloseDate]);
      });
      sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
    }
  5. 認証と初回実行を行う
    スクリプトエディタで「syncRecords」関数を選択し実行します。ログに表示されるURLにアクセスしてSalesforceの認証を行います。認証後、もう一度「syncRecords」を実行するとシートにデータが書き込まれます。
  6. 定期実行を設定する
    Apps Scriptの「トリガー」から、syncRecords関数を定期的(例:毎日午前9時)に実行するよう設定します。これで自動同期が実現します。

ADVERTISEMENT

同期時の注意点とよくあるトラブル

IMPORTRANGEで#REF!エラーが出る

初回のIMPORTRANGE使用時には必ずアクセス許可が必要です。セルにカーソルを合わせ、表示される「アクセスを許可」ボタンをクリックしてください。許可後は問題なく表示されます。

Salesforce APIのレコード上限

REST APIの1回のリクエストで取得できるレコード数は最大2000件です。それ以上のデータを取得するには、クエリにOFFSETやNEXT_RECORDS_URLを使ったページネーション処理が必要になります。

OAuth認証の有効期限

Apps Scriptで取得したアクセストークンは一定時間で失効します。OAuth2ライブラリは自動的にリフレッシュトークンを使って更新するため、初回認証後は再認証不要です。

IMPORTRANGE方式とApps Script方式の比較

項目 IMPORTRANGE方式 Apps Script方式
設定の容易さ 簡単(CSVアップロードのみ) 中程度(OAuth設定・コード記述が必要)
データの鮮度 CSVをアップロードした時点で固定 トリガーで定期更新可能、API呼び出し時点の最新データ
編集の可否 読み取り専用 読み取り専用(書き込みも可能だが別途設定が必要)
レコード制限 CSVのサイズによる(スプレッドシートの行上限まで) 2000件/リクエスト、ページネーションで拡張可能
カスタマイズ性 低い(レポートの項目しか取得できない) 高い(任意のSOQLクエリで自由にフィールドを選択)

まとめ

Salesforceの営業データをスプレッドシートに同期する方法として、IMPORTRANGEを使った簡易同期とApps Scriptを使った柔軟な同期の2つを紹介しました。IMPORTRANGE方式は数分で設定でき、レポートの内容をそのまま反映できるため、手軽に始めたい方に向いています。Apps Script方式は、取得するデータを自由にカスタマイズできるうえ、定期的な自動更新も可能です。ぜひ、自社の営業プロセスに合わせて最適な方法を選び、QUERY関数などで集計ダッシュボードを作成してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。