前提
A列からE列までが名前、アドレス、参加日、参加グループ、性別の5列のデータから
名前、アドレス、性別の3つのデータが重複した行を、別のシートに転記させたいです。
実現したいこと
今は名前、アドレス、性別をまとめて一つのデータにしてから重複を探しているのですが、
重複したデータを転記するときに1つのセルに名前、アドレス、性別が一緒になって表示されるようになっています。
重複した行を元のデータのように5列で表示させるにはどうすれば良いでしょうか?
1つのデータにしているのは3つのセルが一緒だった場合のやり方がわからないためです
GAS初心者のため、稚拙なコードですが教えていただきたいです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
GAS
1function myFunction() { 2 var SS =SpreadsheetApp.getActiveSpreadsheet(); 3 var Sheet =SS.getSheetByName("シート"); 4 var DuplicationSheet=SS.getSheetByName("重複"); 5 6 var StartColumn = 1; 7 var StartRow=2; 8 var LastColumn=5; 9 var LastRow =Sheet.getRange(Sheet.getMaxRows(),StartColumn).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 10 11 var Array=Sheet.getRange(StartRow,StartColumn,LastRow-1,LastColumn).getValues(); 12 13 //重複を探すためのデータだけにした 14 var Array1=Array.map(elm => [elm[0],elm[1],elm[4]]); 15 16 //ArrayからArray1を除いた配列 17 var Array2=Array.map(elm => [elm[2],elm[3]]); 18 19 //重複を探すためのデータを結合 20 var Array3=[]; 21 for(var i =0; i <Array1.length; i++){ 22 Array3.push(Array1[i].join("")); 23 } 24 //Array3を二次元配列にする 25 var Array4=[]; 26 Array3.forEach(value => Array4.push([value])); 27 Logger.log(Array4); 28 29 //Array2とArray4を結合してArray5にする 30 var Array5=[]; 31 for(y in Array4){ 32 if(Array2[y]){ 33 Array5[y]=Array4[y].concat(Array2[y]); 34 }else{ 35 Array5[y]=Array4[y]; 36 } 37 } 38 var Result=Array3.filter(function(x,i,self){ 39 return self.indexOf(x)!==i; 40 }) 41 var Single=[]; 42 for(var i=0;i<Array5.length;i++){ 43 var Ret=Result.includes(Array5[i][0]); 44 if(Ret==true){ 45 Single.push(Array5[i]); 46 } 47 DuplicationSheet.getRange(2,1,Single.length,3).setValues(Single); 48 } 49} 50
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
元のデータ
得たい結果
回答1件
あなたの回答
tips
プレビュー