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

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

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

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

Q&A

2回答

3124閲覧

GASでの背景色によるソート

yukiiii

総合スコア8

Google Apps Script

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

0グッド

1クリップ

投稿2020/05/01 02:49

お世話になります。

GASを使ってセルの背景色ごとにソートをしたいと考えております。
背景色となる色は1色のみで、予め決まっております。
※複数列を順番にソートしたいため、手動ではなくGASを利用したいと考えております

イメージ説明

処理としては非常にシンプルなものかと思うのですが、
マクロで記録して、スクリプトを確認してみても、
降順にソートするという内容にしかならないため、お聞きできれば幸いでございます。

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

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

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

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

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

papinianus

2020/05/02 04:35

やったことないので伺いますが手動ではできるのでしょうか?できるならその方法を教えてください。 同じ色の場合、順序が保証されないこと(おおお→うううになること)は許容できると思ってよいですよね?できないならその順序を教えてください。 あと複数の色があった場合の順序をどうするかの仕様も決めてください。
guest

回答2

0

Javascript

1 2function sortByColors() { 3 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 const sheet = spreadsheet.getSheetByName('colors'); 5 const range = sheet.getRange('A2:Z'); 6 7 //色が付いているセルを2次元配列として取得する [ [ '#d9d2e9' ],[ '#f4cccc' ], [ '#fff2cc' ].... 8 const colors = range.getBackgrounds(); 9 //白を削除する 10 const values = colors.map(array => array.filter(color => color !== '#ffffff')); 11 //1次元配列の要素がゼロ、空の1次元配列を削除する 12 const newValues = values.filter(array => array.length > 0); 13 14 console.log(`空の配列削除後:${newValues.length}`); 15 console.log(`filter後:\n ${newValues}`); 16 17 18 //影響を受けない範囲に、色情報を一旦書き出す。 19 const targetColumn = sheet.getLastColumn() + 1; 20 const tempRange = sheet.getRange(2, targetColumn,newValues.length, 1); 21 tempRange.setValues(newValues).setFontColor('#ffffff'); 22 23 console.log(`lastColumn: ${targetColumn}`); 24 console.log(`tempRange : ${tempRange.getA1Notation()}`); 25 26 27 //一度書き出した色情報を元にsortする。 28 range.sort([ 29 {column: targetColumn, ascending: false} 30 ]); 31 32 //一旦書き出した色情報をクリアする。 33 tempRange.clearContent(); 34 35}

僕も質問者様と全く同じ事がしたいと思っていて、GASで書きました。
noteにスクリプトの解説記載しています。良かったら、見ていってください。
https://note.com/nepia_infinity/n/n9756105bd372

投稿2021/03/01 11:55

nepia_infinity

総合スコア14

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

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

0

Range クラスの getBackgrounds メソッドを使って背景色を取得すれば、ソートできそうです。
https://developers.google.com/apps-script/reference/spreadsheet/range#getbackgrounds

投稿2020/05/01 10:58

編集2020/05/01 12:17
tanabee

総合スコア96

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問