GoogleスプレッドシートのA列の重複しないデータ(A1とA3のみ)の行内容を新規配列に追加したいですが、
うまくGASが書けないです。
array = [A1,A2,A2,A3,A4,A4];
array2 = [A2,A2,A4,A4];
arrayとarray2の差分で[A1,A3]は取得できますが、もっと効率の良いGASが書けないですが、どうでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
jaavascript
1SpreadsheetApp.getActiveSheet().getDataRange().getValues().map(e=>e[0]).filter((e,i,a)=>a.indexOf(e)===i);
indexOfにこだわりないなら、Setを使ったほうが可読性高いと思います。
投稿2020/03/06 11:24
総合スコア12705
0
ベストアンサー
こんな感じですか?
実際につくってみて、A列の重複してるものだけをリストアップ。
それを対象にA列の値を一個ずつしらべて、falseならば配列にpushする感じです。V8 Runtimeをオンで使用しています。
javascript
1//実際に出力してみる 2function hikaku(){ 3 //スプレッドシートのデータを取得する 4 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); 5 6 //シートデータを取得する 7 var ss = sheet.getRange("A1:C6").getValues(); 8 9 //A列だけ取得する 10 var array = sheet.getRange("A1:A6").getValues(); 11 12 //A列を1次元配列で取り出す 13 const list = array.reduce((pre,current) => {pre.push(...current);return pre},[]); 14 15 //重複要素だけ取り出す 16 let result = list.filter(function(x, i, self) { 17 return self.indexOf(x) !== i; 18 }); 19 20 //ssの塊から重複していないレコードだけ、配列に取り出す 21 var singleman = []; 22 23 for(var i = 0;i<ss.length;i++){ 24 //重複リストにいるかどうか判定 25 var ret = result.includes(ss[i][0]); 26 27 //falseの場合配列にレコード単位でpush 28 if(ret == false){ 29 singleman.push(ss[i]); 30 } 31 } 32 33 //スプレッドシートのE列辺りに出力 34 var lastColumn = singleman[0].length; //カラムの数を取得する 35 var lastRow = singleman.length; //行の数を取得する 36 sheet.getRange(1,5,lastRow,lastColumn).setValues(singleman); 37 38}
投稿2020/03/06 12:39
総合スコア412
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 03:32
2020/03/09 04:38
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 14:37