

初めて投稿いたします。

スプレッドシートで見積書のファイルを作成し、ファイル内の特定のセルの値を別のスプレッドシート売り上げファイルに自動入力したいです。ほかのメンバーも同じ売り上げファイルに反映させていきたいのでセルが重ならないようにしたいのですが何か方法はありますでしょうか？  
見積書ファイルの中にボタンを作りボタンを押せば実行されるようにしたいと考えております。

初心者のためどこから始めればよいのかわからない状況です

ご教示いただけないでしょうか？よろしくお願いいたします


CC BY-SA 4.0
2020-02-27T02:11:20.730
63393
2020-02-29T13:44:43.180
2020-02-27T02:41:04.770
3060
37984
question
google-apps-script google-spreadsheet
スプレッドシートで作成した見積書をリンクや金額、件名等を別のスプレッドシート売り上げファイルに自動入力


こんにちは、はじめまして

  * 複数の見積書がGoogle Sheetsとして存在する
  * 見積書の内容を集計して一つのSheets(集計用)にまとめる

とすると、Google-Apps-Scriptで集計するのが良いと思います。  
下記は任意の"Sheet"の内容を一つのシートの"Output"のなかにまとめるスクリプトとなります。

ToolのScript Editorから下記のスクリプトを追加して。spreadSheetKeyを自分の  
シートのものに変更して"Sheet"と"Output"の名前でシートを作れば動作すると思います。

まったくわからないときはチュートリアルからすすめてみてください。

<https://developers.google.com/apps-script/overview#your_first_script>

[code]

    function toSummary() {
      var ssMitumori = SpreadsheetApp.getActiveSpreadsheet();
      var mitumoriId = ssMitumori.getId();
      var sheetRef = ssMitumori.getSheetByName("Sheet");
      //移動したいデータをコピーする、シートのIDをキーにして重複を防ぐ
      var data = {"ID":mitumoriId};
      data["A1"] = sheetRef.getRange("A1").getValue();
    
      //ここでサマリ用のシートを開く:urlの中のシートID(長いランダムな文字列)を指定します//
      //the spreadsheet ID in the URL https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0 is "abc1234567".
    　var spreadsheetKey = "[DUMMY]";
      var ssSyuukei = SpreadsheetApp.openById(spreadsheetKey);
      var sheetRef  = ssSyuukei.getSheetByName("Output");
    
      //A=ID,B=値　を保持するものとする
      //sheetRef.getLastColumn
      var oldDatas = sheetRef.getRange("A1:B").getValues();//A,B列に格納されたデータを取得して保持
      var filtered = oldDatas.filter(function(r){
        return r.join("").length>0;
      });
      var merge = {};
      for(var k in filtered){
        var v = filtered[k];
        merge[v[0]]={"ID":v[0],"A1":v[1]} 
      }
      merge[data.ID] = data;
      sheetRef.clear();//配列に元データを確保したのでシートは一旦削除します
    
      //集計先のシートに一行づつ出力
      var colNo = 1;
      var rowRef = {0:"ID",1:"A1"}
      for(var k in merge){
        var column = merge[k];
        j=1;
        for(var _key in rowRef){
          var key = rowRef[_key];
          sheetRef.getRange(colNo,j).setValue(column[key]);
          j=j+1;
        }
        colNo++;
      }
    }
    
[/code]

値を追加したい場合は以下のように増やしていくことができます

[code]

    function toSummary() {
      var ssMitumori = SpreadsheetApp.getActiveSpreadsheet();
      var mitumoriId = ssMitumori.getId();
      var sheetRef = ssMitumori.getSheetByName("Sheet");
    
      //集計元のシート側で移動したいデータをコピーする、シートのIDをキーにして重複を防ぐ
      var data = {"ID":mitumoriId};
      data["A1"] = sheetRef.getRange("A1").getValue();
      data["B1"] = ssMitumori.getUrl()//追加したい値
    
      //ここでサマリ用のシートを開く:urlの中のシートID(長いランダムな文字列)を指定します//
      //the spreadsheet ID in the URL https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0 is "abc1234567".
    　var spreadsheetKey = "[DUMMY]";
      var ssSyuukei = SpreadsheetApp.openById(spreadsheetKey);
      var sheetRef  = ssSyuukei.getSheetByName("Output");
      //A=ID,B=シートからの値,C=URL　を保持するものとする
      var oldDatas = sheetRef.getRange("A1:C").getValues();//A,B,C列に格納されたデータを取得して保持
      var filtered = oldDatas.filter(function(r){
        return r.join("").length>0;
      });
      var merge = {};
      for(var k in filtered){
        var v = filtered[k];
        merge[v[0]]={"ID":v[0],"A1":v[1],"B1":v[2]} 
      }
      merge[data.ID] = data;
    
      //`merge`の内容を集計先のシートに一行づつ出力
      sheetRef.clear();//配列に元データを確保したので集計先のシートは一旦削除します
    　var colNo = 1;
      var rowRef = {0:"ID",1:"A1",2:"B1"}
      for(var k in merge){
        var column = merge[k];
        j=1;
        for(var _key in rowRef){
          var key = rowRef[_key];
          sheetRef.getRange(colNo,j).setValue(column[key]);
          j=j+1;
        }
        colNo++;
      }
    }
    
[/code]


CC BY-SA 4.0
2020-02-28T06:01:12.920
63429
2020-02-29T13:44:43.180
2020-02-29T13:44:43.180
37777
37777
63393
answer