質問者様提示のコード(t()として再現)をエラーなく実行するために squarize が必要なので、実装しました。
(sample data やその他のコードを補わなければ回答不能です。未知のものをこちらが妄想するほど望ましい回答からは離れますし、その的外れな空想のために不必要な誰も嬉しくない時間がかかることをどうかご理解いただきたいです)
→ なので、squarize だけ持っていけば実行可能だと思います。多分。
ところが実行したところ、下にサンプル出力を出しましたが、欲しいかたちとして私には全く理解不能でした。
(出力が多すぎて(右に長くなりすぎて)10000字を越え、別回答にすら貼ることができませんでした。サンプルデータとコードをかいているので、実行と再現が可能なはずなので割愛しました)
得ようとしている結果はデータ構造としておすすめできない形式ですが、すくなくとも一定程度の整合性をもたせるには、q293827() 程度の一貫的な結果が必要なのではないでしょうか。
いちおう sample では末尾列に a があるかないかで不揃いにしています。もし元データがもっと不揃いなのだとしたら、q293827() だと空白が間にはさまってしまって不適切だと思いますが、右に展開した列が各列で不揃いであるほうがより良くないと考えて再構成しました。
本来やりたかったことに立ち返って、元データから見直すことをご提案いたします。ご検討いただければと思います。
javascript
1const notOk = (data) => {
2 const isNotOk = {"col":15,"val":"ok"};
3 return data.filter(e=>e[isNotOk.col] !== isNotOk.val);
4};
5const buildDicForSingle = (data) => {
6 const isSingle = {"col":1,"val":"SinglePhrase"};
7 const wordCol = 12;
8 return new Map(data.reduce((a,c,i)=>c[isSingle.col] === isSingle.val ? a.concat([[c[wordCol],i]]):a,[]));
9}
10const merge = (data,map) => {
11 const wordCol = 12;
12 return data.reduce((a,c,i)=>{ Logger.log(a);return map.has(c[wordCol]) ? ((map.get(c[wordCol]) !== i) ? a : a.concat([data.filter(e=>e[wordCol] === c[wordCol]).flat()])) : a.concat([c])},[]);
13}
14const squarize = (jag) => {
15 const maxLen = Math.max(...jag.map(e=>e.length));
16 const empties = Array(maxLen).fill("");
17 return jag.map(e=> e.concat(empties).slice(0,maxLen));
18}
19const q293827 = () => {
20 const book = SpreadsheetApp.getActive();
21 const data = book.getActiveSheet().getDataRange().getValues();
22 const notok = notOk(data);
23 const dic = buildDicForSingle(notok);
24 const res = merge(notok,dic);
25 const format = squarize(res);
26 if(format.length < 1) return;
27 book.getSheetByName("1").getRange(1,1,format.length,format[0].length).setValues(format);
28}
29
30function compare(data) {
31 let newarray = []
32 for(var i=1; i < 5000 ; i++){
33 if(data[i][15] !== "ok")
34 newarray.push(data[i])
35 for(var j=2; j < 5001 ; j++){
36 if(i !== j && data[i][1] === "SinglePhrase" && data[j][1] === "SinglePhrase" && data[j][15] !== "ok"){
37 if (data[i][12] === data[j][12] ) {
38 newarray[newarray.length - 1] = newarray[newarray.length - 1].concat(data[j]);
39 data[j].push("ok")
40 }
41 }
42 }
43 }
44 return newarray
45}
46function t() {
47 const book = SpreadsheetApp.getActive();
48 const data = book.getActiveSheet().getDataRange().getValues();
49 const format = squarize(result);
50 book.getSheetByName("1").getRange(1, 1, format.length, format[0].length).setValues(format);
51}
52
53
-- sample data
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
---|
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 1 | 3 | 4 | 5 | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | 5 | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | 5 | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
| a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | 5 | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | 5 | a |
| a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 9 | 3 | 4 | 5 | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 10 | 3 | 4 | 5 | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 1 | 3 | 4 | ok | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | ok | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | ok | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
| a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | ok | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | ok | a |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 9 | 3 | 4 | ok | |
| SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 10 | 3 | 4 | ok | a |