2017-12-12 13 views
0

Google App Scriptを使用すると、Sheet1に存在するSheet2のIDを見つけて、Sheet2内のCommentフィールドに記載されているものとともにSheet1内にコメントフィールドを追加します。別のセルの値に基づいて行を追加するGoogleスクリプト

シート1は:

Sheet2のIDに基づいて、すべてのデータを保持します:

Sheet1の例次の使用例は、シート1に、いくつかのID年代に

ID Type In Stock Comment 
1 Apple Yes 
2 Banana No 
3 Orange Yes 

Sheet2の例

ID Comment 
1 Text 
2 Text 
に関連するコメントを保持します

コード

これは、私はIDが可変であるとして明らかに、これは、このケースでは動作しません、「はい」と呼ばれる変数を識別するために、私の元データをループ何か他のもののために使用してきたコードですダイナミックなものを見つける必要があります。

私はこのコードを変更してSheet2をループし、すべてのIDを取得し、そのIDをSheet1に対してチェックするようにしています。これらのIDがSheet1に存在する場合は、Sheet2に既にリストされているコメントをSheet1のコメントに更新してください。

function setComment(){ 
     var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
     var lastRow = outputSheet.getLastRow(); 
     var lastCol = outputSheet.getLastColumn(); 
     var targetValues = []; 

     var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); 
     var lastSourceRow = sourceSheet.getLastRow(); 
     var lastSourceCol = sourceSheet.getLastColumn(); 

     var sourceRange = sourceSheet.getRange(1, 1, lastSourceRow, lastSourceCol); 
     var sourceData = sourceRange.getValues(); 

     { 

     //Loop through every retrieved row from the Source 
     for (row in sourceData) { 
      //IF Column I in this row has 'Yes', then work on it. 
      if (sourceData[row][1] === 'Yes') { 
      //Save it ta a temporary variable 
      var tempvalue = [sourceData[row][0], sourceData[row][7]]; 
      //then push that into the variables which holds all the new values to be returned 
      targetValues.push(tempvalue); 
      } 
     } 

     //Save the new range to the appropriate sheet starting at the last empty row 
     outputSheet.getRange(lastRow + 1, 1 , targetValues.length, 2).setValues(targetValues); 

     } 
    } 

答えて

1

はい、1つのIDグループをループする必要があります。そのループでは、他のIDのグループを通過するループをネストする必要があります。

コード

function setComments() { 

    var ss = SpreadsheetApp.getActive(), 
     compare1 = "", compare2 = "", 

     outputSheet = ss.getSheetByName("Sheet1"), 
     sourceSheet = ss.getSheetByName("Sheet2"), 

     range1 = outputSheet.getDataRange(), 
     range2 = sourceSheet.getDataRange(), 

     lastCol1 = range1.getNumColumns(), 
     lastCol2 = range2.getNumColumns(), 

     values1 = range1.getValues(), 
     values2 = range2.getValues(), 

     // get the range of the titles 
     titleSection1 = outputSheet.getRange(1,1,1, lastCol1), 
     titleSection2 = sourceSheet.getRange(1,1,1, lastCol2), 

     // get the values from the titles 
     titles1 = titleSection1.getValues(), 
     titles2 = titleSection2.getValues(), 

     // get the column # for "ID" and "comment" 
     idCol1 = titles1[0].indexOf("ID"), 
     idCol2 = titles2[0].indexOf("ID"), 
     commentsCol1 = titles1[0].indexOf("comment"), 
     commentsCol2 = titles2[0].indexOf("comment"); 

    // get the IDs from range1 
    for (i = 1; i < values1.length; i++) { 
    compare1 = values1[i][idCol1]; 

    // get the IDs from range2 
    for (j = 1; j< values2.length; j++){ 
     compare2 = values2[j][idCol2]; 

     // if same ID, change the values array 
     if (compare1 == compare2) { 
     values1[i][commentsCol1] = values2[j][commentsCol2]; 
     } 
    } 
    } 
    // set values based on the values array 
    range1.setValues(values1); 
} 
+1

おかげアントワーヌ、私はこのような何かを考えていたが、それは仕事を得ることができませんでした。 私はそれを打つつもりです! – bdev

+0

@bdevどうしたらいいか教えてください! –

関連する問題