たとえば、列C
のように、Googleスプレッドシートで一部のデータを自動的に並べ替えたいとします。
それ、どうやったら出来るの?
右クリックしてデータの並べ替えを選択することで、手動でデータを並べ替えることができますが、これは私が探しているものではありません。
そのために sort()
関数 を使用できますが、データをある場所に置き、そのデータのコピーを別の場所に自動的にソートする必要があります。
たとえば、データを含むSheet1があるとします。
| A | B | C
=====================
1 | This | this | 2
2 | Is | is | 1
3 | Test | test | 3
次に、Sheet2、セルA1にこの関数を配置します。
= sort(Sheet1!A:C、3、TRUE)
これにより、データが表示されますが、列C(3番目の列)で昇順で並べ替えられます。
| A | B | C
=====================
1 | Is | is | 1
2 | This | this | 2
3 | Test | test | 3
Google Apps Scripts を使用して、データのインプレース自動ソートを実現することもできます。
これは達成が難しく、エラーが発生しやすいかもしれませんが(ウィリアムジャクソンのソリューション+1 BTWを引き続き使用します)、表示するには十分に興味深いと思いました。
次のようなシートがあります。
次の手順を使用して、新しいスクリプトを追加しました。
表示される空のコードウィンドウに、セルが編集されるたびに自動的に実行される次のコードを貼り付けます。
function onEdit(event){
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 4;
var tableRange = "B3:E9";
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
シートに戻って値をいじって、毎回テーブルが自動的にソートされるのを確認します
注:
上記のスクリプトでは、
4
は列Dのインデックスを表します(Value
列-並べ替えられる列)"B3:E9"
はテーブル範囲を表します(ヘッダー行を除く)テーブルはおそらく私のものとは異なるため、これらの値はそれに応じて調整する必要があります。
以下は、最初の列に基づいて自動ソートされ、ヘッダー行を前提とする一般的なスクリプトです。
スクリプトを作成するには:
空のコードウィンドウに、セルが編集されるたびに自動的に実行される次のコードを貼り付けます。
// LinkBack to this script:
// http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036
/**
* Automatically sorts the 1st column (not the header row) Ascending.
*/
function onEdit(event){
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 1;
var tableRange = "A2:T99"; // What to sort.
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy, ascending: true } );
}
}
スクリプトを使用しない別のオプションは次のとおりです。
=QUERY(A1:C3,"SELECT * ORDER BY C")
範囲が制限されています(A1:C3)。順序が昇順の場合、空白のエントリが最初に表示されるためです。
Google Sheetsには Filters という理由があり、ドキュメントに新しいシートを作成する必要はありません。
ドロップダウンメニューの列で並べ替えてから、日付で並べ替えたいと思いました。
これを行うには、Cristianまたはgeekspotzのコードスニペットの「range.sort」行を次のように変更します。
// Sorts descending by edited column, then ascending by column 1
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);
違いは、ステートメント全体(配列)を囲む角括弧を追加し、ソートをコンマで区切ることです。
SergeのStack Overflowの回答から取得したコード変更のソートはこちら: シートの自動ソート