前提・実現したいこと
業務上、シート数の多いスプレッドシートにて翻訳する必要がございまして、仕事の効率化を捗るためにGASを勉強しています。
今回はシートごとに効率よく用語集の作成するために、GASを使ってスプレッドシート内の全てのシートを対象として、シートにあるデータの中に重複していないデータのみ抽出し、新しい行を追加して、重複していないデータを記入したいです。
プログラミングの初心者で、ネットで似たようなコードを検索してアレンジしていますが、どこから間違っているのかが分からなくて、ご教授頂ければ幸いです。
発生している問題・エラーメッセージ
重複していないデータの抽出まではできましたが、なぜか配列をオブジェクトに変換できないとエラーがでました。
また、アクテイブシートを対象にし、重複したデータを取得できていますが、シートごとを対象にコードを書き換えてましたら、
「TypeError: (class)@2e5cac0fは関数ではなくオブジェクトです」と表示されました。
該当のソースコード
1//var ss = SpreadsheetApp.getActiveSpreadsheet(); 2//var sheet = ss.getActiveSheet(); 3 4function readData() { 5 var column = 1, //対象列の指定 6 lastRow = sheet.getLastRow(), //最終列を取得 7 columnRange = sheet.getRange(1,column,lastRow,2), //範囲を取得 8 rangeArray = columnRange.getValues(); //データを取得 9 rangeArray = [].concat.apply([],rangeArray); 10 Logger.log(rangeArray); 11 return rangeArray; 12} 13 14function findUnique(data) { 15 var sortedData = data.slice().sort(); //データ配列をソート 16 var unique = []; 17 //var setCol = sheet.getLastColumn() + 1; //データのある最終行を取得して、新しい行を追加する際に使う予定です 18 19 for (var i = 0; i <= sortedData.length -1; i++) { 20 21 if (sortedData[i + 1] != sortedData[i]) { //重複していない文字を抽出 22 unique.push(sortedData[i]); 23} 24 } 25sheet.getRange(1,3).setValues(unique); 26} 27 28function main () { 29 var SSLink = SpreadsheetApp.openById('対象スプレッドシートID'); 30 var sheet = SSLink.getSheets(); 31 var data = sheet.forEach(readData()); 32 var Unique = sheet.forEach(findUnique(data)); 33 //var data = readData(); アクテイブシートを対象にした場合に使っていました 34 //var Unique = findUnique(data); 35 36}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 23:55
2019/05/29 02:54