質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2634閲覧

[GAS]スプレッドシートの重複した行を削除したい

xu0124

総合スコア31

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/08/22 12:29

名称No
りんご1
ばなな1
りんご2
ばなな2
りんご3
ばなな3

GASでA列の重複した名称がある行を削除したいのですが、下記のコードを実行すると

  • りんご|1|
  • ばなな|1|

のみ残ります。そうではなくて逆の

  • りんご|3|
  • ばなな|3|

という下の行のほうが残る結果にしたいのですが、
どのように記述を変更したらよろしいでしょうか?

js

1function removeDuplicatesLines() { 2 var sheet = SpreadsheetApp.getActiveSheet(), 3 rowNum = 3000, 4 targetCol = 1, 5 maxCol = 10, 6 7 dataTel = sheet.getRange(1,targetCol,rowNum,1).getValues(), 8 data = sheet.getRange(1,1,rowNum,maxCol).getValues(), 9 10 newData = new Array(), 11 checkData = new Array(); 12 13 for (i in data) { 14 var row = data[i], 15 checkRow = dataTel[i], 16 duplicate = false; 17 for (j in checkData) { 18 if (checkRow.join() == checkData[j].join()) { 19 duplicate = true; 20 } 21 } 22 if(!duplicate){ 23 checkData.push(checkRow); 24 newData.push(row); 25 } 26 } 27 28 sheet.clearContents(); 29 sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData); 30}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

実際のスプレッドシートの状態が不明なため、上記に示された入力サンプルから希望する出力サンプルを取得することをゴールとすると、sort()と最近導入されたremoveDuplicates()を使用することで下記のように書くこともできます。ただし、これが実際に使われている状況下で使用可能かどうかは不明です。これについては申し訳ありません。

スクリプト

javascript

1SpreadsheetApp.getActiveSheet().getRange("A:B").sort({column: 2, ascending: false}).removeDuplicates([1]);
  • 上記の入力サンプルをスプレッドシートの"シート1"の列A, Bへコピーペーストし、"シート1"がアクティブな状態でこのスクリプトを実行すると、ご希望の結果である下記が残ります。
りんご|3| ばなな|3|

参考

投稿2019/08/23 00:04

kisojin

総合スコア899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xu0124

2019/08/23 01:36

ありがとうございます!バッチリできました! ソートで降順にするのですね、勉強になりました!!!
kisojin

2019/08/26 22:10

ご返事ありがとうございます。無事解決したとのことで安心しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問