営業チームで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を参照するという回避策を取ります。以下に手順を示します。
- Salesforceでレポートを作成・エクスポートする
Salesforceの「レポート」タブから目的のデータを表示するレポートを作成します。レポートを実行したら、「エクスポートの詳細」ボタンから「CSV形式」でダウンロードします。 - CSVファイルをGoogleドライブにアップロードする
ダウンロードしたCSVファイルをGoogleドライブの任意のフォルダにアップロードします。ファイル名は英語または数字にすると後で扱いやすくなります。 - スプレッドシートでIMPORTRANGEを設定する
同期先のスプレッドシートを開き、セルに次のように入力します。=IMPORTRANGE("https://docs.google.com/spreadsheets/d/XXXXXXXXXX/edit?usp=sharing", "シート1!A:Z")
ここでURLは先ほどアップロードしたCSVファイルをGoogleスプレッドシートとして開いたときのURLに置き換えます。CSVファイルをスプレッドシートで開くには、GoogleドライブでCSVファイルを右クリックし「アプリで開く」→「Googleスプレッドシート」を選択します。 - アクセスを許可する
初めてIMPORTRANGEを使うと、セルに「#REF!」エラーが表示されます。そのセルにカーソルを合わせ、「アクセスを許可」ボタンをクリックして同じファイルへのアクセスを承認します。
方法2: Apps ScriptでSalesforce APIから同期する手順
Apps Scriptを使うと、SalesforceのREST APIを呼び出してデータを直接取得できます。この方法では、Salesforceの接続アプリを作成し、OAuth2.0認証を設定する必要があります。以下に手順を説明します。
- Salesforceで接続アプリを作成する
Salesforceの設定から「アプリケーション」→「アプリケーションマネージャ」に進み、「新規接続アプリケーション」を作成します。OAuth設定で「アクセス権限スコープ」を追加し、「フルアクセス(full)」を含めます。作成後に「コンシューマ鍵」と「コンシューマ秘密鍵」をメモします。 - Apps Scriptプロジェクトを作成する
スプレッドシートの「拡張機能」→「Apps Script」を開きます。プロジェクト名を「SalesforceSync」などに設定します。 - OAuth2ライブラリを追加する
Apps Scriptの「ライブラリ」から「OAuth2 for Apps Script」(スクリプトID: 1B7FSrk5Zi6L1rSstXMoXtPvQ3jVq7Vt3M4j2w1YI)を追加します。バージョンは最新を選択します。 - スクリプトコードを記述する
以下のコードをスクリプトエディタに貼り付けます。実際の値は各自の環境に合わせて変更します。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); } - 認証と初回実行を行う
スクリプトエディタで「syncRecords」関数を選択し実行します。ログに表示されるURLにアクセスしてSalesforceの認証を行います。認証後、もう一度「syncRecords」を実行するとシートにデータが書き込まれます。 - 定期実行を設定する
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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
