2017-09-08 11 views
1

カラムBの値を比較して重複を取り除く作業コードがあります。カラム2とカラム3の値がカラムBに同じであれば、ロー3が削除されます。 Googleアプリケーションスクリプトの配列が重複した値を上から削除します

function removeDuplicates() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var data = sheet.getDataRange().getValues(); 
    var newData = new Array(); 
    for(i in data){ 
    var row = data[i]; 
    var duplicate = false; 
    for(j in newData){ 
     if(row[1] == newData[j][1]){ 
     duplicate = true; 
} 
    } 
    if(!duplicate){ 
     newData.push(row); 
    } 
    } 
    sheet.clearContents(); 
    sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData); 
} 
このコードを編集して配列を作成し、行3の代わりに行2を削除するにはどうすればよいですか?

答えて

1

私はこれを行うと思います。

function removeDuplicates() { 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet(); 
    var rg=sh.getDataRange(); 
    var row=rg.getRow(); 
    var col=rg.getColumn(); 
    var vA=rg.getValues(); 
    var nA=[]; 
    var duplicate=true; 
    for(var i=0;i<vA.length;i++) 
    { 
    duplicate=false; 
    for(var j=0;j<nA.length;j++) 
    { 
     if(vA[i][1]==nA[j][1]) 
     { 
     duplicate=true; 
     nA[j]=vA[i]; 
     } 
    } 
    if(!duplicate) 
    { 
     nA.push(vA[i]); 
    } 
    } 
    rg.clearContent(); 
    sh.getRange(row, col, nA.length, nA[0].length).setValues(nA); 
} 

外側のループは、アクティブなシートのすべての行を反復処理しており、そのたびに重複をfalseに設定します。内側のループはnA []を検索し、duplicateをtrueに設定したものが見つかるとcolumnBの一致を探します。重複が真であれば、nA []に追加されません。最初のnA.lengthは0なので、内側のループは何もしません。したがって、重複はfalseで、その要素はnA []に追加されます。それ以上の行がなくなり、nAにある行が一意の行になるまで、これを続けます。それが私が最初にやったときに実行する方法です。しかし、最初のものの代わりに最後の複製を残したかったので、現在の要素を現在のマッチに置き換えるnA[j]=vA[i];を追加しました。

偽のデータを設定して再生するだけで、その動作を確認できます。

+0

これはまったく何もしていないようです。 – testing123

+0

申し訳ありません。時々私は質問全体を読むことができません。しかし、私はこれがあなたが望むものだと思います。今度は最後の複製が保持されます。 – Cooper

+0

コードで何が起こっているのかを簡単に説明できますか?コードはうまくいきます。明らかに私の脳はそうではありません。私は、私が考えていることにコメントを追加しました。ありがとう。 – testing123

関連する問題