Попробуйте это:
Вероятно, есть много более простых способов сделать это. Но мне понравилась проблема, так что вот способ сделать это. Этот пример генерирует собственные случайные данные, поэтому вам нужно их извлечь, прежде чем запускать в своем наборе данных. Но если я вставил его правильно, и вы правильно скопировали его и сделали Sheet2, чтобы он работал, тогда он должен работать нормально для вас. Если нет, то будьте готовы отладить его самостоятельно.
Кстати, у него также есть некоторые посторонние заметки и результат, чтобы я мог выяснить, работает ли он или нет. Удачи. Также я не пробовал, но не думаю, что это волнует, если месяцы появляются в последовательных столбцах.
function removeDupesInGroups(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet2');
generateContent(3,1,100,9);
var rg=sh.getRange(1,1,sh.getLastRow(),9);
var vA=rg.getValues();
var hdr={};
var dA=[];
for(var j=0;j<vA[0].length;j++){
if(!hdr.hasOwnProperty(vA[0][j])){
hdr[vA[0][j]]=[];
hdr[vA[0][j]].push(j);
}else{
hdr[vA[0][j]].push(j);
}
}
var n=0;
for(key in hdr){
var m=key;
var uA=[];
for(var i=2;i<vA.length;i++){
var tA=[];
for(var j=0;j<vA[i].length;j++){
var elements=hdr[key].join(',');
if(hdr[key].indexOf(j)>-1){
tA.push(vA[i][j]);
}
}
if(i<vA.length){
if(!isArrayContained(uA,tA)){
uA.push(tA);
}else{
sh.deleteRow(i - n + 1);
dA.push([Utilities.formatString('n=%s,i=%s,deleeting row %s,key=%s,group=%s',n,i,i-n+1,key,tA.join('|'))]);
sh.getRange(1, 10).setValue(Utilities.formatString('n=%s,i=%s,deleeting row %s,group=%s',n,i,i-n+1,tA.join(',')));
n++;
}
}
}
}
var resultrg=sh.getRange(sh.getLastRow()+2,1,dA.length,1).setValues(dA);
}
function isArrayContained(c,t){
for(var i=0;i<c.length;i++){
var isEqual=true;
for(var j=0;j<c[i].length;j++){
var t1=c[i][j];
var t2=t[j];
if(c[i][j]!=t[j]){
isEqual=false;
break;
}
}
if(isEqual){
return true;
}
}
return false;
}
function generateContent(row,col,rows,cols){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet2');
sh.getDataRange().clearContent();
sh.getRange(1,1,2,9).setValues([['Jan','Jan','Jan','Feb','Feb','Feb','Mar','Mar','Mar'],['Header','Header','Header','Header','Header','Header','Header','Header','Header']])
var rg=sh.getRange(row,col,rows,cols);
var vA=rg.getValues();
var s="For the Lamb on the Throne will be their Shepard.";
for(var i=0;i<vA.length;i++){
for(var j=0;j<vA[i].length;j++){
vA[i][j]=s.charAt(Math.floor(Math.random() * s.length+1));
}
}
rg.setValues(vA);
}