2017-06-05 22 views
0

Googleシートを使用して基本的なCRMを作成しようとしています。すべてのクライアントのデータを1枚のシートに収め、別のシートに以下は、私が意味するものの例です。Googleシートのドロップダウン値に基づいてセルの値を移動(コピー)する

シート1:

Name | Email | Deal Stage | 
Ian  [email protected] >>Pre-launch << dropdown list 
Ken  [email protected] >>Pre-launch << dropdown list 
Dan  [email protected] >>Out-Reach << dropdown list 
Ben  [email protected] >>Call Booked<< dropdown list 

シート2:私は、ドロップダウン細胞の任意の項目のonEditを起動するスクリプトを作成しているよ

Pre-Launch | Out-Reach | Brochure Sent | Call Booked | 
Ian   Dan       Ben 
Ken 

。これは可能なのか、そして最もクリーンな方法がありますか?

私はこの機能を含むExample Sheetを作成しました。

答えて

0

もう一度試してください。

function dealStage(e) 
{ 
    //var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = e.source; 
    var sht = ss.getSheetByName('ClientData'); 
    var rng = sht.getDataRange(); 
    var rngA = rng.getValues(); 
    var clientheaders = rngA[0]; 
    var dsSht = ss.getSheetByName('DealStage'); 
    var dsShtRng = dsSht.getRange(2, 1, dsSht.getLastRow(), dsSht.getLastColumn()); 
    dsShtRng.clearContent(); 
    var dsShtHdrsRng = dsSht.getRange(1, 1, 1, dsSht.getLastColumn()); 
    var dsShtHdrsRngA = dsShtHdrsRng.getValues(); 
    var dsheaders = dsShtHdrsRngA[0]; 
    var prelaunch = []; 
    var outreach = []; 
    var brochuresent = []; 
    var callbooked = []; 
    var dsi = clientheaders.indexOf('Deal Stage'); 
    var ni = clientheaders.indexOf('Name'); 
    for(var i=1;i<rngA.length;i++) 
    { 

    var dsv = rngA[i][dsi]; 
    var nv = rngA[i][ni] 
    if(dsv!='') 
    { 
     switch(dsv) 
     { 
      case('Pre-Launch'): 
      prelaunch.push([nv]); 
      break; 
      case('Out-Reach'): 
      outreach.push([nv]); 
      break; 
      case('Brochure-Sent'): 
      brochuresent.push([nv]); 
      break; 
      case('Call-Booked'): 
      callbooked.push([nv]); 
      break; 
     } 
    } 
    } 
    var dsstartrow = dsSht.getLastRow()+1; 
    for(var i=0;i<dsheaders.length;i++) 
    { 
    var hdr = dsheaders[i]; 
    switch(hdr) 
    { 
     case('Pre-Launch'): 
     if(prelaunch.length>0)dsSht.getRange(dsstartrow,i+1,prelaunch.length,1).setValues(prelaunch); 
     break; 
     case('Out-Reach'): 
     if(outreach.length>0)dsSht.getRange(dsstartrow,i+1,outreach.length,1).setValues(outreach); 
     break; 
     case('Brochure-Sent'): 
     if(brochuresent.length>0)dsSht.getRange(dsstartrow,i+1,brochuresent.length,1).setValues(brochuresent); 
     break; 
     case('Call-Booked'): 
     if(callbooked.length>0)dsSht.getRange(dsstartrow,i+1,callbooked.length,1).setValues(callbooked); 
     break; 
    } 
    } 
    SpreadsheetApp.flush(); 
} 

ClientDataシート:

enter image description here

DealStageシート:

enter image description here

検証シート:

enter image description here

+0

ご協力ありがとうございます。ただし、このソリューションは、「取引ステージ」が個別のシートとして設定されている場合にのみ機能します。この場合、それは動作しません。私は、シート1にすべてのデータを保存し、シート2を使用して、誰かが 'Name'という名前の「Deal Stage」を表す必要があります。 – Bbrads

関連する問題