LoginSignup
0
0

2つのGoogleスプレッドシートのデータを電話番号をキーにして統合する

Last updated at Posted at 2023-11-17

スプレッドシートの内容を合成する

【Google SpreadSheet A】: HubSpotの名刺スキャンで取り込んでエクスポートしたデータ
【Google SpreadSheet B】: Google Formで登録した追加情報データ
があります。AにもBにも電話番号の情報が入っているので、これをキーにして同一人物を特定し、データを統合したい、という事例です。HubSpotのAPIを使用してHubSpotのデータを直接更新していく方法もあると思いますが、今回は目視で確認したかったので、一度、両方のデータを【Google SpreadSheet C】に合成出力して、それをインポートする、という方法をとりました。

統合するために書いたスクリプト

効率的ではないかもしれませんが、とりあえず動きます。[拡張機能]→[Apps Script]からApps Scriptを出して下記を登録してください。

function formatPhoneNumber(phoneNumber) {

  //空白など
  if(!phoneNumber || phoneNumber.length < 3){
    return phoneNumber
  }

  // ハイフンを取り除く
  var cleanedNumber = phoneNumber.toString().replace(/-/g, '');

  // 数字以外を除去する
  var numericString = cleanedNumber.toString().replace(/\D/g, '');

  return numericString;
}

//電話番号の検索
function searchRow(GFormSheet, col, tel) {
  var rows = GFormSheet.getDataRange().getValues();
  tel = formatPhoneNumber(tel);

  if(!tel){
    return 0;
  }

  for (var i = 0; i < rows.length; i++) {
    if (formatPhoneNumber(rows[i][col]) === tel) {
      // 見つかった行の処理
      var rowNumber = i + 1; // 見つかった行の行番号
      return rowNumber;
    }
  } 
  return 0;
}

function merge() {

  ///////////////////////////////////////////////////////////////
  // Google Spreadシート統合マクロ
  // 2023 SD
  // 用途:電話番号を共通キーにして、指定した2つのGoogleスプレッドシートの行を合成出力します。
  // ここから下の設定を毎回、確認してください。

  //使用するスプレッドシート。URLから id を確認してください。
  var HubSpotSpreadSheet    = SpreadsheetApp.openById(""1RZwP0...."などのGoogleスプレッドシート(HubSpot出力)のidをURLから見つけて指定】") //"HubSpotからExportしたデータ";
  var GoogleFormSpreadSheet = SpreadsheetApp.openById(""1RZwP0...."などのGoogleスプレッドシート(GoogleForm出力)のidをURLから見つけて指定】") //"Googleフォーム(回答)"の内容;
  //結果を出力するスプレッドシートの情報
  var mySpreadSheet = SpreadsheetApp.getActiveSpreadsheet();

  //シートの取得。シートタブから名称を確認してください。
  var HubSheet   = HubSpotSpreadSheet.getSheetByName('シート1');
  var GFormSheet = GoogleFormSpreadSheet.getSheetByName('フォームの回答 1');
  var MySheet = mySpreadSheet.getSheetByName('シート1');

  //HubSpotシートにおける電話番号列(A列=0)
  var HubSpotTelephoneColumn = 2;
  //Google Formシートにおける電話番号列(A列=0)
  var GFormTelephoneColumn = 2;
  //書き出すスプレッドシートでは、何列目から追加データを書き出しますか?(A列=0)
  var MySpreadSheetAdditionalDataColumn = 5;

  // ここまで
  ///////////////////////////////////////////////////////////////

  var HrowsRange = HubSpotSpreadSheet.getDataRange();
  var GrowsRange = GoogleFormSpreadSheet.getDataRange();
  var Hrows = HrowsRange.getValues();
  var Grows = GrowsRange.getValues();
  
  // 行ごとに処理
  for (var i = 1; i < Hrows.length; i++) {
    var Hrow = Hrows[i];
    
      //書き込む自分のシートの最終行
      var lastRow = mySpreadSheet.getLastRow();

      //データ元
      var collength = HrowsRange.getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();

      //電話番号で検索
      //SpreadsheetApp.getUi().alert("telは"+Hrow[HubSpotTelephoneColumn]+"です");
      var telNum = Hrow[HubSpotTelephoneColumn];
      var res = searchRow(GFormSheet, GFormTelephoneColumn, telNum);
      if(res > 0){
        //found!
        //基本データ コピー&ペースト
        var Hdata = [Hrow]; //HubSpot Data
        var pasteRange1 = MySheet.getRange(lastRow+1, 1, 1, Hdata[0].length);
        pasteRange1.setValues(Hdata);
        //SpreadsheetApp.getUi().alert("基本データをコピー完了");

        //Additional コピー&ペースト
        var Grow = Grows[res-1]; //GForm Data
        var additionaldata = [Grow];
        var pasteRange2 = MySheet.getRange(lastRow+1,MySpreadSheetAdditionalDataColumn,1, additionaldata[0].length);
        pasteRange2.setValues(additionaldata);
        //SpreadsheetApp.getUi().alert("追加データをコピー完了");
      }
  }
  SpreadsheetApp.getUi().alert("統合できたデータの出力が終わりました。");
}

このコードをこんなスプレッドシート【Google SpreadSheet C】に入れておきます。
image.png

メニューに登録

だれでもメニューから選択して実行できるように登録します。
「マクロをインポート」を選択してください。

image.png

merge() という関数をボタンを押して(メニューに)追加します。
image.png

メニューに表示される名前は、[マクロの管理]から変更できます。

image.png

このように、[拡張機能]→[マクロ]のメニューから表示されるようになりました。

image.png

終わりに

頼まれてここまで準備しましたが、実際に使用する営業の方は、手元のiPadで実際に動かして使用されていたので驚きました。PCではなくて、iPadでサクッと実行してHubSpotへのインポートまで完了なんて。使い方は人それぞれなんですね~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0