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